Python-函数的参数
形参and实参
1 def calc(a, b): 2 c = a + b 3 return c 4 5 '''位置实参''' 6 result = calc(10, 20) 7 print(result) 8 9 '''关键字实参''' 10 res = calc(b=10, a=20) #'='左侧的变量名称称为关键字参数 11 print(res)
函数参数传递的内存分析
在函数调用过程中,进行参数的传递:
对于不可变对象,形参的修改不会影响实参的值
对于可变对象,形参的修改会影响实参的值
1 def fun(arg1, arg2): 2 print('arg1=', arg1) 3 print('arg2=', arg2) 4 arg1 = 100 5 arg2.append(10) 6 print('arg1=', arg1) 7 print('arg2=', arg2) 8 9 n1 = 11 10 n2 = [22, 33, 44] 11 print('n1=', n1) 12 print('n2=', n2) 13 fun(n1, n2) 14 print('n1=', n1) 15 print('n2=', n2) 16 17 '''在函数调用过程中,进行参数的传递 18 对于不可变对象,形参的修改不会影响实参的值 19 对于可变对象,形参的修改会影响实参的值'''
默认值参数
1 def fun(a, b=10): # b称为默认值参数 2 print(a, b) 3 4 fun(100) 5 fun(20, 30) 6 # fun() TypeError: fun() missing 1 required positional argument: 'a' 7 8 print('hello', end='\t') 9 print('world')
个数可变的位置形参and个数可变的关键字形参(需要多多练习)
同一函数中:个数可变的位置形参 与 个数可变的关键字形参各自唯一
个数可变的位置形参在前,个数可变的关键字形参在后
1 # 函数定义时的 个数可变的位置参数 2 def fun(*args): 3 print(args) 4 fun(10) # 结果为元组 5 fun(10, 20) 6 fun(11, 22, 33) 7 8 # 函数定义时的 个数可变的关键字参数 9 def fun1(**args): 10 print(args) 11 fun1(a=10) #结果为字典 12 fun1(a=10, b=10) 13 fun1(a=11, b=22, c=33) 14 15 print('hello', 'world', 'Python') 16 17 ''' 18 def fun2(*args, *a): 19 pass 20 以上代码,程序报错,个数可变的位置参数,只能是一个 21 def fun3(**args, **a): 22 pass 23 以上代码,程序报错,个数可变的关键字参数,只能是一个 24 ''' 25 26 def fun2(*args1, **args2): 27 print(args1) 28 print(args2) 29 fun2(1, 2, 3, a=4, b=5) 30 # fun2(a=1, b=2, 3, 4, 5) SyntaxError: positional argument follows keyword argument 31 ''' 32 def fun3(**args1, *args2): 33 pass 34 以上代码,程序报错, 35 既有个数可变的位置形参,又有个数可变的关键字形参时 36 要求位置形参在前 37 '''