Практика именования необязательного аргумента в функции python - PullRequest
1 голос
/ 20 марта 2011

Можно ли присвоить необязательному аргументу в функции 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 ]

2 голосов
/ 20 марта 2011

Это будет работать, хотя это может немного запутать, но это совершенно правильно.Это связано с тем, что функция и вызов функции происходят в разных пространствах имен.Поэтому, если вы напишите:

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 дважды в одной строке.Но, как вы можете видеть из трудностей объяснения, при этом возникает некоторая путаница, поэтому лучше пропустите такие вещи, если можете.Одно из главных преимуществ Pythons перед некоторыми другими языками - это удобочитаемость, вы должны поддерживать это с помощью своего стиля кодирования.

И именование переменных a и других переменных A - это то, чего вам следует избегать.Прочитайте о соглашениях об именах в pyhton здесь: www.python.org/doc/essays/styleguide.html и прочитайте о пространствах имен здесь: http://bytebaker.com/2008/07/30/python-namespaces/

1 голос
/ 20 марта 2011

Это будет работать, но я думаю, что многие будут препятствовать этому, потому что это может легко запутать.

Половина работы по программированию - это получение кода, который работает. Другая половина - это написание ясного и понятного кода, чтобы вы (или кто-то еще) могли понять его год спустя.

0 голосов
/ 24 марта 2011

Перестаньте использовать слово «переменная» в Python!

Нет переменных в смысле «порция памяти, значение которой может измениться»поскольку синоним «идентификатора» или «имени» сбивает с толку;

Pleaaaase!

0 голосов
/ 20 марта 2011

не удастся, если вы захотите передать ему переменную.

Но лучшая практика именования - это когда ваши функции и переменные не называются a, f, g, x.Тогда вы вряд ли столкнетесь.

...