Python 基础 - 第九节
📋 本节要点
| 知识点 | 说明 |
|---|---|
def |
定义函数的关键字 |
| 函数 | 封装一段程序,可重复调用 |
return |
返回函数执行结果 |
pass |
空函数占位符 |
| 位置参数 | 按顺序传递的参数 |
| 默认参数 | 有默认值的参数 |
| 可变参数 | *args 接收任意数量参数 |
| 关键字参数 | **kwargs 接收键值对参数 |
| 命名关键字参数 | * 后的命名参数 |
1. 函数概述
函数是将一段程序封装起来的代码块,可以重复使用,避免重复编写相同逻辑。
def 函数名称(参数):
函数内容
return 返回结果
函数本身不会执行,调用时才会执行。若无 return,函数返回 None。
2. 位置参数与 return
位置参数按顺序传递,依次赋值给形参。形参是定义时的参数,实参是调用时传入的值。
# 定义函数:x 和 n 是形参
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
# 调用函数:5 和 2 是实参,按位置传递
print(power(5, 2)) # 25(5²)
print(power(5, 3)) # 125(5³)
2.1 空函数 pass
如果函数暂时不写内容,用 pass 作为占位符,保证代码结构完整。
def my_function():
pass # 暂时不做任何事,以后补充
3. 默认参数
默认参数在定义时指定默认值,调用时可以不传该参数,适用于经常使用但变化较小的参数。
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power(5, 3)) # 125(传入 n=3)
print(power(5)) # 25(未传入 n,使用默认值 n=2)
重要:默认参数必须在位置参数的最后。
3.1 案例:成绩信息录入
def grade(name, math, english, gender="male"):
info = {"name": name, "math": math, "english": english, "gender": gender}
print(info)
# 按顺序传递
grade("小明", 89, 90, "female")
# 指定参数名传递(不依赖顺序)
grade(math=99, name="justin", english=88)
# 使用默认参数
grade("tom", 80, 89)
4. 可变参数 *args
当参数个数不确定时,用 *参数名 接收任意数量的参数,函数内部作为元组(tuple)处理。
# 不用可变参数:需传入列表
def calc(numbers):
total = 0
for n in numbers:
total = total + n * n
return total
print(calc([1, 2, 3])) # 14
# 用可变参数:直接传多个值,更简洁
def calc(*numbers):
total = 0
for n in numbers:
total = total + n * n
return total
print(calc(1, 2, 3)) # 14(直接传)
print(calc(1, 2, 3, 4)) # 30(参数个数灵活)
# 已有列表时,前面加 * 解包传入
nums = [1, 2, 3]
print(calc(*nums)) # 14
5. 关键字参数 **kwargs
关键字参数允许传入任意多个带参数名的参数,函数内部作为字典(dict)处理。可变参数接收的是 tuple,关键字参数接收的是 dict。
def person(name, age, **kw):
print("name:", name, "age:", age, "other:", kw)
person("Michael", 30) # 不传关键字参数
person("Adam", 45, gender="M", job="Engineer") # 传入任意多个关键字参数
# 已有字典时,前面加 ** 解包传入
extra = {"city": "Beijing", "job": "Engineer"}
person("Jack", 24, **extra)
6. 命名关键字参数
命名关键字参数用于限制只能传入指定的关键字参数,用 * 分隔,* 后面的参数必须指定名称。
# * 后面的 city 和 job 是命名关键字参数
def person(name, age, *, city, job):
print(name, age, city, job)
# 必须指定参数名传入
person("Jack", 24, city="Beijing", job="Engineer")
# person("Jack", 24, "Beijing", "Engineer") # 错误!必须指定参数名
# 命名关键字参数可以设置默认值
def person(name, age, *, city="Beijing", job):
print(name, age, city, job)
person("Tom", 22, job="Teacher") # city 使用默认值
参数组合顺序:必选参数 → 默认参数 → 可变参数
*args→ 命名关键字参数 → 关键字参数**kwargs
下一节预告:模块与导入
评论区
0 条暂时还没有评论,欢迎来抢沙发。