Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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_Variables_Naming Conventions_Metasyntactic Variable - Fatal编程技术网

“单下划线”的目的是什么_&引用;Python中的变量?

“单下划线”的目的是什么_&引用;Python中的变量?,python,variables,naming-conventions,metasyntactic-variable,Python,Variables,Naming Conventions,Metasyntactic Variable,在本代码中,的之后的\uu是什么意思 if tbh.bag: n = 0 for _ in tbh.bag.atom_set(): n += 1 它只是一个变量名,在python中,对一次性变量使用是一种惯例。它只是表明循环变量实际上没有被使用。\uu在Python中有三种主要的常规用法: 将最后执行的表达式的结果保存在交互式 口译员会议(见附件)。这一先例是由标准的CPython制定的 口译员和其他口译员也纷纷效仿 有关i18n中的翻译查找(请参阅 例如,文

在本代码中,的
之后的
\uu
是什么意思

if tbh.bag:
    n = 0
    for _ in tbh.bag.atom_set():
        n += 1

它只是一个变量名,在python中,对一次性变量使用
是一种惯例。它只是表明循环变量实际上没有被使用。

\uu
在Python中有三种主要的常规用法:

  • 将最后执行的表达式的结果保存在交互式 口译员会议(见附件)。这一先例是由标准的CPython制定的 口译员和其他口译员也纷纷效仿

  • 有关i18n中的翻译查找(请参阅 例如,文档),如代码中的

    raise forms.ValidationError(_("Please enter a correct username"))
    
  • 作为通用“一次性”变量名:

  • 表示该部分 故意忽略函数的结果(从概念上讲,它被丢弃),如以下代码所示:

    label, has_label, _ = text.partition(':')
    
    def callback(_):
        return True
    
  • 作为函数定义的一部分(使用
    def
    lambda
    ),其中 签名是固定的(例如通过回调或父类API),但是 这个特定的函数实现不需要所有的 参数,如代码中所示:

    label, has_label, _ = text.partition(':')
    
    def callback(_):
        return True
    
    [很长一段时间,这个答案没有列出这个用例,但正如前面提到的,它经常出现,值得明确列出。]

  • 此用例可能与翻译查找用例冲突,因此有必要避免在任何也将其用于i18n翻译的代码块中使用
    \uu
    作为一次性变量(许多人喜欢使用双下划线,
    \u
    ,正是出于这个原因,将其作为一次性变量)

    linter经常认识到这个用例。例如,
    year,month,day=date()
    将在代码后面未使用
    day
    时发出lint警告。如果确实不需要
    day
    ,那么修复方法是写入
    年、月、u=date()
    。与lambda函数相同,
    lambda arg:1.0
    创建一个需要一个参数但不使用它的函数,这将被lint捕获。解决方法是编写
    lambda:1.0
    。未使用的变量通常隐藏错误/输入错误(例如,在下一行中设置
    day
    ,但使用
    dya


    在Python中,下划线
    被视为“我不在乎””或“一次性”变量

    • python解释器将最后一个表达式值存储到名为
      的特殊变量中

      >>> 10 
      10
      
      >>> _ 
      10
      
      >>> _ * 3 
      30
      
    • 下划线
      也用于忽略特定值。如果不需要特定值或未使用这些值,只需将这些值指定给下划线即可。

      >>> 10 
      10
      
      >>> _ 
      10
      
      >>> _ * 3 
      30
      
      解包时忽略一个值

      忽略索引


    在Python中使用下划线有5种情况

  • 用于在解释器中存储最后一个表达式的值

  • 用于忽略特定值。(所谓“我不在乎”)

  • 赋予变量或函数名特殊的含义和函数

  • 用作“国际化(i18n)”或“本地化(l10n)”功能

  • 分隔数字文字值的数字


  • 这是一篇很好的文章,其中有作者的示例。

    就Python语言而言,
    \uu
    没有特殊意义。它与
    \u foo
    foo
    \u f\u o\u
    一样有效

    的任何特殊含义纯粹是按照惯例。有几种情况很常见:

    • 不打算使用变量,但语法/语义需要名称时的伪名称

      # iteration disregarding content
      sum(1 for _ in some_iterable)
      # unpacking disregarding specific elements
      head, *_ = values
      # function disregarding its argument
      def callback(_): return True
      
    • 许多repl/shell将最后一个顶级表达式的结果存储到
      内置项中。

      在交互式口译员中使用特殊标识符
      \uu
      来存储上次评估的结果;它存储在内置的
      模块中。当不处于交互模式时,
      \u
      没有特殊含义,也没有定义。[]

      由于名称的查找方式,除非被全局或本地的
      \uu
      定义所遮蔽,否则裸
      \u
      指的是
      内置项

      >>> 42
      42
      >>> f'the last answer is {_}'
      'the last answer is 42'
      >>> _
      'the last answer is 42'
      >>> _ = 4  # shadow ``builtins._`` with global ``_``
      >>> 23
      23
      >>> _
      4
      
      注意:某些shell,如
      ipython
      不分配给
      内置程序。\u
      而是特例
      \u

    • 在国际化和本地化上下文中,
      \u
      用作主要翻译功能的别名

      返回基于当前全局域、语言和区域设置目录的消息本地化翻译。此函数在本地名称空间中通常别名为z()(请参见下面的示例)


    请参见您的案例,在
    len(tbh.bag.atom_set())
    (如果返回值具有
    \uu len_uu
    方法)或
    sum(tbh.bag.atom_set()中的u为1)
    pylint
    中的
    虚拟变量名的另一个选项是变量名的前缀
    虚拟
    。将此前缀与
    pylint
    一起使用,使
    pylint
    不会发出警告。此外,您还可以为
    pylint
    配置虚拟变量模式,以适应
    \uuu
    之类的情况。您的意思是它不代表最后返回的值吗?@steve仅在python外壳中使用,类似于序言中的使用。类似于Matlab中的使用。请注意,在cpython外壳中,如果您明确定义
    \uu
    ,它将永久停止保留上一个表达式的输出值。这看起来非常不一致,Python语言标准需要解决这个问题。他们应该将
    \uu
    定义为一个一次性名称,并阻止它被用作真正的标识符。您能否解释一下它在函数调用中的工作原理,例如:raise forms.ValidationError(quo;请输入正确的用户名”)。我在Django代码中看到了这一点,但不清楚发生了什么。这就是用法2