Python 函数
函数是一段可以重复调用的代码块。把常用逻辑封装成函数,既能减少重复,又让程序结构更清晰。
定义函数
用 def 关键字,后面是函数名、参数列表和冒号。缩进的部分是函数体:
def calculate_1(central, a):
s = central + a
print(f"{s}")
return s
s = calculate_1(1, 2)
print(s)
运行结果:
3
3
def calculate_1(central, a):定义函数并声明两个参数。- 函数体里先算出
s = central + a。 return s把结果返回给调用者;如果不写return,函数默认返回None。
参数
调用函数时,按位置把值传给参数:
def greet(name, age):
print(f"{name} 今年 {age} 岁")
greet("Koyuki", 18)
默认参数
给参数一个默认值,调用时可以不传:
def greet(name, greeting="你好"):
print(f"{greeting},{name}")
greet("Koyuki") # 你好,Koyuki
greet("Koyuki", "早上好") # 早上好,Koyuki
注意
默认参数要放在普通参数之后。
关键字参数
调用时可以用 参数名=值 的形式,顺序就无所谓了:
greet(age=18, name="Koyuki")
可变参数 *args 与 **kwargs
*args接收任意个位置参数,组织成元组。**kwargs接收任意个关键字参数,组织成字典。
def show(*args, **kwargs):
print("位置参数:", args)
print("关键字参数:", kwargs)
show(1, 2, 3, name="Koyuki", age=18)
运行结果:
位置参数: (1, 2, 3)
关键字参数: {'name': 'Koyuki', 'age': 18}
返回值
return 可以返回单个值,也可以返回多个值(其实是打包成一个元组):
def divide(a, b):
return a // b, a % b
quotient, remainder = divide(7, 3)
print(quotient, remainder) # 2 1
作用域:局部与全局
函数内部定义的变量是局部变量,只在函数内有效;函数外定义的是全局变量。如果想在函数内修改全局变量,需要 global 声明:
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1
空函数与 pass
用 pass 占位,表示"暂时什么都不做",保证语法完整:
def todo():
pass # 待实现
文档字符串
函数开头的三引号字符串会自动成为它的说明文档:
def add(a, b):
"""返回 a 与 b 的和。"""
return a + b
print(add.__doc__) # 返回 a 与 b 的和。
lambda 匿名函数
lambda 用来写一行就能搞定的简单函数,不需要 def 和函数名,常用于 sorted()、map()、filter() 等需要传入短函数的场景:
# 普通写法
def square(x):
return x * x
# lambda 写法
square = lambda x: x * x
print(square(5)) # 25
更常见的用法是直接作为参数传入:
pairs = [(1, "one"), (3, "three"), (2, "two")]
pairs.sort(key=lambda x: x[0]) # 按每个元组的第一个元素排序
print(pairs) # [(1, 'one'), (2, 'two'), (3, 'three')]
提示
lambda 适合极短的逻辑(一行内写完)。如果逻辑复杂,还是老老实实用 def,代码更容易读懂。
完整示例
def calculate(central, a):
s = central + a
return s
result = calculate(1, 2)
print("计算结果:", result)
# 带默认参数与多返回值
def stats(numbers, label="数据"):
return label, sum(numbers), max(numbers)
name, total, peak = stats([3, 1, 4, 1, 5], "成绩")
print(f"{name}:总和 {total},最高 {peak}")运行结果:
计算结果: 3
成绩:总和 14,最高 5