2011-03-20 3 views
1

외부 변수와 동일한 이름의 파이썬 함수에서 선택적 인수를 제공해도됩니까? 아래 정의 된 함수 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 
+0

"선택 인수"는 무엇이라고합니까? A 또는? – eyquem

답변

1

효과가 있지만 쉽게 혼란 스러울 수 있기 때문에 많은 사람들이 사용하지 않을 것이라고 생각합니다.

프로그래밍 작업의 절반이 작동하는 코드를 얻고 있습니다. 나머지 절반은 명확하고 명백한 코드를 작성하여 1 년 후 사용자 (또는 다른 사람)가 이해할 수 있도록합니다.

-2

변수를 전달하려는 경우 오류가 발생합니다.

그러나 가장 적합한 명명법은 함수와 변수를 a, f, g, x라고 부르지 않는 것입니다. 그렇다면 충돌을 당하지 않을 것입니다.

+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와 다른 변수의 이름을 지정하는 것도 피해야합니다. 여기서 pyhton의 명명 규칙에 대해 읽으십시오. www.python.org/doc/essays/styleguide.html 및 여기에서 네임 스페이스에 대한 설명을 읽어보십시오. http://bytebaker.com/2008/07/30/python-namespaces/

-1

Python에서 "variable"이라는 단어를 사용하지 마십시오!

는 "값을 변경할 수있는 메모리 청크"

와 "식별"또는 "이름"의 동의어로서 혼란 "변수"의 사용을 의미에서 어떤 변수가 없다;

가수 분해 효소!

+1

Pleeease! 단어 "변수"가 메모리 덩어리를 의미한다고 주장하는 것을 그만 두십시오. 값이 시간에 따라 변할 수있는 이름을 의미합니다. 파이썬에 있습니다. –