首页 > 其他分享 >**(双星号/星号)和 *(星号/星号)对参数有什么作用?

**(双星号/星号)和 *(星号/星号)对参数有什么作用?

时间:2023-10-29 15:34:29浏览次数:33  
标签:星号 args 参数 kwargs 双星 foo def

内容来自 DOC https://q.houxu6.top/?s=**(双星号/星号)和 *(星号/星号)对参数有什么作用?

在以下函数定义中,*args**kwargs 分别表示什么意思?

def foo(x, y, *args):
    pass

def bar(x, y, **kwargs):
    pass

关于参数的补充问题,可以参考 What do ** (double star/asterisk) and * (star/asterisk) mean in a function call?


*args**kwargs 是常见的用法,允许在函数中接受任意数量的参数,正如 Python 教程中的 关于定义函数的更多内容 一节所描述。

*args 将给你所有位置参数作为元组:

def foo(*args):
    for a in args:
        print(a)        

foo(1)
# 1

foo(1, 2, 3)
# 1
# 2
# 3

**kwargs 将给你所有的关键字参数作为字典:

def bar(*\*kwargs):
    for a in kwargs:
        print(a, kwargs[a])  

bar(name='one', age=27)
# name one
# age 27

这两种习惯用法可以混合使用常规参数和一些可变参数:

def foo(kind, \*args, bar=None, \*\*kwargs):
    print(kind, args, bar, kwargs)

foo(123, 'a', 'b', apple='red')
# 123 ('a', 'b') None {'apple': 'red'}

反过来也是可行的:

def foo(a, b, c):
    print(a, b, c)

obj = {'b':10, 'c':'lee'}

foo(100, **obj)
# 100 10 lee

另一种使用 *l 的习惯用法是在调用函数时解包参数列表。

def foo(bar, lee):
    print(bar, lee)

baz = [1, 2]

foo(*baz)
# 1 2

在 Python 3 中,可以在左侧使用 *l(扩展迭代器解包),但在这种情况下会给出列表而不是元组:

first, *rest = [1, 2, 3, 4]
# first = 1
# rest = [2, 3, 4]

另外,Python 3 添加了一个新的语义(参见 PEP 3102):

def func(arg1, arg2, arg3, \*, kwarg1, kwarg2):
    pass

这样的函数只接受前三个位置参数,* 之后的所有内容只能作为关键字参数传递。

注意:

Python 的 dict 语义上用于关键字参数传递,但是它们的顺序是任意的。然而,在 Python 3.6+ 中,关键字参数保证记住插入顺序。实际上,CPython 3.6 中的所有 dict 都会以实现细节的形式记住插入顺序,这在 Python 3.7 中成为标准。

标签:星号,args,参数,kwargs,双星,foo,def
From: https://www.cnblogs.com/xiaomandujia/p/17795918.html

相关文章

  • 函数的参数传递
     ......
  • SOLIDWORKS参数化设计之格式转换 慧德敏学
    现在越来越多的企业开始进行模型的参数化设计规范,不管是使用SOLIDWORKS自带的方程式,还是使用SOLIDWORKS参数化设计插件,参数化的过程其实已经很透明了,都大同小异。我们之前介绍过SolidKits.AutoWorks软件,可以很方便的帮助我们实现参数化改型设计,不仅可以完成三维模型的变化、工程......
  • springMVC controller控制器方法HttpServletRequest等参数的是谁传递进来的
    SpringMVC中两个重要的接口:请求方法参数的处理、响应返回值的处理,分别是HandlerMethodArgumentResolver和HandlerMethodReturnValueHandlerHandlerMethodArgumentResolver的实现类 ServletRequestMethodArgumentResolver 参数类型是实现或继承或是WebRequest、ServletRequest......
  • "最小惊讶"和可变的默认参数
    内容来自DOChttps://q.houxu6.top/?s="最小惊讶"和可变的默认参数"最小惊讶"和可变的默认参数任何长时间使用Python的人都会被以下问题困扰(或者被撕裂):deffoo(a=[]):a.append(5)returnaPython新手会期望这个没有参数的函数总是返回一个只有一个元素的列表:[5]......
  • 系统集成易混淆知识点汇总-参数估算、类比估算、三点估算、自下而上估算
    概念:(1)参数估算:参数估算是一种基于历史数据和项目参数,使用某种算法来计算成本或工期的估算技术。利用历时数据之间的统计关系和其他变量,来估算诸如成本、预算和持续时间等活动参数。(2)类比估算:类比估算是指以过去类似项目的参数值或规模指标为基础,来估算当前项目的同类参数或指标......
  • 【ArcPy】Python工具的参数校验
    在updateMessages方法中检查输入图层数据源的工作空间是否是本地数据,如果不是,设置错误。在updateParameters方法中从图层派生出第4个参数,即输出要素类的路径。注意该参数的类型需要是“派生(Derived)”importarcpyclassToolValidator(object):"""Classforvalidatingatoo......
  • ASEMI高压二极管CL08-RG210参数,CL08-RG210封装
    编辑-ZCL08-RG210参数描述:型号:CL08-RG210反向重复峰值电压VRRM:8000V反向工作峰值电压VRWM:8000V正向平均电流IF:0.5A正向(不重复)浪涌电流IFSM:20A反向恢复时间trr:80ns正向峰值电压VFM:12V反向峰值电流IR:2uA工作环境和存贮温度Ta,TSTG:-40to+150℃  CL08-RG210封装大......
  • ASEMI高压二极管CL08-RG210参数,CL08-RG210封装
    编辑-ZCL08-RG210参数描述:型号:CL08-RG210反向重复峰值电压VRRM:8000V反向工作峰值电压VRWM:8000V正向平均电流IF:0.5A正向(不重复)浪涌电流IFSM:20A反向恢复时间trr:80ns正向峰值电压VFM:12V反向峰值电流IR:2uA工作环境和存贮温度Ta,TSTG:-40to+150℃ CL08-RG210封装大小:直径:7.5mm长度:2......
  • 深度学习(统计模型参数量)
    统计模型参数量,方便判断不同模型大小:importtorchimporttorch.nnasnn#自定义AlexNet模型classAlexNet(nn.Module):def__init__(self):super(AlexNet,self).__init__()self.conv1=nn.Conv2d(1,96,kernel_size=11,stride=4)self.......
  • 获取Java21所有启动参数及默认值
    各版本获取启动参数命令:java-XX:+PrintFlagsFinal-version>jvm_flags.txt所有参数:[Globalflags]intActiveProcessorCount=-1{product}{default}uintxAdaptiveSizeDecrementScaleFactor......