参数
位置参数
默认参数
默认值只会执行一次
官方推荐:默认参数尽量使用不可变类型
函数在被定义的时候,默认参数b的值会被计算出来,即[],因为默认参数b也是变量,指向对象[],每次调用
默认参数后面必须也是默认参数
关键字参数
函数调用时,指定参数的名称,即为关键字参数
关键字参数必须放在普通参数的后面
命名关键字参数
限定后边的参数必须是以关键字形式传参
def abc(a,b,*,c,d)
*后面的参数必须为关键字形参
可变参数
常见的*args,args变量指向一个元组对象
自动接受所有的未匹配的位置参数,到一个元组tuple对象里
**参数:所有未匹配的未知参数存储到一个字典里面去
**kwargs
解包,拆包
参数类型时字符串列表、元组、集合、字典的时候,可以解包
def abc(a,b,c):
print(a)
print(b)
print©
abc(*“123”)
abc(*[4,5,6])
要和定义的时候是一样的
d = {
“a” :“zs”,
“b” :18,
“c”:“python”,
}
abc(**d)
输出zs,18,python
函数调用函数
def fun_01():
print(“11111111”)
def fun_02():
print(“22222222”)
fun_01()
fun_02()
如果一个函数内部调用自己本身,那么这个函数就是递归函数
递归是有限制的,超过一千次就会报错
查递归限制 winR中输入python导入模块sys然后输入sys.getrecursionlimit()
求阶乘的函数可以用递归
def fact(n):
if n==1:
return 1
else:
return fact(n-1)*n
a = fact(3)
print(a)
斐波拉契数列
def Fibonacci(n):
if n == 1 or n == 2:
return 1
else:
return Fibonacci(n - 1) + Fibonacci(n - 2)
print(Fibonacci(6))
汉诺塔
def hanno(n, A, B, C):
if n > 0:
hanno(n - 1, A, C, B)
print(f"盘子{n}从{A}-》{C}")
hanno(n - 1, B, A, C)
hanno(3, ‘A’, ‘B’, ‘C’)