Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是"*_&引用;在python中忽略参数的可接受方法_Python - Fatal编程技术网

是"*_&引用;在python中忽略参数的可接受方法

是"*_&引用;在python中忽略参数的可接受方法,python,Python,如果我有一个函数/方法是某个框架回调的实现,并且不关心任何进一步的参数,那么它在语法上似乎是正确的,并且没有pylint/IDE抱怨使用*u表示对任何进一步的参数不感兴趣。我认为这一点是为了向工具和其他开发人员表明,这些参数目前并不相关 澄清一下,我的意思是: def my_callbacK_handler(a, b, *_): ... 我似乎还没有在野外使用过这个习语——它是否普遍,是否有例子,是否存在已知的问题 对于那些不熟悉的人来说,“ux”表示我对该符号不感兴趣的意图,IDE和li

如果我有一个函数/方法是某个框架回调的实现,并且不关心任何进一步的参数,那么它在语法上似乎是正确的,并且没有pylint/IDE抱怨使用*u表示对任何进一步的参数不感兴趣。我认为这一点是为了向工具和其他开发人员表明,这些参数目前并不相关

澄清一下,我的意思是:

def my_callbacK_handler(a, b, *_):
  ...
我似乎还没有在野外使用过这个习语——它是否普遍,是否有例子,是否存在已知的问题


对于那些不熟悉的人来说,“ux”表示我对该符号不感兴趣的意图,IDE和linters识别的是python“dummy”。

它和其他变量一样,只是一个变量,但按照惯例,它的意思是 如果您不打算使用该值,只需声明并忘记它即可

[OrderedSet()用于xrange(n)]

生成n个空有序集的列表
\u
是索引,但未使用<代码>.通常根据需要使用,但未使用变量名(不仅在python中)。 这只是一个棘手的python习惯用法,因为没有内置语法来实现这一点

在其他语言中(其中u是一个有效的标识符),这种情况并不少见经常 表示对的值不感兴趣的变量,但 由于语法原因需要

请注意,
u(…)
作为宏调用有另一个常规含义,即 来自gettext,其中使用
(“string literal”)
表示 需要本地化的字符串

阅读的线索

我不能说有什么问题,python没有在内部使用它,它只是一个变量,我们必须小心


更新:

。*args和**kwargs的名称只是按照惯例,但没有必要不使用它们

def my_callbacK_handler(a, b, *_):
  ...
因此,如果我在代码中看到这个函数,我的理解是,这个函数在工作时只使用a和b参数,而忽略其他参数


当您声明“*\u表示对任何其他参数不感兴趣”时,

*\u
表示多个占位符,就像您编写
def my\u callbacK\u处理程序(a,b,,,,,,….,)一样:
并将创建一个名为
的变量,该变量是额外参数的列表

它有两个优点:

  • 它可以处理没有额外参数的情况
  • 作为占位符,只能处理一个值

    x,y,_ = g() # ValueError: not enough values to unpack (expected 3, got 2)
    
    x,y,_ = h() # ValueError: too many values to unpack (expected 3)
    
    *.
    可以处理任意数量的值

    x,y,*_ = g()                                                                                                                  
    
    print(_)                                                                                                                      
    []
    
    x,y,*_ = h()                                                                                                                  
    
    print(_)                                                                                                                      
    [3, 4]
    
    

    一个词:更喜欢
    \u*
    以获得更健壮的代码。

    从未见过它,当我看到它被提及时不得不暂停,并且不得不阅读你的问题的其余部分,弄清楚你的意思。只是为了清楚-你说的是这样的:
    定义f(a,b,*.
    ?我只会使用传统的
    *参数,**kwargs
    并在docstring中添加注释。对于可选(忽略的)参数,格式可能不太好。。。使用约定lukeGiven,因为
    对于一个没有意义的名字来说是惯用的,它非常有意义<代码>*dummy
    ,同样。这更多的是对
    \uu
    含义的解释,而不是在
    *\u
    习语中的用法。这是一个很好的解释,但是没有完全回答预期的问题。好的,谢谢Danny,如果我理解正确,请查看更新。我认为使用*uu没有任何问题,它只是取决于你看待事物的角度。有时候,我们在项目中有自己的习惯用法。是的,这种更新是有意义的,答案解释了那些不使用*args和**kwargs或下划线的人,希望“我对任何进一步的参数不感兴趣”的表达对阅读本文的其他程序员来说是清楚的,不仅仅是IDE和linters。@AdamSmith如果第三方被配置为调用这些函数并传递一些可能被使用或忽略的参数,则它可能有效。如果忽略,则执行
    *.
    可能是有意义的,尽管如果这种情况非常罕见,以至于看起来很奇怪和令人惊讶,那么即使忽略,也最好只执行
    *args
    。@AdamSmith您没有选择权禁止调用方传递它们,因为调用方是第三方程序包,例如,CeleryBeat是芹菜的一部分,它将带有任务元数据的参数传递给定义要运行的任务的函数。
    x,y,*_ = g()                                                                                                                  
    
    print(_)                                                                                                                      
    []
    
    x,y,*_ = h()                                                                                                                  
    
    print(_)                                                                                                                      
    [3, 4]