programing

for 루프에서 사용하지 않는 변수를 선언하는 방법은 무엇입니까?

nasanasas 2020. 10. 29. 08:12
반응형

for 루프에서 사용하지 않는 변수를 선언하는 방법은 무엇입니까?


예를 들어 다음과 같은 목록 이해력이있는 경우 :

['' for x in myList]

목록의 모든 요소에 대해 빈 문자열이있는 새 목록을 효과적으로 만들려면 x. 사용하지 않는 x변수 를 선언 할 필요가 없도록 이것을 작성하는 더 깨끗한 방법이 있습니까?


_ for 루프 및 튜플 할당에서 무시 된 멤버의 표준 자리 표시 자 이름입니다.

['' for _ in myList]

[a+d for a, _, _, d, _ in fiveTuples]

BTW 목록은 목록 이해없이 작성 될 수 있습니다 (문자열, 정수 등과 같은 불변 멤버 목록을 만들고 싶다고 가정).

[''] * len(myList)

아니요. Zen이 말했듯이 특별한 경우는 규칙을 위반할만큼 특별하지 않습니다. 반복되는 항목의 항목을 사용하지 않는 루프와 압축을 풀 "대상"이 있다는 규칙이 특별한 경우입니다.

그러나 _일반적으로 "의도적으로 사용되지 않은"것으로 이해되는 변수 이름으로 사용할 수 있습니다 (PyLint 등도이를 알고 존중합니다).


그것은 사용 밝혀 dummy*변수 이름과 같은 트릭 마찬가지로 (시작 워드 더미이다) _. _알려진 표준이며 의미있는 변수 이름을 사용하는 것이 좋습니다. 당신이 사용할 수 있도록 dummy, dummy1, dummy_anything. 이러한 변수 이름을 사용하면 PyLint불평하지 않습니다.


인수의 이름을 지정해야하는 경우 (예 : 이름으로 참조되는 특정 인수를 사용하지 않는 모의를 작성할 때) 다음 단축 메서드를 추가 할 수 있습니다.

def UnusedArgument(_):
  pass

다음과 같이 사용하십시오

def SomeMethod(name_should_remain):
  UnusedArgument(name_should_remain)

같은 줄의 for 루프 뒤에 다음 주석을 추가합니다.

#pylint : disable = unused-variable

for i in range(100): #pylint: disable=unused-variable

생성기 객체는 실제로 변수를 사용하지 않습니다. 그래서 뭔가

list(('' for x in myList))

트릭을해야합니다. x는 생성기 이해도 외부의 변수로 정의되지 않습니다.


_변수에 사람이 읽을 수있는 이름을 지정하려는 경우 변수 이름 앞에 추가 할 수도 있습니다 . 예를 들어, 당신은 사용할 수 있습니다 _foo, _foo1, _anything및 PyLint 불평하지 않습니다. for 루프에서는 다음과 같습니다.

for _something in range(10):
    do_something_else()

편집 : 예제 추가


의견 내가 for 루프에 사용되지 않은 변수를 선언 주위를 얻을 수있는 방법은? (댓글 크기의 란)

파이썬은 생성 된 객체에 대해 동일한 참조를 유지합니다. (가변성에 관계없이) 예를 들어,

In [1]: i = 1

In [2]: j = 1

In [3]: id(i)
Out[3]: 142671248

In [4]: id(j)
Out[4]: 142671248

i와 j 모두 메모리에서 동일한 객체를 참조하는 것을 볼 수 있습니다. 하나의 불변 변수 값을 변경하면 어떻게됩니까?

In [5]: j = j+1

In [6]: id(i)
Out[6]: 142671248

In [7]: id(j)
Out[7]: 142671236

이제 j가 새 위치 (2가 저장된 위치)를 가리 키기 시작하고 i는 여전히 1이 저장된 위치를 가리 킵니다. 평가하는 동안

j = j+1

값은 142671248에서 선택되고 계산되어 (아직 캐시되지 않은 경우) 새 위치 142671236에 배치됩니다. j는 새 위치를 가리 키도록 만들어집니다. 간단히 말해서 불변 변수가 수정 될 때마다 새 복사본이 만들어집니다.

가변성

이와 관련하여 변경 가능한 객체는 거의 다르게 작동합니다. 값이 가리키는 경우

In [16]: a = []

In [17]: b = a

In [18]: id(a)
Out[18]: 3071546412L

In [19]: id(b)
Out[19]: 3071546412L

a와 b는 모두 동일한 메모리 위치를 가리 킵니다.

In [20]: a.append(5)

a가 가리키는 메모리 위치가 수정됩니다.

In [21]: a
Out[21]: [5]

In [22]: b
Out[22]: [5]

In [23]: id(a)
Out[23]: 3071546412L

In [24]: id(b)
Out[24]: 3071546412L

a와 b 모두 여전히 동일한 메모리 위치를 가리 킵니다. 즉, 변경 가능한 변수는 불변 변수의 경우와 같이 변수가 가리키는 값의 복사본을 만드는 대신 변수가 가리키는 동일한 메모리 위치에서 작동합니다.

참고URL : https://stackoverflow.com/questions/5477134/how-can-i-get-around-declaring-an-unused-variable-in-a-for-loop

반응형