Programing

Python의 블록 범위

crosscheck 2020. 10. 8. 07:43
반응형

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

반응형