(이것은 모두 Python 3.5.2에 있습니다.)
PEP 448 하단에는 다음이 표시됩니다.
과 같은 함수 호출의 브라케팅되지 않은 이해
f(x for x in it)
는 이미 유효합니다.
이것은 흥미 롭습니다. 다음 기능을 정의하면 :
def f(a, b, c):
return a + b + c
그 문구는 저를 그렇게 생각하게합니다 f(thing for thing in [1, 2, 3]) == 6
. 그러나 실제로 나는 다음과 같이 얻는다.
>>> f(thing for thing in [1, 2, 3])
TypeError: f() missing 2 required positional arguments: 'b' and 'c'
즉 전체 생성기 표현식이 a
.
그렇다면 PEP 448의이 문장은 무엇을 의미합니까? 생성기 표현식을 인수로 전달할 수 있다고?
Python을 사용하면 추가 괄호없이 단일 생성기 표현식을 호출중인 함수에 전달할 수 있습니다. 예를 들면 :
foo(x for x in range(10))
대부분 다음과 같습니다.
genexp = (x for x in range(10)) # parentheses are necessary here
foo(genexp)
함수 호출에 전달하는 다른 인수가있는 경우 생성기 표현식을 정의 할 때 괄호가 필요합니다 (예 : foo(w, (x for x in range(10)), y, z)
두 번째 인수가 x
's의 생성자 표현식 ).
PEP는 풀기 구문의 추가 확장이 해당 컨텍스트에서 혼란 스러울 수 있다고 전달하면서 언급했습니다. 새로운 종류의 생성기 표현 (*x for x in nested)
이 합법적이라면 (최종 PEP의 일부가 아니지만 잠시 동안 고려 중이 었음) 어떻게 foo(*x for x in nested)
작동 해야 합니까? foo((*x for x in nested))
(새로운 "flattening"을 포함하는 단일 생성기 표현식으로 호출)과 동등 합니까 *
, 아니면 foo(*(x for x in nested))
(지금 합법적 인) 의미합니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다