찾다

 >  Q&A  >  본문

关于python*和**的问题

*和**为可变形参,但是平时在使用的时候感觉很少能有使用到的情况,有些不是很理解它们的用法和用处场景?
而且形参不是可以传递任意类型么?这样我写成:


a = (1,2,3,4)
def test(a):
    print a
    print a[1]

加不加*貌似没什么区别?字典也是一样只不过变成print['keyname']而已。
那么*和**这玩意到底有什么用呢?

PHP中文网PHP中文网2889일 전216

모든 응답(1)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-18 09:17:29

    보충제

    우리가 쓸모없다고 느끼는 이유는 우리가 종종 생각하는 상황에 빠지기 때문인 것 같아요:

    함수를 쓰는 사람과 함수를 사용하는 사람은 같은 사람, 바로 나입니다

    작성자와 사용자가 동일하다면 당연히 *를 선택하든, 목록을 직접 사용하든

    상관없이 인터페이스를 디자인할 수 있습니다.

    하지만 오늘날에는 다른 사람의 API를 사용하거나 다른 사람이 사용할 함수를 작성할 때 그다지 유연성이 없습니다

    이때 *가 우리에게 많은 도움이 될 수 있습니다


    이 두 가지가 꽤 유용하네요!

    시연할 몇 가지 예를 들어보세요

    함수 인수에 사용되는 경우

    함수가 있다고 가정해보세요 intro:

    으아악

    오늘은 목록 데이터 lst와 dict 데이터 dic를 소개하겠습니다:

    으아악

    * 또는 ** 대신 다음을 수행할 수 있습니다.

    으아악

    *** 사용:

    으아악

    함수 매개변수에 사용되는 경우

    오늘은 추가 기능을 작성해 보겠습니다.

    으아악

    3개의 숫자를 곱하도록 확장하려는 경우:

    으아악

    두 가지 질문이 있습니다.

    • 하나는 매개변수 목록이 매우 길 수 있다는 점입니다

    • 하나는 Python이 다중 로드를 허용하지 않기 때문에 동일한 함수 이름을 사용할 수 없다는 것입니다

    하지만 * 이 문제를 해결할 수 있습니다.

    으아악

    물론 여기에서 매개변수를 리스트나 튜플로 설계할 수도 있다고 생각할 수도 있지만 때로는 이 접근 방식이 더 편리할 수도 있습니다. print(Python3):

    으아악

    이것이 바로 컨셉입니다

    둘째, 이 접근 방식은 데코레이터 작성의 기초입니다.

    으아악

    이 방법을 사용하지 않으면 수정하려는 기능이 가질 수 있는 다양한 매개 변수를 처리할 수 없기 때문입니다.

    튜플 언패킹에 사용되는 경우(Python3)

    이 기능은 매우 유용합니다:

    으아악

    결론

    사실 이보다 더 멋진 것들이 여러분이 발견하기를 기다리고 있습니다!


    내가 답변한 질문: Python-QA

    회신하다
    0
  • 취소회신하다