>  기사  >  백엔드 개발  >  Python의 범위를 쉽게 이해하기 위한 5가지 지식 포인트에 대한 자세한 설명

Python의 범위를 쉽게 이해하기 위한 5가지 지식 포인트에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-28 15:09:571269검색

파이썬의 범위에 대한 소개는 인터넷에 많이 있기 때문에 오늘 제가 공유하는 글을 통해 도움이 필요한 친구들이 참고하여 파이썬의 범위를 쉽게 이해할 수 있습니다.

">

1. 블록 수준 범위

이때 다음 프로그램을 실행하면 출력이 나올지 생각해 볼까요? 실행은 성공할까요?

#블록 수준 범위

if 1 == 1:
name = "lzl"

print(name)


for i in range( 10):
age = i

print(age)

먼저 실행 결과를 살펴보겠습니다

C:/Users/L /PycharmProjects/s14/preview/ Day8/scope/main.py
lzl
9

종료 코드 0으로 프로세스가 완료되었습니다.

코드가 성공적으로 실행되었습니다. 문제 없습니다. Java/C#, 위 코드를 실행하면 이름과 나이가 정의되지 않았다는 메시지가 표시되지만 Python에서는 블록 수준 범위가 없기 때문에 성공적으로 실행될 수 있습니다.

2. 로컬 범위

이전에 배운 지식을 되돌아보면 함수를 배울 때는 함수가 별도의 범위가 없습니다. -level 범위는 Python에 있지만 로컬 범위가 있습니다. 코드

#Local 범위

def func():
name = "lzl"

print(name)

이 섹션 코드를 실행하고 출력이 있을지 생각해 보세요.

추적(가장 최근 호출 마지막):
파일 "C:/Users/L /PycharmProjects/s14/preview/Day8/scope/main.py ", 23행,
print(name)
NameError: 이름 'name'이 정의되지 않았습니다

실행 중 오류입니다. 이름 변수는 func() 함수에만 적용되므로 전역적으로 호출할 수 없습니다. 위 코드를 간단히 조정하고 결과를 확인해 보세요.

#로컬 범위

def func():
name = "lzl"

func() #함수 실행
print(name)

추가됨 변수 이름을 인쇄하기 전에 이전 코드에 코드를 추가하고 함수를 실행하면 이때 인쇄가 변경됩니까?

추적(가장 최근 호출 마지막):
파일 "C:/Users/L/ PycharmProjects/s14/preview/Day8/Function Domain/main.py", 23행,
print(name)
NameError: 이름 'name'이 정의되지 않았습니다

실행 시 여전히 오류가 보고되므로 이전 문장으로 돌아갑니다. 단어: 함수가 실행되더라도 이름의 범위는 함수 내부에만 있고 여전히 외부에서 호출할 수 없습니다. 처음 두 가지 지식 포인트를 기억하세요. 그런 다음 트릭 확장을 시작합니다

3. 스코프 체인

함수를 조정하고 다음 코드의 실행 결과가 무엇인지 확인하세요.

#스코프 체인

name = "lzl"
def f1():
name = "Eric"
def f2():
name = " Snor"
print(name)
f2()
f1()

함수를 배웠다면 f1()이 실행된 후에 Snor가 출력된다는 점을 기억하자. 먼저 개념, Python에는 범위 체인이 있습니다. 변수는 내부에서 외부로 검색됩니다. 먼저 자신의 범위로 이동하여 찾으며, 찾을 수 없을 때까지 상위 수준으로 이동하지 않습니다. 그리고 오류 신고

4.Ultimate Scope

자, 준비는 충분히 했고, 궁극의 버전이 나왔습니다~~

#Ultimate 버전 Scope

name = "lzl"

def f1( ):
print(name)

def f2():
name = "eric"
f1()

f2()

think f2()의 최종 실행 결과로 "lzl" 또는 "eric"을 인쇄하시겠습니까? 지금 답변을 게시하지 마세요. 다음 코드를 살펴보세요.

#ULTIMATE SCOPE

name = "lzl"

def f1() :
print(name)

def f2():
name = "eric"
return f1

ret = f2()
ret()

#Output: lzl

의 실행 결과는 "lzl"입니다. 위 코드를 분석해 보면 f2()의 실행 결과는 함수 f1의 메모리 주소, 즉 ret=f1입니다. ; ret() 실행은 f1() 실행과 동일합니다. f2()와는 아무런 관련이 없습니다. name="lzl"과 f1()은 동일한 범위 체인에 있습니다. 함수 안에서는 밖에서 찾아보게 되니까 시간 변수 이름의 값이 "lzl" 이라는 걸 이해하고 나면 방금 답이 나오지 않았던 궁극의 코드에 대한 답도 알 수 있을 거에요

#Ultimate 버전 범위

name = "lzl"

def f1():
print(name)

def f2():
name = "eric"
f1()

f2 ()

# 출력: lzl

예, 출력은 "lzl"입니다. 함수가 실행되기 전에 범위가 형성되고 범위 체인도 생성되었음을 기억하세요

5. Sina 인터뷰 질문

li = [lambda :x for x in range(10)]

li 유형을 결정하시겠습니까? li의 요소는 어떤 유형입니까?

print(type(li))
print(type(li[0]))

#
#

li가 리스트 유형이고 리스트의 요소가 함수임을 알 수 있습니다. 그러면 리스트의 첫 번째 요소의 반환 값이 출력됩니다. 이때 반환 값은 무엇입니까?

#lambada 면접 질문

li = [lambda :x for x in range(10)]

res = li[0]()
print(res )

#Output: 9

li첫 번째 함수의 반환 값은 0이 아니라 9입니다. 기억하세요: 블로그의 코드는 함수가 실행되기 전에는 실행되지 않습니다. 직접 연습해보시고 인상도 깊어지세요

요약

위 글의 내용이 모두의 공부와 업무에 도움이 될지는 모르겠습니다. 질문이 있으시면 언제든지 메시지를 남겨주세요.

위 내용은 Python의 범위를 쉽게 이해하기 위한 5가지 지식 포인트에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.