函数
函数是可复用的代码块:有名字、可接收参数、可返回值。把一段逻辑起名后,调用处只需传参,不必反复粘贴。
把函数放进文件、再组成目录,见下一篇「模块与包」。
定义函数
def add(a, b):
return a + b
print(add(1, 2)) # 3
无 return 时默认返回 None。
参数
def greet(name, greeting="hello"):
return f"{greeting}, {name}"
def sum_all(*args):
return sum(args)
def show(**kwargs):
return kwargs
- 位置参数、默认参数
*args收多余位置参数(元组)**kwargs收多余关键字参数(字典)
一等对象
函数可以赋值、当作参数传入(装饰器留到进阶):
ops = {"add": add}
print(ops["add"](1, 2)) # 3
def apply(fn, x, y):
return fn(x, y)
print(apply(add, 3, 4)) # 7
默认参数陷阱
默认值只在定义时求值一次。不要用可变对象(如 [] / {})作默认参数:
# 反例:多次调用会共享同一个 list
def append_bad(item, bucket=[]):
bucket.append(item)
return bucket
# 正例:用 None 作哨兵,函数内再新建
def append_ok(item, bucket=None):
if bucket is None:
bucket = []
bucket.append(item)
return bucket
要点
- 函数 = 有名字的可复用代码块,可传参、可返回值
- 函数是一等对象,可赋值、可传参
- 默认参数不要用可变对象(如
[]/{}) - 更多组织方式见「模块与包」