当前位置: 代码网 > it编程>前端脚本>Python > python禁止位置传参函数详解

python禁止位置传参函数详解

2024年11月21日 Python 我要评论
python禁止位置传参函数这种函数定义方式使用了 python 3.x 中的关键字参数(keyword-only arguments)的特性,通过在参数列表中使用 * 符号作为分隔符,来明确指示该函

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)"""


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com