[python] 튜플을 인수로 확장

파이썬 튜플을 함수로 확장하는 방법이 있습니까?

예를 들어, 여기 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")

나는 하나가 정의 할 수 있습니다 알고 myfunmyfun((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통화 를 저장 합니다.


답변