Python.函数的位置传参、关键词传参及其可变性和解包操作
一、位置传参
a.最常见的传参方式,参数按定义的顺序依次传入函数。
⚠️ 注意:参数顺序不能颠倒,否则语义会出错。
1.1 常见位置传参
示例1:
#位置传参
def greet(name, age):
print(f"Hi, I'm {name} and I'm {age} years old.")
greet("Alice", 30) # 按顺序传递参数
greet(30,"Alice")
运行结果1:

1.2 可变 位置参数
a. 使用 *args 可让函数接受任意数量的位置参数。*args 会将多余的位置参数收集成一个元组。
示例2:
def sum(n,*args):
print('第一个参数:',n)
total = n
print('除参数之外的所有参数:',args)
for i in args:
total += i
return total
print(sum(1,2,3))
print(sum(1,2,3,4))
print(sum(1,2,3,4,5))
运行结果2:

二、关键词传参
a.通过指定参数的名称来传值,无顺序限制,代码可读性较高。
b. 优点:
-
提高代码可读性
-
可以与位置参数混合使用(位置参数必须在前!)
2.1 常见关键字传参
示例1:
#关键字传参
def greet(name, age):
print(f"Hi, I'm {name} and I'm {age} years old.")
greet(age=30, name="Alice") # 按参数名传递参数
运行结果1:

2.2 可变 关键字参数
a. 使用 **kwargs 可以让函数接受任意数量的关键词参数。**kwargs 会将多余的关键词参数收集成一个字典。
示例2:
def showme(name,sex,**kwargs):
descript = f'我是{name},是一位{sex}'
print('参数之外的参数:',kwargs)
# 定义一个字典 key2title,用来将英文的字段名映射为中文标题
key2title = {'address':'地址', 'school':'学校', 'tel':'电话'}
#key,value解构赋值
#这段代码会遍历 kwargs 中的所有键值对。
#每次循环时:
#key 是字段名( 'address', 'school', 'tel')
#value 是对应的值('上海', 'xxxx', '12345678901')
for key,value in kwargs.items():
descript += f',{key2title.get(key, '')}:{value}'
return descript
#关键字传参
print(showme('xx','先生',address='上海',school='xxxx',tel='12345678901'))
运行结果2:

三、可变和不可变参数
3.1 不可变类型
不可变类型包括:int、float、str、tuple、frozenset 等。
传递方式是值传递: 传递给函数的是该对象的值,函数内部修改该值不会影响外部变量的值。
示例:
def modify(x):
print('修改之前:', x, id(x))
x = 10 # 修改了 x 的值,但不会影响外部变量
print('修改之后:',x, id(x))
a = 5
modify(a)
print('原始数据:',a, id(a))
运行结果:

3.2 可变类型
可变类型包括:list、dict、set 等。这些类型的对象可以在原地修改。
传递方式是引用传递 :传递给函数的是对象的引用(即内存地址),在函数内部修改该参数的内容会直接影响外部变量。
示例:
def modify(lst):
print('修改之前:', lst, id(lst))
lst.append(4) # 修改了 lst 对象的内容
print('修改之后:',lst, id(lst))
a = [1, 2, 3]
modify(a)
print('外部原始数据:',a, id(a))
运行结果:

四、解包操作
a.Python 允许在调用函数时解包序列或字典,使其作为位置参数或关键词参数传递给函数。
4.1 解包位置参数
a.使用 * 解包(主要用于解包元组或列表)
示例:
def sum(n,*args):
print('第一个参数:',n)
total = n
print('除参数之外的所有参数:',args)
for i in args:
total += i
return total
nums = [1,2,3,4,5]
print(sum(*nums))
运行结果:

4.2 解包关键词参数
a.使用 * * 解包(主要用于解包字典)
示例:
#关键字解包
def showme(name,sex,**kwargs):
descript = f'我是{name},是一位{sex}'
print('参数之外的参数:',kwargs)
#key,vlaue解构赋值
key2title = {'address':'地址', 'school':'学校', 'tel':'电话'}
for key,value in kwargs.items():
descript += f',{key2title.get(key, '')}:{value}'
return descript
stu = {
"name": "小王",
"sex": "先生",
"address": "北京",
"school": "xxxx大学",
"tel": "123456789"
}
print(showme(**stu))
运行结果:

五、总结
在本篇文章中,我们全面梳理了 Python 函数中参数的各种用法,包括:
-
位置传参:按顺序将实参传入函数,是最基础也最常见的方式;
-
可变位置参数(
*args):可接收任意数量的位置参数,形成一个元组; -
关键字传参:通过指定参数名赋值,提高代码的可读性和灵活性;
-
可变关键字参数(
**kwargs):接收任意数量的关键字参数,并将其封装为字典; -
参数可变性:理解可变类型与不可变类型的传参差异,有助于避免函数副作用;
-
参数解包:使用
*和**进行序列或字典的拆包传参,提升函数调用的灵活性。
掌握这些内容,可以让你在日常编程中更高效地定义和调用函数,写出更灵活、更可维护的 Python 代码。
建议多加练习和调试,观察函数中参数的传递方式对外部变量的影响,才能真正吃透这些知识点!
更多推荐



所有评论(0)