python禁止位置传参函数详解
python禁止位置传参函数
这种函数定义方式使用了 Python 3.x 中的关键字参数(keyword-only arguments)的特性,通过在参数列表中使用 * 符号作为分隔符,来明确指示该函数之后的参数必须使用关键字(即参数名)来传递,而不能通过位置(即按顺序)来传递。
在函数定义中:
def init(
*,
args: List[str] | None = None,
context: Context = None,
domain_id: int | None = None,
signal_handler_options: SignalHandlerOptions | None = None
) -> None所有的参数(args, context, domain_id, signal_handler_options)都是关键字参数,这意味着在调用这个函数时,必须显式地使用参数名来指定每个参数的值,而不能仅仅通过位置来传递它们。
例如:
# 正确的调用方式 init(args=["some", "args"], context=some_context, domain_id=123, signal_handler_options=options) # 错误的调用方式(会引发TypeError) init(["some", "args"], some_context, 123, options)
在第二种调用方式中,因为没有使用参数名,Python 解释器无法将提供的值正确地映射到函数的参数上,因此会抛出一个 TypeError。
这种设计在函数需要很多参数,或者参数的顺序可能会让调用者混淆时特别有用。
它增加了代码的可读性和健壮性,因为调用者必须清楚地指明每个参数的值。
python传参时避免参数改变
import os
import collections
import math
import sys
# 我们知道,用python写递归,在进行传参时,不像C++,参数的传递是值传递的时候,并不改变参数实际的值;只有使用引用传递时,才会改变参数,
# 但是在Python中,参数的传递是分为可变类型和不可变类型的,比如list就是可变类型,tuple就是不可变类型,下面就介绍一下两种方法来避免参数的改变。
# 第一种就是使用如下面v[:]来对list进行操作
"""
def main(v, cnt):
if cnt == 5:
v.append(cnt)
print(v)
return
v.append(cnt)
main(v[:], cnt+1)
print(v)
return
"""
"""
v = [1, 2, 3]
main(v[:], 4)
"""
# 第二种就是传参数的时候使用tuple,在函数里面,把tuple变为list,可进行修改。
"""def main(v, cnt):
if cnt == 5:
tmp = list(v)
tmp.append(cnt)
print(tmp)
return
tmp=list(v)
tmp.append(cnt)
main(tuple(tmp), cnt+1)
print(tmp)
return
v=[1,2,3]
main(tuple(v),4)"""
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
这篇文章主要介绍了Python使用Beautiful Soup爬取网页过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-08-08
python使用threading.Condition交替打印两个字符
这篇文章主要为大家详细介绍了python使用threading.Condition交替打印两个字符,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-05-05
在Python中用has_key()方法查找键是否存在的教程
这篇文章主要介绍了在Python中用has_key()方法查找键是否存在的教程,是Python入门学习中的基础知识,需要的朋友可以参考下2015-05-05


最新评论