다음과 같은 목록 이해력 (예 :)이있는 경우 :
['' for x in myList]
목록의 모든 요소에 대해 빈 문자열이있는 새 목록을 효과적으로 만들려면 x
. 사용하지 않는 x
변수 를 선언 할 필요가 없도록 이것을 작성하는 더 깨끗한 방법이 있습니까?
답변:
_
for 루프 및 튜플 할당에서 무시 된 멤버의 표준 자리 표시 자 이름입니다. 예 :
['' for _ in myList]
[a+d for a, _, _, d, _ in fiveTuples]
BTW 목록은 목록 이해없이 작성 될 수 있습니다 (문자열, 정수 등과 같은 불변 멤버 목록을 만들고 싶다고 가정).
[''] * len(myList)
a=[[]]*4;a[0].append(5);print(a)
for
예를 들어 중첩 루프를 수행하는 것이 중요합니까 ? 아니면 for _ in range(...)
내가 말하고 싶다면 _, var = f(x)
? 두 _
변수 가 혼동 될까요?
아니요. Zen이 말했듯이 특별한 경우는 규칙을 위반할만큼 특별하지 않습니다. 반복되는 항목의 항목을 사용하지 않는 루프와 압축을 풀 "대상"이 있다는 규칙이 특별한 경우입니다.
그러나 _
일반적으로 "의도적으로 사용되지 않은"것으로 이해되는 변수 이름으로 사용할 수 있습니다 (PyLint 등도이를 알고 존중합니다).
C: 10,24: Invalid variable name "_" (invalid-name)
당신이에 추가하지 않는 한 good-names
당신에 .pylintrc
.
생성기 객체는 실제로 변수를 사용하지 않습니다. 그래서 뭔가
list(('' for x in myList))
트릭을해야합니다. x는 생성기 이해도 외부의 변수로 정의되지 않습니다.
의견 내가 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 모두 여전히 동일한 메모리 위치를 가리 킵니다. 즉, 변경 가능한 변수는 변경 불가능한 변수의 경우와 같이 변수가 가리키는 값의 복사본을 만드는 대신 변수가 가리키는 동일한 메모리 위치에서 작동합니다.