2011-03-20 64 views
1

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

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 
+0

你称之为“可选参数”是什么? A还是? – eyquem 2011-03-24 00:18:41

回答

1

它会工作,但我认为很多人会因此而灰心丧气,因为它很容易混淆。

编程工作的一半是获取有效的代码。另一半是编写清晰明了的代码,以便你(或其他人)一年后可以了解它。

-2

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

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

+0

如果您想将变量传递给它,它会如何失败? – 2015-06-08 00:15:47

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

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

有在意义上的“的存储器块,其值可以改变”

而使用的“可变的”是“识别符”或“名称”的同义词是混乱不变量;

Pleaaaase!

+1

Pleeease!停止坚持“变量”一词意味着一大块内存。这意味着一个名称的价值可能会随着时间而变化。 Python有他们。 – 2012-12-09 17:00:07