抽象成函数
def fact(n):
res=1
for i in range(1,n+1):
res+=i;
return res
print(fact(10))
56
关键字参数–用于参数比较多的情况下
def fuct(x,y,z):
print(x,y,z)
fuct(y=1,x=6,z=9)
6 1 9
关键字参数可以与位置参数混搭使用,但关键字参数必须在前面
默认参数必须放在非默认参数的后面
默认参数一定要是不可变的类型(数字,字符串,元组)
可变长参数 *args
不知道会传过来多少参数 *args
该形参必须放在参数列表的最后
def foo(x,y,z,*args):
print(x,y,z)
print(args)
foo(1,2,3,7,9,10) #多余的参数,打包传递给args
1 2 3
(7, 9, 10)
实参打散:
def foo(x,y,z,*args):
print(x,y,z)
print(args)
foo(1,2,3,[4,5,6])
foo(1,2,3,*[1,2,3]) #打散的是列表,字符串,元组或集合
1 2 3
([4, 5, 6],)
1 2 3
(1, 2, 3)
可变长的参数 **kwargs 与字典有关
同样要放在参数的最后面
def foo(x,y,z,**kwargs):
print(x,y,z)
print(kwargs)
foo(1,2,3,a=5,b=8)
1 2 3
{'a': 5, 'b': 8}
同样可以打散
可接受任意参数:
def foo(*args,**kwargs):
函数体与变量的作用域
在函数体内部定义的变量—局部变量----仅在函数体内部发挥作用
在函数外部定义的变量—全局变量-----函数内外都可以用
通过 global 在函数体内定义全局变量
def mul(x,y):
global z
z=x*y
return z
mul(3,4)
print(z)
12
返回值
单个返回值直接return
多个返回值—以元组的形式
def foo(x):
return 1,x,x**2,x**3
a,b,c,d=foo(3) #解包赋值
print(a)
print(b)
print(c)
print(d)
1
3
9
27
没有return ,返回值为none
匿名函数
lambda 变量 :函数体
常用在列表中,尤其是与 key=搭配
- sort(), sorted()
ls=[(92,22),(89,12),(77,89),(56,87)]
ls.sort()
ls
[(56, 87), (77, 89), (89, 12), (92, 22)]
ls.sort(key=lambda x:x[1])
ls
[(89, 12), (92, 22), (56, 87), (77, 89)]
ls.sort(key=lambda x:x[1]+x[0])
ls
[(89, 12), (92, 22), (56, 87), (77, 89)]