Python函数参数类型及传参方式详解
作者:思则变
Python函数参数主要分为位置参数、关键字参数、默认参数、可变参数和仅关键字参数,参数传递方式包括位置传递、关键字传递和默认传递,理解参数传递机制对于编写正确的函数至关重要,本文介绍Python函数参数类型及传参方式,感兴趣的朋友一起看看吧
Python函数参数类型
Python函数参数主要分为以下几种类型:
位置参数(Positional Arguments)
- 最常见的参数类型
- 调用时必须按定义顺序传递
- 数量和顺序必须匹配函数定义
def foo(name,age):
"""
位置参数,按位置对应来传递参数
"""
print(f"第一个参数:{name},第二个参数{age}")
# test code
foo("Alice", 18)
foo(18, "Alice")第一个参数:Alice,第二个参数18 第一个参数:18,第二个参数Alice
当传入的两个参数位置调换之后,输出结果也会调换。所以位置参数必须严格按照对应位置来传递。
关键字参数(Keyword Arguments)
- 调用时通过参数名指定值
- 可以不按定义顺序传递
- 提高代码可读性
def foo(name, age):
"""
关键字参数,根据指定的关键字传递参数,与参数的位置不相关
:return:
"""
print(f"第一个参数:{name},第二个参数{age}")
# test code
foo(name="Alice", age=18)
foo(age=18, name="Alice")第一个参数:Alice,第二个参数18 第一个参数:Alice,第二个参数18
可以看到两种不同位置的传参,输出都是同一个结果。
默认参数(Default Arguments)
- 在函数定义时指定默认值
- 调用时可省略使用默认值的参数
- 必须位于非默认参数之后
def foo(name="Dog", age=12):
"""
关键字参数,根据指定的关键字传递参数,与参数的位置不相关
:return:
"""
print(f"第一个参数:{name},第二个参数{age}")
# test code
foo()
foo(name="Alice", age=18)第一个参数:Dog,第二个参数12 第一个参数:Alice,第二个参数18
可变参数(Variable-length Arguments)
- *args:接收任意数量的位置参数,接收后会被放进一个元组内,也称为非关键字参数元组
- **kwargs:接收任意数量的关键字参数,接收后会放进一个字典内,也称为关键字参数字典,参数名为key,参数值为value。
def foo(*args, **kwargs):
for arg in args:
print(f"其他非关键参数有:{arg}")
for kwarg in kwargs.keys():
print(f"其他关键子参数有:{kwargs[kwarg]}")多种参数(包括位置参数,默认参数,关键字参数,可变参数)
多种参数一起传递,对传递顺序是有要求的,一般是位置参数、关键字参数、默认参数、可变参数。总体来说可变参数都是放在所有参数后面的。
def foo(arg1, arg2, arg3="some", *args, **kwargs):
print(f"位置参数arg1 is {arg1}\n位置参数arg2 is {arg2}")
print(f"默认参数arg3 is {arg3}")
for arg in args:
print(f"其他非关键参数有:{arg}")
for kwarg in kwargs.keys():
print(f"其他关键子参数有:{kwargs[kwarg]}")
# test code
# foo("Alice", 18)
# foo("Alice", 18, "Bob", "Elson", 19)
# foo("Alice", 18, "Bob", "Elson", 19, a="123", b=789)
foo("Alice", 18, "Elson",19, a="123", b=789,)位置参数arg1 is Alice 位置参数arg2 is 18 默认参数arg3 is Elson 其他非关键参数有:19 其他关键子参数有:123 其他关键子参数有:789
仅关键字参数(Keyword-only Arguments)
- 放在*后的参数必须使用关键字传递
def concat(*args, sep=" "):
return sep.join(args)
print(concat("a", "b", "c", sep="-")) # 必须使用关键字传递sepPython参数传递方法
Python中的参数传递本质上是对象引用的传递。对于可变和不可变对象有不同的表现:
不可变对象传递
- 数字、字符串、元组等不可变类型
- 函数内修改会创建新对象,不影响原始变量
def modify_num(x):
x = x + 1
print("Inside:", x)
num = 10
modify_num(num) # Inside: 11
print("Outside:", num) # Outside: 10可变对象传递
- 列表、字典等可变类型
- 函数内修改会影响原始对象
def modify_list(lst):
lst.append(4)
print("Inside:", lst)
my_list = [1, 2, 3]
modify_list(my_list) # Inside: [1, 2, 3, 4]
print("Outside:", my_list) # Outside: [1, 2, 3, 4]理解Python的参数传递机制对于编写正确的函数至关重要。根据需求选择合适的参数类型和传递方式,可以使代码更清晰、更安全。
到此这篇关于Python函数参数类型以及传参方式的文章就介绍到这了,更多相关python函数参数类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
