当前位置:
首页 > Python基础教程 >
-
python禁止位置传参函数详解
文章介绍了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)"""
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/weixin_47695827/article/details/142383785
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
开启SQLSERVER数据库缓存依赖优化网站性能
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比