Python의 블록 범위
다른 언어로 코딩 할 때 다음과 같이 블록 범위를 만드는 경우가 있습니다.
statement
...
statement
{
statement
...
statement
}
statement
...
statement
한 가지 목적은 코드 가독성을 높이는 것입니다. 특정 명령문이 논리 단위를 형성하거나 특정 지역 변수가 해당 블록에서만 사용된다는 것을 보여주기위한 것입니다.
파이썬에서 똑같은 일을하는 관용적 인 방법이 있습니까?
아니요, 블록 범위 생성에 대한 언어 지원은 없습니다.
다음 구성은 범위를 만듭니다.
- 기준 치수
- 수업
- 함수 (람다 포함)
- 발전기 표현
- 이해력 (dict, set, list (in Python 3.x))
파이썬의 관용적 인 방법은 함수를 짧게 유지하는 것입니다. 이것이 필요하다고 생각되면 코드를 리팩토링하십시오! :)
Python은 각 모듈, 클래스, 함수, 생성기 표현식, dict comprehension, set comprehension 및 Python 3.x에서 각 목록 이해에 대한 새 범위를 만듭니다. 이 외에도 함수 내에 중첩 된 범위가 없습니다.
함수 내에서 함수를 선언 한 다음 즉시 호출하여 Python의 C ++ 블록 범위와 유사한 작업을 수행 할 수 있습니다. 예를 들면 :
def my_func():
shared_variable = calculate_thing()
def do_first_thing():
... = shared_variable
do_first_thing()
def do_second_thing():
foo(shared_variable)
...
do_second_thing()
왜 이것을하고 싶은지 잘 모르겠다면 이 비디오 가 당신을 설득 할 것입니다.
기본 원칙은 '쓰레기'(추가 유형 / 함수)를 절대적으로 필요한 것보다 더 넓은 범위로 도입하지 않고 가능한 한 엄격하게 모든 범위를 do_first_thing()
지정하는 것입니다. 호출 기능.
블록 범위가 없다는 것에 동의합니다. 그러나 파이썬 3의 한 곳은 마치 블록 범위가있는 것처럼 SEEM을 만듭니다.
이 모습을 준 무슨 일이 있었습니까? 이것은 파이썬 2에서 제대로 작동했지만 파이썬 3에서 변수 누출을 막기 위해이 트릭을 수행했으며이 변경으로 인해 여기에 블록 범위가있는 것처럼 보입니다.
설명하겠습니다.
범위의 개념에 따라 동일한 범위 내에 동일한 이름을 가진 변수를 도입 할 때 해당 값을 수정해야합니다.
이것은 파이썬 2에서 일어나는 일입니다.
>>> x = 'OLD'
>>> sample = [x for x in 'NEW']
>>> x
'W'
그러나 파이썬 3에서는 같은 이름을 가진 변수가 도입되었지만 재정의하지 않지만 목록 이해는 어떤 이유로 든 샌드 박스처럼 작동하며 새 범위를 만드는 것처럼 보입니다.
>>> x = 'OLD'
>>> sample = [x for x in 'NEW']
>>> x
'OLD'
and this answer goes against the answerer @Thomas's statement The only means to create scope is functions, classes or modules because this looks like one other place of creating a new scope.
참고URL : https://stackoverflow.com/questions/6167923/block-scope-in-python
'Programing' 카테고리의 다른 글
레이블과 텍스트 영역을 어떻게 정렬합니까? (0) | 2020.10.08 |
---|---|
파이썬 클래스의 __dict __.__ dict__ 속성은 무엇입니까? (0) | 2020.10.08 |
G1에 대한 Java 7 (JDK 7) 가비지 콜렉션 및 문서 (0) | 2020.10.08 |
배경 Drawable을 설정할 때 패딩은 어디에 있습니까? (0) | 2020.10.08 |
Task.WhenAll에서 AggregateException이 발생하는 이유는 무엇입니까? (0) | 2020.10.08 |