이때 다음 프로그램을 실행하면 출력이 나올까요? 처형은 성공할 것인가?
#块级作用域 if 1 == 1: name = "lzl" print(name) for i in range(10): age = i print(age)
먼저 실행 결과를 살펴보겠습니다
C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py lzl 9
종료 코드 0으로 프로세스가 완료되었습니다
Java에서는 문제 없이 코드가 실행되었습니다. C# 에서 위 코드를 실행하면 이름과 나이가 정의되지 않았다는 메시지가 표시되지만 Python에서는 성공적으로 실행할 수 있습니다. 이는 variable에서 외부에서 호출할 수 있으므로 성공적으로 실행할 수 있습니다. 2. 로컬 범위
, 이 함수는 별도의 범위입니다. Python에는 블록 수준 범위가 없지만 다음 코드는 로컬 범위가 있습니다. #local 범위
def func(): name = "lzl" print(name)
이 코드를 실행하고 결과가 나올지 생각해 보세요.
Traceback (most recent call last): File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module> print(name) NameError: name 'name' is not defined
실행 시 오류가 보고됩니다. name 변수는 func() 함수 내에서만 적용되므로 위 코드를 간단히 조정하면 됩니다. 다시 한 번 살펴보세요.
#局部作用域 def func(): name = "lzl" func() #执行函数 print(name)
는 이전 코드에 한 줄의 코드를 추가했는데, 이번에는 함수가 실행되었나요?
Traceback (most recent call last): File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module> print(name) NameError: name 'name' is not defined
실행 시 여전히 오류가 보고됩니다. 방금 문장으로 돌아가 보겠습니다. 함수가 실행되더라도 이름의 범위는 함수 내부에만 있고 여전히 외부에서 호출할 수 없습니다. 처음 두 가지 지식 포인트, 다음으로 증폭 이동을 시작하겠습니다
3. 범위 체인
#作用域链 name = "lzl" def f1(): name = "Eric" def f2(): name = "Snor" print(name) f2() f1()
함수를 배웠으니 f1()이 실행된 후에 Snor가 출력된다는 점을 먼저 알아두자. Python에는 범위 체인이 있습니다. .먼저 본인의 스코프에 가서 찾으러 갔습니다. 찾을 수 없어서 오류를 보고할 때까지 상사에게 가지 않았습니다.
4. 얼티밋 에디션 스코프
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2()
최종 f2() 실행 결과가 "lzl" 또는 "eric"을 인쇄할지 생각해 보세요. 지금 답변을 게시하는 대신 다음 코드를 살펴보세요.
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" return f1 ret = f2() ret() #输出:lzl
실행 결과는 "lzl"입니다. f2()의 실행 결과는 함수 f1입니다. 즉, ret=f1; ret()을 실행하는 것은 f1()을 실행하는 것과 같습니다. f2()와는 아무런 관련이 없습니다. 동일한 범위 체인, 함수 내부에 변수가 없으면 외부를 보므로 이때 변수 이름의 값은 "lzl"입니다. 이것을 이해하면 다음과 같은 최종 코드에 대한 답도 알 수 있습니다. 방금 답변이 제공되지 않았습니다
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() # 输出:lzl
예, 출력은 "lzl"입니다. 함수가 실행되기 전에 범위가 형성되고 범위 체인도 생성되었음을 기억하세요
5. 시나 면접질문
rreeli = [lambda :x for x in range(10)]
li가 목록 유형이고 목록의 요소가 함수임을 알 수 있습니다. 그러면 목록의 첫 번째 요소의 반환 값이 출력됩니다.
print(type(li)) print(type(li[0])) # <class 'list'> # <class 'function'>
li 첫 번째
함수의 반환 값은 0이 아니라 9입니다. 기억하세요: 함수가 실행되기 전에는 내부 코드가 실행되지 않습니다. 블로그에서 코드를 연습할 수 있습니다. 혼자서 인상을 깊게 해보세요
위 내용은 Python 5개 점을 사용하여 범위 방법 얻기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!