각 기능마다 고유 한 범위가 있습니다. 로컬, 내부 범위의 함수에서 시작하여 전역 (모듈) 범위에 도달 할 때까지 함수를 둘러싸는쪽으로 바깥쪽으로갑니다. 이 시퀀스는 함수가 인 범위에 따라에 정의됩니다. 스택 (호출 순서)은 이 아니며 변수 조회에이 사용되지 않습니다.
예에서 각 함수는 내부 범위와 외부 범위 만 가질 수 있습니다. find_total
의 경우 <module>.find_total.<locals>
및 <module>
입니다. 따라서 find_total
이 실행될 때마다 로컬 범위에서 total
을 찾아 실패하고 전역 범위를 조사합니다. There, total == 20
.
find_average
의 범위는 find_average
입니다. 전역 범위 (find_total
또는 find_length
)도 액세스 할 수 없습니다. 내부에서 find_average
을 find_total
으로 전달하려면 매개 변수를 통해 전달해야합니다.
달리, find_total
는 find_average
내에 정의 할 수있는 경우. 이렇게하면 find_total
은 시퀀스 <module>.find_average.<locals>.find_total.<locals> -> <module>.find_average.<locals> -> <module>
을 검색하여 이름을 확인합니다. 이 밖에 find_average
에서 find_total
액세스를 만들 것입니다
total = 20
def find_length(l):
length = len(l)
return length
def find_average(l):
total = 10
def find_total(l):
return total
return find_total(l)/find_length(l)
average = find_average(example_list)
!
example_list의 콘텐츠는 무엇입니까? – Jens
총계 = 10은'find_avarage'에서만 호출되는 새로운 변수를 생성합니다. – Jens
숫자 목록이되어야합니다. –