python 의 * 와 * * 의 전 참 메커니즘

python 의 매개 변수 전달 체 제 는 값 전달 (int, float 등 값 데이터 형식) 과 인용 전달 (사전, 목록 등 비 값 대상 데이터 형식 을 대표 로) 두 가지 기본 체제 와 편리 한 키워드 전달 특성 (함수 의 형 참 명 을 직접 사용 하여 실제 인삼 의 전달 목 표를 지정 합 니 다. 예 를 들 어 함수 가 def f (a, b, c) 로 정의 되면 호출 할 때 f (b = 1, c = 2, a = 3) 를 사용 할 수 있 습 니 다.의 지정 형 삼 목표 의 전달 방식 은 c 언어 와 같은 형 삼 과 실제 인삼 이 위치 에 따라 대응 하 는 것 에 구 애 받 지 않 아 도 된다)
그 밖 에 python 에 서 는 패키지 방식 의 매개 변수 전달 도 허용 합 니 다. 매개 변수 개수 와 매개 변수 형식의 함수 호출 에 기반 을 다 져 주지 않 았 습 니 다.
def f(*a,**b)
패키지 매개 변수 전달 의 실현 은 함 수 를 정의 할 때 형 삼 앞 에 * 또는 * * 를 추가 하 는 것 입 니 다. * 대응 하 는 형 삼 (위의 a 참조) 은 하나의 원 그룹 (tuple, * * 에 대응 하 는 형 삼 (위의 b 참조) 으로 해 석 됩 니 다. 구체 적 으로 호출 할 때 매개 변 수 는 아래 코드 를 참조 하 십시오.
def f(*a,**b):
    print(a)
    print(b)
a=3
b=4
f(a,b,m=1,n=2)

위 코드 의 실행 결 과 는:
(3, 4) {'n': 2, 'm': 1} 을 보면 키 워드 를 사용 하지 않 고 전달 하 는 변 수 는 원 그룹의 일부분 으로 * a 에 전달 되 고 키 워드 를 사용 하여 전달 하 는 변 수 는 사전 의 일부분 으로 * * b 에 전달 된다.
동시에 tricky 가 있 는 곳 이 있 습 니 다. python 에서 비 키워드 전달 변 수 는 키워드 전달 변수 앞 에 써 야 한다 고 규정 하고 있 기 때문에 혼합 사용 * 와 * * 시 정시 * 형 참 은 * * 형 삼 의 앞 에 있 습 니 다.
그 밖 에 함수 호출 을 할 때 그 와 세트 로 소 포 를 푸 는 방식 이 있 습 니 다.
def f(*a,**b):
    print(a)
    print(b)
c=3
d=4
h=(c,d)
k={"m":1,"n":2}
f(*h,**k)

위 코드 의 출력 은 앞 과 일치 합 니 다.
원 그룹 이나 사전 을 매개 변수 로 입력 할 때 소포 형식의 형 삼 정의 (위 에서 h 를 * a, k 를 * * b 에 전달 하 는 경우) 에 적합 하려 면 원 그룹 용 *, 사전 은 * * 의 방식 으로 '소포 풀기' 로 전달 하면 됩 니 다.
실제로 f 를 호출 할 때 * 를 사용 하 는 것 은 Python 에 게 알 리 기 위해 서 입 니 다. 실제 인삼 h 를 분 산 된 2 개의 요소 c 와 d 로 분리 하여 각각 전달 하고 싶 습 니 다.원 그룹 으로 정 의 됨) 도 적 용 됩 니 다.
def f(c,d,n,m):
    print(c)
    print(d)
    print(m)
    print(n)
a=3
b=4
h=[a,b]
k={"m":1,"n":2}
f(*h,**k)

위의 출력 은?
3 4 1 2
앞에서 말 한 것 과 일치 하기 때문에 * * k 라 는 사전 의 소 포 를 풀 려 면 함수 의 형 참 명 과 사전 의 key 값 이 대응 해 야 합 니 다.
위의 예 에서 def f (c, d, n, m) 의 n 을 다른 자모 로 바 꾸 면 잘못 보고 합 니 다.
소포 가 전 달 된 후 함 수 를 호출 할 때 임의의 매개 변 수 를 전달 할 수 있 습 니 다. 원본 과 사전 은 모두 len 방법 으로 요소 의 개 수 를 얻 을 수 있 기 때문에 함 수 를 작성 할 때 이 정보 에 따라 서로 다른 매개 변수 수 를 처리 할 수 있 습 니 다.
본 고 는 블 로그 에서 전 환 됩 니 다: python 의 * 와 * 매개 변수 전달 메커니즘

좋은 웹페이지 즐겨찾기