1
+ # 位置参数
2
+ def power (num ):
3
+ result = num * num
4
+ return result
5
+ print (power (6 ))
6
+
7
+ # @计算任意n次方,使用默认参数n=2
8
+ def power1 (num , n = 2 ):
9
+ result = 1
10
+ while n > 0 :
11
+ result *= num
12
+ n = n - 1
13
+ return result
14
+ print (power1 (6 , 3 ))
15
+ print (power1 (6 ))
16
+
17
+ # @一个注册的函数
18
+ def enroll (name , gender , age = 7 , city = 'Hangzhou' ):
19
+ print ('name:' , name )
20
+ print ('gender:' , gender )
21
+ print ('age:' , age )
22
+ print ('city:' , city )
23
+
24
+ enroll ('dream' , 'male' )
25
+
26
+ # 默认的参数可以不按照顺序来进行传参
27
+ enroll ('dream' , 'male' , city = 'Wuhan' )
28
+
29
+ # 参数为list
30
+ def add_end (L = []):
31
+ L .append ('something' )
32
+ print (L )
33
+ return L
34
+
35
+ add_end ([1 , 2 , 3 ])
36
+ add_end ([1 , 2 , 3 ])
37
+ # 使用默认参数
38
+ add_end ()
39
+ add_end ()
40
+
41
+ ### 默认参数必须指向不变对象!
42
+ def advanced_add_end (L = None ):
43
+ if L is None :
44
+ L = []
45
+ L .append ('something' )
46
+ print (L )
47
+ return L
48
+
49
+ advanced_add_end ()
50
+ advanced_add_end ()
51
+
52
+ ### 可变参数部分
53
+ def many_arguments (nums ):
54
+ sum = 0
55
+ for num in nums :
56
+ sum += num
57
+ print (sum )
58
+ return sum
59
+
60
+ many_arguments ([1 , 2 , 3 , 4 , 5 ])
61
+
62
+ ### @使用*
63
+ def advanced_many_args (* nums ):
64
+ print (nums ) # 内部接受的参数是一个tuple
65
+ sum = 0
66
+ for num in nums :
67
+ sum += num
68
+ print (sum )
69
+ return sum
70
+
71
+ arr1 = [2 , 4 , 5 , 6 ]
72
+ advanced_many_args (1 , 2 , 3 , 4 )
73
+ # 可以在数组的前面加上一个星号
74
+ advanced_many_args (* arr1 )
75
+ print (* arr1 ) #展开参数列表
76
+
77
+ # 关键字参数
78
+ def kw_func (name , age , ** kw ):
79
+ print ('name:' , name )
80
+ print ('age:' , age )
81
+ print ('kw:' , kw )
82
+
83
+ kw_func ('dream' , 19 , gender = 'male' , score = 100 )
84
+
85
+ # 字典参数的分解
86
+ extra = {"voltage" : "four million" , "state" : "bleedin' demised" , "action" : "VOOM" }
87
+ print (extra )
88
+ kw_func ('happy' , 20 , ** extra ) # 在这里把extra转换为键值对形式的参数
89
+
90
+ # 命名关键字参数
91
+ ### 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
92
+ def person (name , age , * , city , job ):
93
+ print (name , age , city , job )
94
+
95
+
96
+ person ('a' , 10 , city = 2 , job = 3 ) # 命名关键字参数需要指定名字
97
+ # person('a', 10, city=2, job=3, demo=5) 命名关键字参数只可以传递命名的参数
98
+
99
+ def advanced_person (name , age , * nums , city = 'Hangzhou' , job ):
100
+ print (name , age , nums , city , job )
101
+
102
+ advanced_person ('dream' , 20 , 1 , 2 , 3 , city = 'Hangzhou' , job = 'coder' )
103
+ advanced_person ('dream' , 20 , 1 , 2 , 3 , job = 'coder' ) # 命名关键字参数也可以使用默认参数
104
+
105
+ ###### 最终版本的一个函数参数
106
+ # @1 必选参数
107
+ # @2 默认参数
108
+ # @3 可变参数
109
+ # @4 命名关键字参数
110
+ # @5 关键字参数
111
+
112
+ def final_func (name , age = 20 , * nums , city , job , ** extra ):
113
+ print (name , age , nums , city , job , extra )
114
+
115
+ final_func ('dream' , 23 , 3 , 4 , city = 'Hangzhou' , job = 'codeer' , color = 'red' )
116
+ final_func ('dream' , 2 , 3 , 4 , city = 'Hangzhou' , job = 'codeer' , color = 'red' )
117
+
118
+ ###### 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
119
+
120
+ ###### 对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
0 commit comments