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.가 변 대상 을 기본 값 으로 사용 하 는 것 을 피한다
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.함수 의 다 형 을 실현 하거나 계승 상황 에서 하위 클래스 는 부모 클래스 를 호출 하 는 방법 이 필요 합 니 다총결산
파 이 썬 의 매개 변수 유형 에 대해 여기까지 썼 습 니 다.처음에 파 이 썬 을 배 웠 을 때 함수 에 의 해 정 의 된 매개 변수 유형 에 헷 갈 렸 습 니 다.뒤에서 튜 토리 얼 을 보 았 습 니 다.자신 이 스 크 립 트 를 쓸 때 만 났 던 구덩이 들 을 보고 큰 소 가 뒤의 원 리 를 분석 한 후에 많은 것 을 얻 었 습 니 다.뒤 에는 아예 자신의 학습 과정 에서 만난 것 을 모두 정리 하고 기록 하 며 이 해 를 깊 게 하려 고 한다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.