파이썬 튜플을 함수로 확장하는 방법이 있습니까?
예를 들어, 여기 expand()
마술이 있습니다.
some_tuple = (1, "foo", "bar")
def myfun(number, str1, str2):
return (number * 2, str1 + str2, str2 + str1)
myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
나는 하나가 정의 할 수 있습니다 알고 myfun
로 myfun((a, b, c))
하지만, 물론 레거시 코드가있을 수 있습니다. 감사
답변
myfun(*some_tuple)
요청한 내용을 정확하게 수행합니다. *
오퍼레이터는 단순히 튜플 (또는 반복 가능한)를 풀어서 함수의 인수 위치로 전달한다. 인수 풀기 에 대해 자세히 알아보십시오 .
답변
인수 목록의 일부를 확장 할 수도 있습니다.
myfun(1, *("foo", "bar"))
답변
파이썬 튜토리얼 섹션 4.7.3 및 4.7.4를 살펴보십시오 . 튜플을 인수로 전달하는 방법에 대해 설명합니다.
또한 튜플을 사용하고 시퀀스를 전달하는 대신 명명 된 매개 변수를 사용하고 사전을 전달하는 것을 고려할 것입니다. 위치가 직관적이지 않거나 여러 매개 변수가있을 때 위치 인수를 사용하는 것이 나쁜 습관이라는 것을 알았습니다.
답변
이것이 함수형 프로그래밍 방법입니다. 구문 설탕에서 튜플 확장 기능을 해제합니다.
apply_tuple = lambda f, t: f(*t)
사용법 예 :
from toolz import *
from operator import add, eq
apply_tuple = curry(apply_tuple)
thread_last(
[(1,2), (3,4)],
(map, apply_tuple(add)),
list,
(eq, [3, 7])
)
# Prints 'True'
카레 재정의는 apply_tuple
장기적으로 많은 partial
통화 를 저장 합니다.