Python 프로그래밍 학습 : 함수를 더 유연하게 만드는 * args 및 ** kwargs (매개 변수 수가 다른 설계 함수) 소개, 사용 방법 및 클래식 사례에 대한 자세한 가이드

Python 프로그래밍 학습 : 함수를 더 유연하게 만드는 * args 및 ** kwargs (매개 변수 수가 다른 설계 함수) 소개, 사용 방법 및 클래식 사례에 대한 자세한 가이드

 

 

 

목차

* args 및 ** kwargs 소개 (다른 수의 매개 변수 함수 설계)

1. * 사용법 : 수업에서 농구를 배우기 위해 등록한 급우를 세는데 이름이 몇 개 있는지 모르겠습니다.

2. ** 사용법 : 특정 사람의 취미를 세지 만이 사람이 얼마나 많은 취미를 가지고 있는지 모릅니다.

* args 및 ** kwargs 함수 정의 사용 방법-매개 변수 수가 다른 함수를 설계하는 방법

T1, 가장 기본적인 접근 방식-전달할 매개 변수로 목록 생성 (모든 값을 열거 할 수있는 경우에 적합)

T2 : * args 및 ** kwargs, 가변 수의 위치 매개 변수 전달의 주요 용도

1. * args (이름없는 매개 변수의 수를 나타내는 목록 / 프라임 조상 형식)의 소개 및 사용

(1) * args 소개 및 사용법

(2) 위의 문제 해결-매개 변수 수가 다른 함수를 설계하는 방법

2. ** kwargs 소개 및 사용법 (사전 형태로, 해당 키워드 매개 변수가 하나씩 있음을 의미)

(1) ** kwargs 소개 및 사용법

(2) 위의 문제 해결-매개 변수 수가 다른 함수를 설계하는 방법

지식 포인트 확장 : 함수의 매개 변수 순서-가변 개수의 위치 매개 변수와 명명 된 매개 변수를 받아들이는 방법?

1. arg, * args 및 ** kwargs-args 및 kwargs의 혼합 사용 소개를 결합하여 매개 변수를 여러 개 전달할 수 있습니다. 이는 매개 변수를 알 수없는 경우 매우 효과적이며 동시에 확장 성을 향상시킵니다. 기능.

(1) 기본 매개 변수가 기능 매개 변수에 포함되지 않은 경우

(2) 기능 매개 변수에 기본 매개 변수가 포함 된 경우

(3) 위치 매개 변수, 기본 매개 변수, * args *, * kwargs 매개 변수가 동시에 포함 된 경우 : 올바른 순서는 위치 매개 변수 → * args * → 기본 매개 변수 → * kwargs)

2. 포장 풀기 별표 연산자 * 및 **를 깊이 이해하십시오.

(1) 압축 해제 연산자 *를 사용하여 목록 출력 내용 자체에 적용 -print ()는 목록을 먼저 압축 해제합니다.

(2) 여러 개봉 연산자를 사용하는 방법 *

(3) 압축 풀기 연산자 *를 사용하여 목록을 세 부분 (첫 번째 값, 마지막 값 및 그 사이의 모든 값)으로 나눕니다.

(4) unpacking 연산자 *를 사용하여 두 목록 목록을 병합하고 *를 사용하여 반복 가능한 객체 (목록 및 문자열)의 압축을 풉니 다.

(5) unpacking 연산자 *를 사용하여 문자열의 압축을 풉니 다. 두 가지 방법

(6) unpack 연산자를 사용하여 ** unpack dictionary object-** 두 dict 사전 병합

* args 및 ** kwargs 함수 호출 사용


 

 

 

* args 및 ** kwargs 소개 (매개 변수 수가 다른 설계 함수)

        * args와 ** kwargs는 파이썬 프로그래밍 에서 변수 매개 변수의 두 가지 형태, 둘은 변수를 나타내며 가변 길이 매개 변수를받을 수 있음을 나타냅니다 . 알아야 할 것은

  • args 및 kwargs의 이름은 중요하지 않습니다. 규칙에 따라 각각 "매개 변수"및 "키워드 매개 변수"를 나타내는 이름 지정 규칙이므로 * ar 및 *와 같은 다른 적절한 매개 변수 이름을 사용할 수 있습니다. * kw;
  • * args는 ** kwargs 앞에 위치해야합니다. 위치 매개 변수는 키워드 인수 앞에 있기 때문 입니다.
  * args ** kwargs
한 문장 설명 매개 변수 를 튜플에 압축하고 함수 본문을 호출합니다. 함수 호출의 본문에 dict에 대한 매개 변수 패키지 키워드 인수 입니다.
풍모

함수에 전달 된 다수의 매개 변수는 함수 의 다른 매개 변수 수, 알 수없는 매개 변수의 수, 짝수 길이를 0으로 설정할 수 있습니다. * args는 ** kwags 이전이어야합니다. 그렇지 않으면 구문 오류가 발생합니다.
일반적으로 함수 정의함수 호출에 사용 됩니다.

args와 kwargs의 조합은 매개 변수를 얼마든지 전달할 수 있습니다. 이는 매개 변수를 알 수 없을 때 매우 효과적이며 동시에 함수의 확장 성을 강화합니다.

이름에서 알 수 있듯이 args는 위치 매개 변수를 의미하는 인수의 약어입니다. kwargs는 키워드 인수를 의미하는 키워드 인수의 약어입니다.
용법 얼마나 많은 매개 변수를 함수에 전달할지 확실하지 않거나 목록과 튜플 형태로 매개 변수를 함수 에 전달하려면 * args를 사용해야합니다. 얼마나 많은 키워드 매개 변수가 함수에 전달되어야하는지 확실하지 않거나 사전의 값을 키워드 매개 변수 로 사용하여 매개 변수 를 함수 전달하려면 ** kwargs를 사용해야합니다.
기억 args 에 튜플에 패키지 된 키가 포함되어 있지 않습니다. kwargs는 키, 즉 패키지 키워드 매개 변수를 포함합니다.
def a_function(*args, **kwargs):
    pass

 

1. * 사용법 : 수업에서 농구를 배우기 위해 등록한 급우를 세는데 이름이 몇 개 있는지 모르겠습니다.

# 1、*用法:统计一个班内报名学篮球的同学,但是不知道有多少个人名
def CountLearnBasketballs(*basketNums):
    print("People who study basketball have:" + ", ".join(basketNums))


# (1)、用在函数定义中
CountLearnBasketballs('马云','马化腾','李彦宏','刘强东','王兴','丁磊')
# (2)、用在函数调用中
basketNames = ('马云','马化腾','李彦宏','刘强东','王兴','丁磊')
CountLearnBasketballs(*basketNames)


 

2. ** 사용법 : 특정 사람의 취미를 세지 만이 사람이 얼마나 많은 취미를 가지고 있는지 모릅니다.

# 2、**用法:统计某个人的爱好,但是不知道这个人有多少种爱好
def CountHobbies(**hobbies):
    print("This person's hobbies include...")
    for category, fave in hobbies.items():
        print(f"{category}: {fave}")

CountHobbies(sports='basketball', arts='drawing', learning='reading')

 

 

* args 및 ** kwargs 함수 정의 사용 방법-매개 변수 수가 다른 함수 를 설계하는 방법

T1, 가장 기본적인 접근 방식-전달할 매개 변수로 목록 생성 (모든 값을 열거 할 수있는 경우에 적합)

def SUMListsByLists(MoreParasLists):
    sum_lists = 0
    for a in MoreParasLists:
        sum_lists += a
    return sum_lists
MoreParasLists = [1, 2, 3, 4, 5, 6]
print(SUMListsByLists(MoreParasLists))



21

 

 

 

T2 : * args 및 ** kwargs, 가변 수의 위치 매개 변수 전달의 주요 용도

1. * args (이름없는 매개 변수의 수를 나타내는 목록 / 프라임 조상 형식)의 소개 및 사용

(1) * args 소개 및 사용법

        * args는 매개 변수를 튜플에 압축하고 함수 본문을 호출하는 데 사용되며 키워드가 아닌 매개 변수이며 튜플에 사용됩니다. 이때 함수에 목록을 전달하는 대신 위치 매개 변수를 수신 합니다. 원칙은 세 가지 위치 매개 변수전달 하는 것입니다 .

  • 위의 SUMListsByArgs는 모든 입력 매개 변수를 가져 와서 간단한 반복 가능한 객체로 압축합니다.
  • 객체의 이름은 args 또는 다른 이름 args123이 될 수 있으며 주로 압축 해제 연산자 인 "*"기호가 접두사로 붙습니다. 그러나 반복 가능한 객체는 목록 (변수)이 아니라 튜플 (불변) 입니다.
def args01(*args):
    print(args, type(args))
args01('一个处女座的程序猿')

def args02(x, y, *args):
    print(x, y, args)
args02(1, 2, 3, 4, '我是','一个处女座的程序猿')







('一个处女座的程序猿',) <class 'tuple'>
1 2 (3, 4, '我是', '一个处女座的程序猿')

 

 

(2) 위의 문제 해결-매개 변수 수가 다른 함수를 설계하는 방법

def SUMListsByArgs(*args):
    sum_lists = 0
    # Iterating over the Python args tuple
    for a in args:
        sum_lists += a
    return sum_lists
print(SUMListsByArgs(1, 2, 3, 4, 5, 6))




21

 

 

2. ** kwargs 소개 및 사용법 (사전 형태로, 해당 키워드 매개 변수가 하나씩 있음을 의미)

(1) ** kwargs 소개 및 사용법

     ** kwargs 는 매개 변수를 압축하고 키워드 매개 변수는 dict 형식으로 함수 본문에 호출됩니다 . 실제로 ** kwargs는 * args와 유사하게 작동하지만 위치 매개 변수를받는 대신 키워드 (키워드) 매개 변수 (명명 된 매개 변수라고도 함 )를 수신합니다 . 유사하게, 객체는 kwargs 또는 다른 이름 kwargs123으로 명명 될 수 있으며 주로 압축 해제 연산자 인 "**"로 시작됩니다. 그러나 반복 가능한 객체는 사전 dict이므로 .values ​​()를 사용하여 반환 값을 가져와야합니다 .

def kwargs01(**kwargs):
    print( kwargs, type(kwargs))
kwargs01(a='一个处女座的程序猿')

def kwargs02(**kwargs):
    print(kwargs)
kwargs02(a='我是', b='一个处女座的程序猿', c='!')






{'a': '一个处女座的程序猿'} <class 'dict'>
{'a': '我是', 'b': '一个处女座的程序猿', 'c': '!'}

 

 

(2) 위의 문제 해결-매개 변수 수가 다른 함수를 설계하는 방법

def StrConnect(**kwargs):
    strs01='';strs02=''
    # Iterating over the Python kwargs dictionary
    for b in kwargs:
        strs01 += b
    for a in kwargs.values():
        strs02 += a
    print('keys集合:',strs01)
    print('values集合:',strs02)
    return strs02
print(StrConnect(a="大家好", b=",", c="我是", d="一个处女座的程序猿", e="!"))





keys集合: abcde
values集合: 大家好,我是一个处女座的程序猿!
大家好,我是一个处女座的程序猿!

 

 

지식 포인트 확장 : 함수의 매개 변수 순서-가변 개수의 위치 매개 변수와 명명 된 매개 변수를 받아들이는 방법?

1. arg, * args 및 ** kwargs-args 및 kwargs의 혼합 사용 소개를 결합하여 매개 변수를 여러 개 전달할 수 있습니다. 이는 매개 변수를 알 수없는 경우 매우 효과적이며 동시에 확장 성을 향상시킵니다. 기능.

      args와 kwargs의 조합은 매개 변수를 얼마든지 전달할 수 있습니다. 이는 매개 변수를 알 수 없을 때 매우 효과적이며 동시에 함수의 확장 성을 강화합니다.

  • 순서는 매우 중요합니다. 기본값이 아닌 매개 변수는 기본 매개 변수보다 먼저 처리되어야하므로 * args는 ** kwargs 앞에옵니다.
  • 매개 변수 의 올바른 순서 : 위치 매개 변수 → * args 매개 변수 → ** kwargs 매개 변수, 비 기본 매개 변수 → 기본 매개 변수; 세 매개 변수 arg, * args, ** kwargs의 위치는 일정해야합니다.
def VariableParasNum_Test(arg,*args,**kwargs):
    print('VariableParasNum_Test')
    print(arg,args,kwargs)
VariableParasNum_Test(1,2,3,4,a=5, b=6, c=7)



VariableParasNum_Test
1 (2, 3, 4) {'a': 5, 'b': 6, 'c': 7}

 

(1) 기본 매개 변수가 기능 매개 변수에 포함되지 않은 경우

그들 중

  • x는 1이고, y는 2이며;
  • 3,4는 args에 주어집니다. 즉, args = (3,4);
  • a = 5, b = 6,
  • y = 7은 사전 형식으로 kwargs에 전달됩니다.
def VariableParasNum_NoDefault_Test(x, y, *args,**kwargs):
    print('VariableParasNum_NoDefault_Test')
    print(x, y, args, kwargs)
VariableParasNum_NoDefault_Test(1,2,3,4,a=5,b=6,c=7)    


VariableParasNum_NoDefault_Test
1 2 (3, 4) {'a': 5, 'b': 6, 'c': 7}


 

(2) 기능 매개 변수에 기본 매개 변수가 포함 된 경우

위치 매개 변수, 기본 매개 변수 및 * args 매개 변수가 동시에 있습니다 . 올바른 순서는 다음 두 경우입니다. 위치 매개 변수가 모두 맨 위에 있음을 기억하십시오.

T1, (위치 매개 변수 → 기본 매개 변수 → * args)

그들 중

  • x는 1이고,
  • y = 1의 값은 2로 대체됩니다.
  • 3,4,5는 모두 args에 주어집니다. 즉, args = (3,4,5)
def VariableParas_IncludeDefault_Test(x,y=1,*args):
    print('VariableParas_IncludeDefault_Test')
    print(x,y,args)
VariableParas_IncludeDefault_Test(1,2,3,4,5)


VariableParas_IncludeDefault_Test
1 2 (3, 4, 5)

 

T2, (위치 매개 변수 → * args → 기본 매개 변수)

그들 중

  • x는 1이고,
  • 2,3,4,5는 args에 주어집니다. 즉, args = (2,3,4,5)
  • y는 항상 1입니다.
def ArgsAndDefault_Test(x,*args,y=1):
     print('ArgsAndDefault_Test')
     print(x,args,y)
ArgsAndDefault_Test(1,2,3,4,5)   


ArgsAndDefault_Test
1 (2, 3, 4, 5) 1

 

 

(3) 위치 매개 변수, 기본 매개 변수, * args *, * kwargs 매개 변수가 동시에 포함 된 경우 : 올바른 순서는 위치 매개 변수 → * args * → 기본 매개 변수 → * kwargs)

그들 중

  • x는 1, y는 2
  • 3,4는 args에 주어집니다. 즉, args = (3,4)
  • a와 b는 각각 5와 6으로 대체됩니다.
  • y = 7은 사전 형식으로 kwargs에 전달됩니다.
def VariableParas_IncludeAll_Test(x, y, *args, a=8, b=9, **kwargs):
    print('VariableParas_IncludeAll_Test')
    print(x, y, args, a, b, kwargs)
VariableParas_IncludeAll_Test(1,2,3,4,a=5,b=6,c=7)


VariableParas_IncludeAll_Test
1 2 (3, 4) 5 6 {'c': 7}

 

 

 

2. 포장 풀기 별표 연산자 * 및 **를 깊이 이해하십시오.

압축 해제 연산자는 python 에서 반복 가능한 객체의 값압축 해제 하는 연산자입니다 .

  • * : python에서 제공하는 모든 반복 가능한 객체에 사용할 수있는 단일 별표 연산자 .
  • ** : 두 개의 별표 연산자 는 사전에서만 사용할 수 있습니다 .

 

(1) 압축 해제 연산자 *를 사용하여 목록 출력 내용 자체에 적용 -print ()는 목록을 먼저 압축 해제합니다.

이해 : print ()는 입력으로 목록 대신 세 가지 다른 매개 변수를 입력으로 취했습니다. 패키지 연산자 (*)는 함수 정의가 아니라 함수를 호출하는 데 사용됩니다. 여기서 print () 는 목록의 단일 항목을 매개 변수로 취합니다 . 아래와 같이 출력은 더 이상 목록 자체가 아니라 목록의 내용입니다.

lists01 = [1, 2, 3, 4, 5, 6]
print(lists01)
print(*lists01)



[1, 2, 3, 4, 5, 6]
1 2 3 4 5 6

 

(2) 여러 개봉 연산자를 사용하는 방법 *

* 연산자를 사용하여 목록의 압축을 풀고 각 개별 매개 변수를 전달하는 것처럼 매개 변수로 함수에 전달합니다. 즉, 여러 압축 해제 연산자사용 하여 여러 목록에서 값을 가져오고 함수를 매개 변수로 전달할 수 있습니다.

def SUMListsByArgs(*args):
    res = 0
    for x in args:
        res += x
    print(res)
    return res

list01 = [1]
list02 = [2, 3]
list03 = [4, 5, 6]
SUMListsByArgs(*list01, *list02, *list03)






21

 

 

(3) 압축 풀기 연산자 *를 사용하여 목록을 세 부분 (첫 번째 값, 마지막 값 및 그 사이의 모든 값)으로 나눕니다.

하나의 변수는 a에 할당되고 마지막 변수는 c에 할당되고 다른 값은 목록 b에 압축됩니다.

lists = [1, 2, 3, 4, 5, 6]
first, *middle, last = lists
print(first, middle, last)




1 [2, 3, 4, 5] 6

 

 

(4) unpacking 연산자 *를 사용하여 두 목록 목록을 병합하고 *를 사용하여 반복 가능한 객체 (목록 및 문자열)의 압축을 풉니 다.

list01 = [1, 2, 3]
list02 = [4, 5, 6]
list03 = [*list01, *list02]
print(list03)



[1, 2, 3, 4, 5, 6]

 

 

(5) unpacking 연산자 *를 사용하여 문자열의 압축을 풉니 다. 두 가지 방법

a   = [*"一个处女座的程序猿"]    # 直接解包
*b, =   "一个处女座的程序猿"     # *将字符串指定到一个新的list 
print(a)
print(b)


['一', '个', '处', '女', '座', '的', '程', '序', '猿']
['一', '个', '处', '女', '座', '的', '程', '序', '猿']

 

 

(6) unpack 연산자를 사용하여 ** unpack dictionary object-** 두 dict 사전 병합

dict01 = {'AI':1, 'ML':2, 'DL':3}
dict02 = {'CV':4, 'NLP':4, 'DS':4}
dict03 = {**dict01, **dict02}
print(dict03) 



{'AI': 1, 'ML': 2, 'DL': 3, 'CV': 4, 'NLP': 4, 'DS': 4}


 

 

* args 및 ** kwargs 함수 호출 사용

       * args 및 ** kwargs는 함수 정의뿐만 아니라 함수 호출 에서도 사용할 수 있습니다 . 호출에 사용되면 튜플의 패킹 및 언 패킹과 유사하게 패킹 (패킹) 및 언 패킹 (언 패킹)과 동일합니다.

def unpackByargs(arg1, arg2, arg3):
    print(arg1, arg2, arg3)
args = ("一个处女座的程序猿", 2021, 315)
unpackByargs(*args)




一个处女座的程序猿 2021 315

 

 

 

 

추천

출처blog.csdn.net/qq_41185868/article/details/114849352