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函数参数类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python中sqllite插入numpy数组到数据库的实现方法
本文给大家介绍python中sqllite插入numpy数组到数据库的实现方法,在文章底部给大家提到了Python 操作sqlite数据库及保存查询numpy类型数据的实例代码,需要的朋友参考下吧2021-06-06
Python3下错误AttributeError: ‘dict’ object has no attribute’ite
这篇文章主要跟大家介绍了关于在Python3下错误AttributeError: 'dict' object has no attribute 'iteritems'的分析与解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。2017-07-07
PyCharm MySQL可视化Database配置过程图解
这篇文章主要介绍了PyCharm MySQL可视化Database配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-06-06
django 使用 request 获取浏览器发送的参数示例代码
这篇文章主要介绍了django 使用 request 获取浏览器发送的参数示例代码,获取数据有四种方式,具体内容详情大家跟随脚本之家小编一起看看吧2018-06-06
python处理multipart/form-data的请求方法
今天小编就为大家分享一篇python处理multipart/form-data的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-12-12


最新评论