4

저는 Python을 배우고 있으며, 제가 이해하지 못하는 예제를 발견했습니다. 공식 튜토리얼에서는, 다음과 같은 코드가 주어집니다 : "기본 값 :Python의 기본 매개 변수 범위

i = 5 

def f(arg=i): 
    print(arg) 

i = 6 
f() 

하여 C++에서오고, 이것이 5. 인쇄합니다 그러나 나는 또한 기술적 인 설명을 이해하고 싶은 것을 나를 위해 직관적으로 의미가 있습니다 정의 범위에서 함수 정의 지점에서 평가됩니다. " 여기서 "정의 범위"는 무엇을 의미합니까?

+2

* "범위 정의"*는 함수가 정의되는 범위, 즉'def = '행이 실행되는'i = 5 '를 포함하는 범위를 의미합니다. 참고 자료 : http://stackoverflow.com/q/1132941/3001761 – jonrsharpe

+0

"범위 정의": 파이썬에서는 로컬 범위의 함수, 즉 함수 내의 함수를 가질 수 있습니다. C++에서 가장 가까운 것은 람다이며, C++에서 newish입니다 (파이썬에는 람다도 있습니다). – cdarke

+0

짧은 대답 : 기본값은'f.func_defaults'에 터플로 저장되며, 그 값은 코드에서'(5,)'입니다. – gdlmx

답변

1
1. i = 5 
2. 
3. def f(arg=i): 
4.  print(arg) 
5. 
6. i = 6 
7. f() 

# 1에서 i = 5이 평가되고 변수와 그 값이 범위에 추가됩니다.

3 행에서 함수 선언이 평가됩니다. 이 시점에서 모든 기본 인수도 평가됩니다. i5 값을 보유하므로 arg의 기본값은 5이며 기호는 i이 아닙니다.

i은 6 행에서 값이 변경된 후에 arg이 이미 5이므로 변경되지 않습니다.