Python 函数参数详解
学习函数参数类型 · 难度:进阶 · +15XP
Python 函数参数详解
Python 函数参数详解 — 灵活传递数据
学习前的准备
打开终端,输入 python 进入交互式解释器。本教程面向已经掌握基本函数定义的初学者。
位置参数
位置参数是最常见的参数类型。调用函数时,参数按照定义时的顺序一一对应。
def greet(first_name, last_name):
print(f"你好,{last_name} {first_name}!")
greet("三", "张") # 你好,张 三!
默认参数
给参数设置默认值后,调用时可以不传该参数。默认参数必须放在所有非默认参数的后面。
def create_user(name, role="普通用户", active=True):
print(f"用户:{name},角色:{role},{'激活' if active else '未激活'}")
create_user("张三") # 使用所有默认值
create_user("李四", "管理员") # 覆盖默认角色
create_user("王五", active=False) # 关键字方式覆盖
# 警告:默认值不要用可变对象
def add_item(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
关键字参数
调用函数时,可以使用 参数名=值 的形式传递参数。顺序不重要,代码可读性更高。
def book_info(title, author, year=2020):
print(f"《{title}》作者:{author},{year}年出版")
book_info(author="路遥", title="平凡的世界", year=1986)
参数传递的本质
对于不可变对象(数字、字符串、元组),函数内的修改不影响外部。对于可变对象(列表、字典),函数内的修改会影响外部。
# 不可变对象:不影响外部
def change_num(n):
n = 100
x = 10
change_num(x)
print(x) # 10(未改变)
# 可变对象:会影响外部
def append_item(lst):
lst.append(4)
my_list = [1, 2, 3]
append_item(my_list)
print(my_list) # [1, 2, 3, 4](被改变了!)
小结
掌握函数参数是写出好用函数的关键。位置参数按顺序传,默认参数可省略,关键字参数打乱顺序。记住:可变对象作为参数时,函数内的修改会“泄露”到外部。