python禁止位置传参函数详解

 更新时间:2024年11月20日 08:39:03   作者:Covirtue  
文章介绍了Python3.x中的关键字参数特性,说明了如何在函数定义中使用*符号来限制参数只能通过关键字传递,而不是位置,这种特性在处理参数较多或顺序可能导致混淆的函数时特别有用,提高了代码的可读性和健壮性

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实现通讯录管理系统

    python实现通讯录管理系统

    这篇文章主要为大家详细介绍了python实现通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    这篇文章主要介绍了Python使用Beautiful Soup爬取网页过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python使用threading.Condition交替打印两个字符

    python使用threading.Condition交替打印两个字符

    这篇文章主要为大家详细介绍了python使用threading.Condition交替打印两个字符,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 如何使用Python VTK绘制线条

    如何使用Python VTK绘制线条

    这篇文章主要介绍了如何使用Python-VTK绘制线条,主要绘制直线和曲线,下面文章详细实现过程需要的小伙伴可以参考一下
    2022-04-04
  • python树莓派红外反射传感器

    python树莓派红外反射传感器

    这篇文章主要为大家详细介绍了python树莓派红外反射传感器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python cx_Oracle模块的安装和使用详细介绍

    python cx_Oracle模块的安装和使用详细介绍

    这篇文章主要介绍了python cx_Oracle模块的安装和使用详细介绍的相关资料,需要的朋友可以参考下
    2017-02-02
  • 在Python中用has_key()方法查找键是否存在的教程

    在Python中用has_key()方法查找键是否存在的教程

    这篇文章主要介绍了在Python中用has_key()方法查找键是否存在的教程,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • python 正确保留多位小数的实例

    python 正确保留多位小数的实例

    今天小编就为大家分享一篇python 正确保留多位小数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • yolov5调用usb摄像头及本地摄像头的方法实例

    yolov5调用usb摄像头及本地摄像头的方法实例

    YOLOV5模型从发布到现在都是炙手可热的目标检测模型,被广泛运用于各大场景之中,下面这篇文章主要给大家介绍了关于yolov5调用usb摄像头及本地摄像头的相关资料,需要的朋友可以参考下
    2022-03-03
  • Django如何防止定时任务并发浅析

    Django如何防止定时任务并发浅析

    这篇文章主要给大家介绍了关于Django如何防止定时任务并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论