python - for...in 中的局部变量, 为何能在外面使用?
怪我咯
怪我咯 2017-04-18 09:57:28
0
4
1429

2016/11/20

问题

详情见代码

Python 作为高级语言, 抽象层次很高, 然一个程序员一般都会好几门语言, 有时候会在语言的细节处, 发生概念性的混淆

  1. 有点害怕, 是不是一直误解了 Python 的作用域原理?

  2. 正确的作用域原理是什么?

答案: LEGB法则

初学 Python 语法的时候, 由于觉得这东西太复杂, 就快速跳过了, 没想到是个坑( maybe feature ? )

相关代码

def find(sequence, target):
    for index, value in enumerate(sequence):
        if value == target:
            break
    else:
        return -1
    return index  # ?? 这里是否可表示 index 已经逃离 for...in 作用域了?

print find(range(10), 1)


for iii in range(10):
    iii += 1
print iii

一直以为是这样的
for (int i=0; i<10; ++i)
    do something                       # i的作用域在 for 中

重现

  1. 拷贝代码, 运行

尝试解决

  1. 搜索了 Python 作用域的相关介绍

  2. https://www.zhihu.com/questio...

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(4)
伊谢尔伦

이것은 javascript의 var
js의

과 약간 비슷합니다. 으아악

js에서 var으로 정의한 변수의 범위는 함수 전체이므로 ES6 구문에는 let으로 정의한 변수가 let인 경우가 추가됩니다.
입니다. 나중에 로그인하면 for(let i = 0; i < 100; i++)undefined이 됩니다.

자바라면 역시 블록레벨 스코프입니다

으아악

귀하의 코드는 Java와 같습니다

刘奇

이것으로 변경하고 locals() 함수를 출력하세요

으아악

출력을 찾습니다

으아악

출력에서 인덱스, 값, 대상 및 시퀀스가 ​​동일한 네임스페이스에 있음을 확인할 수 있습니다. 둘 다 동일한 기능을 수행하기 때문입니다. 그래야 색인에 접근할 수 있습니다.

Python의 범위

  1. 가장 안쪽 수준에서 검색하며 일반적으로 locals() 함수에서 검색합니다.

  2. 모듈 내에서 검색(예: globals())

  3. 모듈 외부에서 검색, 즉 __builtin__에서 검색

小葫芦

파이썬에는 블록 범위가 없습니다

가장 작은 범위는 함수

洪涛

간단히 말하면 Python에서는 모듈, 클래스, 함수만 새 범위를 생성하므로 for 루프에 정의된 변수는 동일한 범위에 있는 한 루프 외부에서도 액세스할 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿