Python函数的使用
1.创建函数
在Python中,创建一个函数需要用def,格式为def 函数名(形式参数):多个参数用逗号隔开,例如
注意函数体的缩进和函数头最后要加冒号
默认参数
在创建一个函数时,我们可以给形参默认值,在调用的时候,若没有给该形参值,则将使用默认值,但和c语言相同,所有没有默认值的形参,都必须在有默认值的的左边,例如:
def add(a,b,c=3):
print(a,b,c)
add(1,2)
结果为
1 2 3
单星号参数(收集参数)
当我们不知道我们这个函数需要多少个参数时,可以使用单星号参数,它在参数前加一个*
单星号形参表示:此处接受任意多个非关键字参数,且这些参数以元组形式存储。
单星号实参表示:将可迭代对象转为多个非关键字参数。
两者可以视为互逆关系,只是单星号实参使用类型更广,而单星号形参只会作为元组
def add(a,*b,c):
for i in b:
print(i,end=' ')
print(a,c)
add(*[1,2,3,4,5],c=6)
结果为
2 3 4 5 1 6
多星号参数
与单星号参数类似的还有多星号参数
多星号形参表示:此处接受任意多个关键字参数,这些参数以字典形式保存
多星号实参表示:将字典类型转换为多个关键字参数,再传递给函数作为参数
这两者就是简单的互逆关系,一个将关键字参数转为字典,另一个将字典转为关键字参数,例如
def fun(b, **a):
print(type(a))
for k in a:
print(k+":"+str(a[k]))
print(b)
dict1 = {"hello":1, "world":2}
fun(b="hh",**dict1, myname=3)
结果为
hello:1
world:2
myname:3
hh
单星号参数和多星号参数可以组成Python中的万能参数
def fun(*args, **kwargs):
pass
参数注解
在python3.5后引入的新用法,因为python函数的参数没有规定类型,所以就存在一些问题,比如:
由于没有规定类型,所以一些类型不对的问题很难发现
其他人在使用你的函数时,不知道应该传入什么参数
对函数的参数进行类型注解 ,对函数的返回值进行类型注解 ,只对函数参数做一个辅助的说明,并不对函数参数进行类型检查 , 提供给第三方工具,做代码分析,发现隐藏的bug ,函数注解的信息,保存在__annotations__属性中
语法例子如下:
def fun(a: int, b: int)->int:
return a+b
其中:a和b后面跟着:加一个类型。函数参数后面,冒号前面用->指出返回类型
例如
def add(x: int, y: int)->int:
return x+y
print(add(2, 1))
print(add('hello', 'world'))
print(add.__annotations__)
'''
结果为:
helloworld
3
{'x': , 'y': , 'return': }
'''
可见,程序并不会警告也不会报错,但程序的可读性和可维护性会提高
可以用inspect模块来进行类型检查,详情见:https://www.cnblogs.com/s-p-l/p/10246149.html
2.调用函数
调用函数和c语言一样,格式为函数名(实际参数)
在我们调用的时候,为了防止参数顺序出错等问题,可以使用关键字参数,就是在实际参数前加上形式参数的名字,这样就算交换顺序也无所谓了,注意:关键字参数必须在非关键字参数的左边,比如
def add(a,b):
print(a,b)
add(b=1,a=3)
结果为
3 1
3.函数文档
函数文档是函数的一个特殊属性,它在函数体的开头,是一个字符串
在函数执行时不会执行,用于说明函数的功能
查看函数文档可以使用help或者直接输出_ _ doc _ _(为避免markdown语法,中间加了空格),例如
def add(a,b):
'我就是函数文档,add函数可以返回两个数相加的结果'
c = a+b
return c
print(add.__doc__+"print")
help(add)
结果为
我就是函数文档,add函数可以返回两个数相加的结果print
Help on function add in module __main__:
add(a, b)
我就是函数文档,add函数可以返回两个数相加的结果
从结果可以看出,help其实就是美化后的函数文档
4.函数的返回值
在Python中,函数可以返回多个返回值,只需要在return中写多个值,中间用逗号隔开即可,相当于组成了一个元组,然后返回这个元组。
函数可以没有return,但这不意味着这个函数没有返回值,它会返回一个Nonetype类型的None
5.内嵌函数
python中允许在函数内定义函数,但在函数内定义的内嵌函数只能在该函数中调用,例如
def fun():
x = 50
def fun2():
print('a:',x)
fun2()
return x
x = 100
fun()
print('b:',x)
结果为
a: 50
b: 100
原文链接:https://blog.csdn.net/qq_43713303/article/details/106765533