python函数
函数的定义
使用def语句,在依次写出函数名、括号、括号中的参数、冒号、函数体。如果函数需要返回值使用return语句返回。
def my_abs(x): if x >=0: return x else: return -x print(my_abs(-2))#调用这个函数,-2为传递的参数
函数体内部执行时,遇到return 函数就执行完毕,并将结果返回。如果没有return语句,函数执行完毕也返回结果,只是这个结果是None。
def fun1(x,y): if x > 0 and y > 0: return x + y; print(x) print(y) print(fun1(1,5))
只显示了return 的结果。x,y的值并没有打印。说明执行完return之后,就不再执行后面的代码了。
def fun1(x,y): if x > 0 and y > 0: x + y; print(fun1(1,5))
没有return 也会返回一个none.
多个返回值
Python 可以返回多个值,多种类型的值。
def test(): print('in the test') return 1,'hello',['hello','world'],{'name':'xiaoming'},(1,2,3) print(test())#(1, 'hello', ['hello', 'world'], {'name': 'xiaoming'}, (1, 2, 3))
其实返回的是一个元组 ,元组中的每一项和定义的位置一致。如果返回的值只有一个,括号省略了。
函数的参数
如果定义了一个函数并设置了两个参数,调用的时候就要传值给函数,没传会报一个错误。
def test(x,y): print(x) print(y) print(test())
当然也可以给这两个参数设置一个默认值。这个时候可以不用传参数。
def test(x=1,y=2): print(x) print(y) print(test())
如果传递的参数大于设置的参数,那么也会报错。因为他们的位置是一一对应的。所以个数也必须一致。
def test(x=1,y=2): print(x) print(y) print(test(3,5,7))
传递参数的时候也可以指定参数的值。这种叫关键字参数。
def test(x=1,y=2): print(x) print(y) x = 2 y = 4 print(test(y=y,x=x))
关键字参数和位置参数的混用
def test(x,y,z): print(x) print(y) print(z) print(test(3,z=2,y=5))
关键字参数不能写在位置参数前面,因为有位置参数会按照位置参数的方式去匹配形参。
参数组
如果要传递的参数不固定,可以用变量组的方式。
定义一个变量组,形参的变量名格式为*变量名。会把多个实参放到一个元组里面。
def test(*args): print(args) test(1,2,3,4,5,6)#(1, 2, 3, 4, 5, 6)
也可以传一个列表过去。一样会把这个列表转成元组。
test(*[1,2,3,4])#(1, 2, 3, 4)
如果已知一个参数,其它参数不固定,可以把不确定的参数做为一个参数组。
def test1(x,*args): print(x) print(args) test1(1,2,3,4,5)
以上只能接收位置参数或者列表,不能接收关键字参数。
传递字典
把N个关键字参数,转换成字典的方式
def test(**kwargs): print(kwargs) test(name='alex',age=28)#{'name': 'alex', 'age': 28}
如果要传字典 形参的定义必须是**,形参名一般都是kwargs。
也可以直接传一个字典过去。字典之前要加**。
test(**{'name':'alex','age':28})#{'name': 'alex', 'age': 28}
取值用[key]:
def test(**kwargs): print(kwargs) print(kwargs['name']) print(kwargs['age']) test(**{'name':'alex','age':28})
几种参数组合使用
def test(name,age=18,*args,**kwargs): print(name) print(age) print(args) print(kwargs) test('xiaoming',age=34,sex='m',hobby='xuexi')
参数传递过程如下:
1、首先name 传了一个位置参数。
2、age 传了一个关键字参数,因为age有默认值就算不传也可以的。
3、sex、hobby 这两个参数为关键字参数,而*arge并不能接收关键字参数,所以这些参数传给了**kwargs。