下载工作台
Python 编程实战

函数、参数与作用域

试读上半部分 · 解锁后可读全文

第 5 章 · 函数

本章目标:掌握函数定义、调用、返回值;理解参数(位置、关键字、默认值、argskwargs);了解作用域LEGB 规则;会写文档字符串与类型注解;能将 shop-demo* 业务拆分为可复用函数模块。

学时建议:4~5 小时(含 1.5 小时跟练)

前置ch02~ch04


5.1 定义与调用

def greet(name: str) -> str:
    """向用户问好(教学示例)。"""
    return f"你好,{name}!"


msg = greet("user-demo")
print(msg)
要素说明
def定义函数
参数列表可有零个或多个
return返回结果;省略则返回 None
文档字符串紧接函数体首行的 """..."""
def add(a, b):
    return a + b

def log_only(text):
    print(text)          # 隐式 return None

5.2 参数种类

def order_item(title, qty=1, *, gift=False):
    """
    title: 书名(位置/关键字均可)
    qty: 数量,默认 1
    gift: 仅关键字参数(* 之后)
    """
    flag = "(赠品)" if gift else ""
    return f"{title} x{qty}{flag}"


order_item("Python 基础")
order_item("Web 开发", qty=2)
order_item("算法", gift=True)
参数类型示例
位置参数f(1, 2)
关键字参数f(b=2, a=1)
默认值def f(x=10)
仅关键字def f(*, key)

可变参数

def total(*prices):
    return sum(prices)

print(total(10, 20, 5.5))   # 35.5


def build_user(**fields):
    return fields

print(build_user(name="user-demo", level=1))
# {'name': 'user-demo', 'level': 1}
符号含义
*args多余位置参数 → 元组
**kwargs多余关键字参数 → 字典
def mix(a, b, *args, **kwargs):
    print(a, b, args, kwargs)

5.3 默认参数陷阱

# 正确写法
def add_to_cart(item, cart=None):
    if cart is None:
        cart = []
    cart.append(item)
    return cart

切勿用可变对象(listdict)作默认值,否则多次调用共享同一对象。


5.4 作用域 LEGB

查找顺序:Local → Enclosing → Global → Built-in。

tax_rate = 0.06          # 全局

def calc_tax(amount):
    tax_rate = 0.05      # 局部,遮蔽全局
    return amount * tax_rate

def set_rate():
    global tax_rate
    tax_rate = 0.08
关键字作用
global在函数内修改全局变量
nonlocal修改外层(非全局)闭包变量
def make_counter():
    count = 0
    def inc():
        nonlocal count
        count += 1
        return count
    return inc

5.5 lambda 与内置函数

prices = [59.9, 19.5, 88.0]
sorted_prices = sorted(prices, key=lambda p: -p)

nums = [1, -2, 3, -4]
positives = list(filter(lambda x: x > 0, nums))
doubled = list(map(lambda x: x * 2, nums))
函数用途
sorted(iter, key=)排序
map(fn, iter)映射
filter(fn, iter)过滤
zip / enumerate组合遍历

复杂逻辑优先 deflambda 适合一行简单表达式。


以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。