跳到主要内容

函数

函数是可复用的代码块:有名字、可接收参数、可返回值。把一段逻辑起名后,调用处只需传参,不必反复粘贴。

把函数放进文件、再组成目录,见下一篇「模块与包」。

定义函数​

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

要点​

  1. 函数 = 有名字的可复用代码块,可传参、可返回值
  2. 函数是一等对象,可赋值、可传参
  3. 默认参数不要用可变对象(如 [] / {})
  4. 更多组织方式见「模块与包」