【问题标题】:Naming practice for optional argument in python functionpython函数中可选参数的命名实践
【发布时间】:2011-07-19 04:20:45
【问题描述】:

是否可以在 python 函数中为可选参数提供与外部变量相同的名称? 它似乎工作正常,因为下面定义的函数 f 和 g 给出了相同的输出。但是,这被认为是不好的做法吗?在某些情况下会失败吗?

a = 1
def f(x,A=a): return x*A
def g(x,a=a): return x*a

print g(2)
>> 2
print g(2,a=2)
>> 4

【问题讨论】:

  • 什么叫“可选参数”?一个或一个?

标签: python function variables optional-arguments


【解决方案1】:

它会起作用,但我认为很多人会不鼓励它,因为它很容易混淆。

编程工作的一半是获得有效的代码。另一半是编写清晰易懂的代码,以便您(或其他人)在一年后能够理解它。

【讨论】:

    【解决方案2】:

    如果你想将变量传递给它,它会失败。

    但是最好的命名实践是你的函数和变量不被称为 a,f,g,x。那么你不太可能发生碰撞。

    【讨论】:

    • 如果要将变量传递给它怎么会失败?
    【解决方案3】:

    它会起作用,尽管它很容易有点令人困惑,但它是完全有效的。这是因为函数和对函数的调用发生在不同的命名空间中。所以如果你写:

    def some_function(var1,var2=somevalue):  #var1 & var2 of functions namespace
        some things happening here
    
    var1 = somevalue #mainspace var1
    var2 = somevalue #mainspace var2
    some_function(var1,var2=var2) 
    #upper line: first var2 = from function, second var2 = from mainspace 
    

    它会起作用,因为主命名空间中的 var1 与函数命名空间中的 var1 完全不同。并且 somefunction 的调用将如图所示工作,即使您 - 看似 - 在一行中使用 var2 两次。但是正如您在解释时遇到的困难所看到的那样,这样做会产生一些混乱,所以如果可以的话,最好跳过这样的事情。与其他一些语言相比,Python 的主要优势之一是它的可读性,你应该通过你的编码风格来支持它。

    您也应该避免命名变量 a 和其他变量 A。在此处阅读 pyhton 中的命名约定:www.python.org/doc/essays/styleguide.html 并在此处阅读有关命名空间的信息:http://bytebaker.com/2008/07/30/python-namespaces/

    【讨论】:

      【解决方案4】:

      停止在 Python 中使用“变量”这个词!

      没有“值可以改变的内存块”意义上的变量

      并且将“变量”用作“标识符”或“名称”的同义词是令人困惑的;

      请!

      【讨论】:

      • 请!不要再坚持“变量”这个词意味着一块内存。这意味着一个名称,其值会随时间而变化。 Python 有它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2010-10-27
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 2021-08-07
      相关资源
      最近更新 更多