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 모두 여전히 동일한 메모리 위치를 가리 킵니다. 즉, 변경 가능한 변수는 불변 변수의 경우와 같이 변수가 가리키는 값의 복사본을 만드는 대신 변수가 가리키는 동일한 메모리 위치에서 작동합니다.
'programing' 카테고리의 다른 글
C # 용 액터의 좋은 구현이 있습니까? (0) | 2020.10.29 |
---|---|
Ruby에서 하나의 명령으로 디렉토리 / 파일 / 심볼릭 링크가 있는지 확인하는 방법 (0) | 2020.10.29 |
XAML에서 이미지 리소스를 참조하는 방법은 무엇입니까? (0) | 2020.10.29 |
Java에서 목록을 직렬화하는 방법은 무엇입니까? (0) | 2020.10.28 |
ImageView에 대해 어떻게 setLayoutParams ()를 설정합니까? (0) | 2020.10.28 |