Skip to content

Commit 54efcca

Browse files
学习函数的参数
1 parent d862751 commit 54efcca

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

day-06/func-arguments.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
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

Comments
 (0)