基础语法
def greet(name):
print(f"Hello, {name}")
# 调用函数
greet("Alice")
# 返回值
def add(a, b):
return a + b
# 文档字符串
def square(n):
"""返回 n 的平方"""
return n * n
help(square) # 查看文档
参数类型
def greet(name):
print("Htllo", name)
def greet(name="World"):
print("Hello", name)
def sum_all(*args):
return sum(args)
sum_all(1, 2, 3) # -> 6
def print_info(**kwargs):
for k, v in kwargs.items():
print(f"{k}: {v}")
def func(a, b=2, *args, d, **kwargs):
pass
高阶函数
def apply(func, x):
return func(x)
apply(abs, -10) # -> 10
def outer():
def inner():
print("hello")
return inner
f = outer()
f() # -> hello
匿名函数(lambda)
square = lambda x: x * x
print(square(5)) # -> 25
# 用在 map/filter/sorted 中
sorted(data, key=lambda x: x["age"])
装饰器
def log(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__}")
return func(*args, **kwargs)
return wrapper
@log
def say_hello():
print("Hello")
say_hello()
def log(level):
def decorator(func):
def wrapper(*args, **kwargs):
print(f"[{level}] {func.__name__}")
return func(*args, **kwargs)
return wrapper
return decorator
@log("INFO")
def do_something():
pass
变量作用域(LEGB)
Python 的作用域遵循 LEGB 规则:
B(Built-in): Python 内建作用域
x = "global"
def outer():
x = "enclosing"
def inner():
x = "local"
print(x)
inner()
outer() # -> local
闭包(Closure)
内部函数引用了外部函数的变量,并返回该函数,外部变量就会被“闭包”住。
def make_adder(n):
def adder(x):
return x + n
return adder
add5 = make_adder(5)
print(add5(10)) # -> 15
函数注解(类型提示)
def add(a: int, b: int) -> int:
return a + b