函数
-
函数参数:必备参数(a),默认参数(b=1)、不定长参数(*args, **kwargs)
-
必备参数:必传, 默认参数:可传可不传,传则覆盖
-
*args:元组, **kwargs:字典
-
func(a, *args, **kwargs) --> func(1,2,3,b=1,c=2), 2和3属于args, b=1,c=2属于kwargs
-
函数传入的参数为不可变的,对外部的变量就没影响(按值传,传的是内容)
-
函数传入的参数为可变的,对外部的变量就有影响(按引用传,传的是地址)
-
return 只能在函数中使用,且当return之后这个函数就结束了,如果没有return时,函数默认返回None
- 当要返回多个结果给调用者时,方法为:return 结果1,结果2,...用逗号隔开,返回的是一个元组
>>>a=1 >>> def func(a): ... a+=1 ... return a ... >>> func(a) 2 >>> a 1 #---------------------------------------------------------------------------------------------------- >>> d = {} >>> def func2(d): ... d[1] = 'a' ... return d ... >>> func2(d) {1: 'a'} >>> d {1: 'a'} #global >>> a 1 >>> def func(a): ... global a # 注意当有全局变量的情况下,a是不用传的,直接用就行 ... return a+1 ... File "<stdin>", line 2 SyntaxError: name 'a' is parameter and global >>> def func(): ... global a ... print(a) ... >>> func() 1
# *args 元组,当传入的必备参数多了,那么多余的参数就会被args接收 # **kwargs 字典,当传入的默认参数多了时,那么多余的参数会被kwargs接收 >>> def func(a, *args, **kwargs): ... print(a, args, kwargs) ... >>> func(1,2,3,c=3,d=4) 1 (2, 3) {'c': 3, 'd': 4} #---------------------------------------------------------------------------------------------------- # 判断下面这个字符串里面有多少个数字、字母 a = "I am a 19 years old boy!666!" def func(a): num = 0 str = 0 rest = 0 for i in a: if i.isdigit(): num+=1 print('这是数字') elif i.isalpha(): str +=1 print('这是字母') else: rest += 1 print('这是其他字符') return "数字 {}, 字母{}, 其他{}, 数字字母{}".format(num, str, rest, num+str) print(func(a))
匿名函数
# lambda lambda x:x+1 # 等价于下面这个 def func(x) x = x+1 return x
递归函数和闭包函数
#递归----阶乘 def func(n): if n ==1: return 1 return func(n-1)*n # 返回本身达到循环的效果,注意位置不能func(n-1)和n的位置不能换 print(func(5)) # 闭包---装饰器 def func1(a): def func2(): print('xxxx') return a() return func2