python函数中可选参数的命名练习

时间:2011-03-20 15:56:45

标签: python function variables optional-arguments

是否可以在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

4 个答案:

答案 0 :(得分:2)

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

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完全不同的变量。即使你 - 看似 - 在一行中使用var2两次,某些函数的调用也会如图所示。但正如你在解释中遇到的困难所看到的那样,这样做会产生一些混乱,所以如果可以的话,最好跳过这样的事情。 Pythons相对于其他语言的主要优势之一是它的可读性,你应该通过编码风格来支持它。

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

答案 1 :(得分:1)

它会起作用,但我认为很多人会劝阻它,因为它很容易让人感到困惑。

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

答案 2 :(得分:-1)

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

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

使用“变量”作为“标识符”或“名称”的同义词令人困惑;

Pleaaaase!

答案 3 :(得分:-2)

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

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