*和**为可变形参,但是平时在使用的时候感觉很少能有使用到的情况,有些不是很理解它们的用法和用处场景?
而且形参不是可以传递任意类型么?这样我写成:
a = (1,2,3,4)
def test(a):
print a
print a[1]
加不加*貌似没什么区别?字典也是一样只不过变成print['keyname']而已。
那么*和**这玩意到底有什么用呢?
巴扎黑2017-04-18 09:17:29
우리가 쓸모없다고 느끼는 이유는 우리가 종종 생각하는 상황에 빠지기 때문인 것 같아요:
함수를 쓰는 사람과 함수를 사용하는 사람은 같은 사람, 바로 나입니다
작성자와 사용자가 동일하다면 당연히 *
를 선택하든, 목록을 직접 사용하든
하지만 오늘날에는 다른 사람의 API를 사용하거나 다른 사람이 사용할 함수를 작성할 때 그다지 유연성이 없습니다
이때 *
가 우리에게 많은 도움이 될 수 있습니다
이 두 가지가 꽤 유용하네요!
시연할 몇 가지 예를 들어보세요
함수가 있다고 가정해보세요 intro
:
오늘은 목록 데이터 lst
와 dict 데이터 dic
를 소개하겠습니다:
*
또는 **
대신 다음을 수행할 수 있습니다.
*
및 **
사용:
오늘은 추가 기능을 작성해 보겠습니다.
으아악3개의 숫자를 곱하도록 확장하려는 경우:
으아악두 가지 질문이 있습니다.
하나는 매개변수 목록이 매우 길 수 있다는 점입니다
하나는 Python이 다중 로드를 허용하지 않기 때문에 동일한 함수 이름을 사용할 수 없다는 것입니다
하지만 *
이 문제를 해결할 수 있습니다.
물론 여기에서 매개변수를 리스트나 튜플로 설계할 수도 있다고 생각할 수도 있지만 때로는 이 접근 방식이 더 편리할 수도 있습니다. print
(Python3):
이것이 바로 컨셉입니다
둘째, 이 접근 방식은 데코레이터 작성의 기초입니다.
으아악이 방법을 사용하지 않으면 수정하려는 기능이 가질 수 있는 다양한 매개 변수를 처리할 수 없기 때문입니다.
이 기능은 매우 유용합니다:
으아악사실 이보다 더 멋진 것들이 여러분이 발견하기를 기다리고 있습니다!
내가 답변한 질문: Python-QA