Python函数
函数
之前由于水平不足博客写的很不好,现于2019/12/17进行大更改。
1.内置函数
①python与其他编程语言一样有许多内置函数,我们可以直接调用使用,只需要知道参数和函数名。内置函数有很多,需要的话自行百度了解
②利用内置函数进行数据类型转换,int,float…
③可以把函数名复制给一个变量,然后用这个变量也可以调用该函数。
a=abs #用a代替abs函数
a(-1) #调用取绝对值函数
1 #产生结果与直接调用abs函数相同
==2.用户自定函数==
①用def语句定义函数,后面跟函数名,括号,括号里写参数名,还要加冒号。用return语句返回。没有return语句函数也可以,只不过返回值为none。
②python与c一样,也可以设置空函数,等到以后再补充内容,需要用pass语句。
def nop() :
pass
③isinstance(a,int)检查a是否为整形,也可以检查其他的类型,只需要改变int就行,返回值为true或flase。
import math
导入math包,允许后面调用math函数库内函数
==函数的参数==
函数参数分为:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。五种参数可以混合使用,但$\color{red}{文字必须按照上面的顺序依次设置}$。否则出错。
一、必选参数(位置参数):调用时必须写,还需要注意传入参数的顺序,不能乱序,不能省略,没有什么需要特别注意的地方。
1 | #也可以使用点名传入法,指出传给某个参数什么值,此时可以不用在意顺序 |
二、默认参数:在编写函数时赋予一个默认值。调用函数时如果输入新值则将新值代入函数,若未输入,则按默认值。
默认参数有个很大的坑,总之记住一点:默认参数必须指向不变对象。因为不变对象一旦创建,对象内部的数据就不能修改。
三、可变参数:只需要在参数前加上*即可。
1 | def calc(*numbers) : #创建的是numbers元组 |
输入的数据个数无限制(也可以是零个),任意的,直接调用:
calc(1,2,3,4)
如果已经有一个列表或元组,则可以:
num=[1,2,3]
calc(*num)
直接将list或tuple中的元素传入函数。方便快捷
四、关键字参数:
1.可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple(元组),
而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict(字典)(传入的时候也必须传入键和值)
2.关键字参数需要用两个**开头,在关键字参数里可以随意输入其他参数,个数也无限制
1 | def person(name, age, **kw): |
调用person函数(举例)
1
2
3person('Michael', 30)
name: Michael age: 30 other: { }
1
2
3person('Adam', 45, gender='M', job='Engineer') #等号前面的东西不能加引号
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}\
也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:
1
2
3
4
5extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
五、命名关键字参数:
==作用==:限制关键字参数的名字,用户不能随意输入参数。
def person(name, age, *, city, job):
print(name, age, city, job)
只接受city和job参数。其他参数不要
调用:
person(‘Jack’, 24, city=’Beijing’, job=’Engineer’)
Jack 24 Beijing Engineer
⑴如果前面已经有一个可变参数了,则后面的命名关键字参数就不在需要*修饰了
def person(name, age, *args, city, job):
print(name, age, args, city, job)
⑵调用命名关键字参数必须传入参数名
⑶命名关键字参数也可以设置默认值
小结
1、五种参数必须按顺序来调用
2、使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
3、虽然说五种参数能同时调用,但还是不要这样为好
==递归函数==
含义:函数内部调用函数本身
例:计算阶乘:
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
标准的递归函数,但是数值不能过大,过大可能会溢出。
函数存储
两个文件在同一个目录下的话,就可以在一个文件内导入另一个文件的函数,做法与以前导入其它模块一样,没什么特殊的,那些操作也都可以用。
作用:隐藏代码细节