Python 매개 변수 유형 및 일반적인 구덩이 설명

안내 문
이전에 몇 번 이나 매개 변수 유형 에 관 한 구 덩이 를 만 났 고 일부 매개 변수 유형 을 헷 갈 리 기 쉬 웠 기 때문에 지금 은 매개 변수 유형 에 대한 정리 기록 과 이전에 구 덩이 를 밟 은 경험 에 대한 분석 을 해 보 겠 습 니 다.
매개 변수 유형
우선 Python 에 관 한 매개 변수 유형 과 실제 운용 과 원 리 를 열거 합 니 다.
위치 매개 변수(필수 매개 변수)기본 매개 변수
가 변 매개 변수
키워드 파라미터
위치 매개 변수(필수 매개 변수)
우선 위치 매개 변수 이 고 필수 매개 변수 라 고도 불 립 니 다.위치 매개 변 수 는 이해 하기 쉽 습 니 다.이 점 만 기억 하 세 요.
함수 정의 시 이 매개 변수 이름 을 직접 지정 하고 호출 할 때 매개 변수의 위치 순서에 따라 매개 변수 값 을 순서대로 부여 합 니 다.
예시:

def person_info(name, age):
  print("My name is %s, I am %s years old" % (name, age))

person_info("zhangsan", "49")  
# name,age      ,      ,          。
기본 매개 변수
기본 적 인 매개 변수,기본 적 인 매개 변 수 는 많은 편리 한 부분 이 존재 하지만 동시에 많은 구덩이 도 존재 합 니 다.나중에 우 리 는 왜 이런 구덩이 가 존재 하 는 지 자세히 분석 하고 다음 과 같은 몇 가지 점 을 주의해 야 합 니 다.
4.567917.하나 이상 의 매개 변수 에 기본 값 을 지정 할 수 있 습 니 다.함 수 를 호출 할 때 이 매개 변수 값 을 입력 하지 않 아 도 함수 호출 의 난이 도 를 크게 낮 출 수 있 습 니 다4.567917.기본 매개 변수의 기본 값 대신 들 어 오 는 매개 변수 값 을 사용 해 야 할 때 매개 변수 위치 순서에 따라 들 어 갈 수 있 고 매개 변수 이름 도 지정 할 수 있 습 니 다예시:

def person_info(name, age, sex='man'):
  print("My name is %s, I am %s years old, I am %s" % (name, age, sex))

person_info('zhangsan', '15')
person_info('lisi', '15', 'women')
person_info('lisi', '20', sex='women')
가 변 매개 변수
가 변 매개 변 수 는 말 그대로 들 어 오 는 매개 변수 수량 이 가 변 적 인 것 입 니 다.
가 변 매개 변 수 는 실제 적 으로 들 어 오 는 수량 은 여러 개 일 수도 있 지만 없 을 수도 있다.
가 변 매개 변 수 는 함수 내부 로 들 어 갈 때 tuple 형식 입 니 다.
예시:

def add(*numbers):
  sum = 0
  for i in numbers:
    sum+=i
  return sum

print(add(1,3,4,2,1,4,1,3)) 

numbers=[2,3,4,1,5]
add(*numbers)
#        list ,  list            ,   
키워드 매개 변수
가 변 매개 변수 가 0 개 또는 임의의 매개 변 수 를 입력 할 때 이 가 변 매개 변 수 는 함수 호출 시 자동 으로 tuple 로 조립 됩 니 다.키워드 매개 변 수 는 0 개 또는 매개 변수 이름 을 포함 하 는 매개 변 수 를 입력 할 수 있 습 니 다.이 키워드 매개 변 수 는 함수 내부 에서 하나의 dict 로 자동 으로 조립 됩 니 다.함 수 를 호출 할 때 필수 인자 만 입력 할 수 있 습 니 다.
확장 함수 기능,**kwargs
예시:

def person_info(**kw):
  for key,value in kw.items():
    print(key, value)

person_info(name='zhangsan', age=15)
person = {'name': 'zhangsan', 'age': 13}
person_info(**person)
명명 키워드 파라미터
키워드 매개 변수 에 대해 함수 호출 자 는 제 한 받 지 않 는 키워드 매개 변 수 를 입력 할 수 있 습 니 다.그러나 어떤 매개 변수 가 들 어 왔 는 지 에 대해 서 는 함수 내부 분석 을 통 해 검 사 를 해 야 한다.그래서 이름 키워드 인 자 는 들 어 오 는 매개 변 수 를 제한 하 는 이름 입 니 다.제 가 이름 을 지은 키워드 인 자 를 전달 할 수 밖 에 없습니다.
4.567917.키워드 매개 변 수 는 특수 구분자*가 필요 합 니 다.구분자 뒤의 매개 변 수 는 키워드 매개 변수 로 간 주 됩 니 다4.567917.함수 에 가 변 적 인 매개 변수 가 존재 할 때 뒤에 따 르 는 이름 키워드 매개 변 수 는*특수 구분자―"*가 필요 하지 않 습 니 다4.567917.핵심 매개 변 수 는 기본 값 이 있어 서 호출 을 간소화 할 수 있 습 니 다4.567917.명명 관건 적 인 매개 변 수 는 하나의 매개 변수 이름 을 입력 해 야 합 니 다.이것 은 위치 매개 변수 와 다 릅 니 다.인자 이름 이 들 어 오지 않 으 면 호출 이 잘못 되 었 습 니 다예시:

def person_info(name, *, age, sex):
  print(name, age, sex)

def person_info2(name, *args, age, sex):
  for i in args:
    print(i)
  print(name, age, sex)

person_info('zhangsan', age=12, sex='man')
person_info2('zhangsan', 'sksks', 'ssk', age=13, sex='man') 
매개 변수 조합 호출 규칙
python 정의 함수 과정 에서 위치 매개 변수,기본 매개 변수,가 변 매개 변수,키워드 매개 변수,이름 키워드 매개 변 수 를 사용 할 수 있 습 니 다.이 다섯 가지 매개 변 수 는 모두 조합 을 통 해 사용 할 수 있다.주의해 야 할 것 은:
이 다섯 가지 매개 변수 가 정의 하 는 순 서 는 위치 매개 변수,기본 매개 변수,가 변 매개 변수,이름 키워드 매개 변수,키워드 매개 변수 여야 합 니 다.
위치 매개 변수 와 기본 매개 변수 조합

def Person(name, age=20):
  print(name,age)

Person('zhangsan')
Person('zhangsan', 20)
위치 매개 변수,기본 매개 변수,가 변 매개 변수 조합

def Person(name, age=20, *args):
  for i in args:
    print(i)
  print(name, age)

Person('zhangsan')
Person('zhangsan', 22, "Beijing")
Person('zhangsan', age=22, 'Shanghai') 
위치 매개 변수,기본 매개 변수,가 변 매개 변수,이름 키워드 매개 변수 조합

def Person(name, age=20, *args, city, **kwargs):
  for i in args:
    print(i)
  for key,value in kwargs.items():
    print(key, value)
  print(name, age, city)

Person('zhangsan', age=12, 'Author', city='Shanghai', company='Shanghai Software') 
매개 변수 정의 에 대한 구덩이
기본 매개 변수 함정
기본 매개 변수 함정 에 관 한 문 제 는 먼저 예 시 를 살 펴 보 겠 습 니 다.

def Book(book, book_list=[]):
  print(id(book_list))
  book_list.append(book)
  for book in book_list:
    print(book)
  print(id(book_list))  

test = Book("First One") 
출력 결과:

이 출력 결 과 는 예상 한 것 일 것 입 니 다.지금 우 리 는 북()방법 을 다시 호출 하여 무슨 일이 일어 날 지 봅 시다.

이때 출력 결 과 는 이전의 First one 을 모두 출력 하고 그들의 id 를 보 니 모두 같은 메모리 주소 라 는 것 을 알 게 되 었 습 니 다.이때 부터 궁금 해 지기 시 작 했 습 니 다.그러면 이런 상황 이 발생 한 원인 을 찾 아 보 세 요.
공식 자 료 를 조회 한 결과 이것 은 Python 공식 문서 에서 설명 한 것 이다.
Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls:
파 이 썬 공식 문서 가 제시 한 이 유 는 파 이 썬 이 기본 값 을 한 번 만 계산 하고 가 변 대상 에 대해 후속 호출 상황 에서 누적 적 으로 전달 하 는 것 이다.list,dict 등 은 모두 가 변 대상 에 속한다.
그렇다면 이런 기본 값 함정 에 대해 우 리 는 어떻게 불필요 한 번 거 로 움 을 피해 야 합 니까?대체로 두 가지 해결 방법 이 있다.
4.567917.가 변 대상 을 기본 값 으로 사용 하 는 것 을 피한다
  • 매개 변수 가 정 의 될 때 None 대상 을 대체 문자 로 사용 할 수 있 습 니 다
  • 두 번 째 방법 에 대해:
    
    def Book(book, book_list=None):
      print(book_list)
      if book_list is None:
        book_list = []
      book_list.append(book)
      for book in book_list:
        print(book)
      print(id(book_list)) 
    
    test1 = Book('First one')
    test2 = Book('Second one') 
    테스트 결과:

    길 어 지 는 매개 변 수 를 사용 하 는 것 을 조심 하 세 요.
    앞에서 소개 한 바 와 같이 Python 은 가 변 길 이 를 지원 하 는 매개 변수 목록 으로 함수 가 매개 변 수 를 정의 할 때*args 와**kwargs 두 개의 특수 한 문법 을 사용 하여 실현 할 수 있 습 니 다.
    그런데 왜 긴 파 라 메 터 를 사용 하 는 것 을 조심 하 라 고 말 해 야 합 니까?저 는 다음 과 같은 몇 가지 원인 을 정리 해 보 았 습 니 다.
    사용 이 너무 유연 하 다.예 를 들 어 제 위 에서 서로 다른 유형의 매개 변수 조합 에 사용 되 는 예제 에서 위치 매개 변수 와 기본 매개 변수 가 있 는 상황 에서 가 변 매개 변수,키워드 파라미터,명명 키워드 파라미터 도 있 습 니 다.이것 은 아주 쉽 습 니 다.이 함수 의 서명 이 뚜렷 하지 않 습 니 다.호출 자 는 이 방법 을 어떻게 사용 해 야 하 는 지 알 아 보 는 데 시간 이 걸 립 니 다.그래서 팀 개발 의 효율 을 떨 어 뜨리 기 쉽다.
    또 다른 이 유 는 한 함수 의 목록 이 너무 길 면*args,**kwargs 를 사용 하여 함 수 를 간소화 할 수 있 지만 이 함수 가 더 좋 은 실현 방식 이 있 을 수 있 고 재 구성 이 필요 하 다 는 것 을 의미한다.
    말 이 끝나 면 신중하게 사용 해 야 한다.우리 가 자주 사용 하 는 길 어 지 는 매개 변수의 사용 장면 을 말 해 보 자.
    함수 에 장식 기 를 추가 합 니 다4.567917.매개 변수의 수량 이 확실 하지 않 을 때 길 어 지 는 매개 변 수 를 사용 하 는 것 을 고려 할 수 있다.예 를 들 어 일부 프로필 의 설정 항목 을 읽 을 때..4.567917.함수 의 다 형 을 실현 하거나 계승 상황 에서 하위 클래스 는 부모 클래스 를 호출 하 는 방법 이 필요 합 니 다총결산
    파 이 썬 의 매개 변수 유형 에 대해 여기까지 썼 습 니 다.처음에 파 이 썬 을 배 웠 을 때 함수 에 의 해 정 의 된 매개 변수 유형 에 헷 갈 렸 습 니 다.뒤에서 튜 토리 얼 을 보 았 습 니 다.자신 이 스 크 립 트 를 쓸 때 만 났 던 구덩이 들 을 보고 큰 소 가 뒤의 원 리 를 분석 한 후에 많은 것 을 얻 었 습 니 다.뒤 에는 아예 자신의 학습 과정 에서 만난 것 을 모두 정리 하고 기록 하 며 이 해 를 깊 게 하려 고 한다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기