1. 함수 매개 변수 참조로
단지 파이썬 전달 매개 변수의 모드는 공유에 의한 호출 (共享传参) . 함수의 각 형식 매개 변수는 인수의 각 기준의 사본을 얻을 수 있다는 의미를 공유하여 호출합니다. 즉, 함수 내에서 매개 변수가 될 별칭 실제 인수.
이 계획의 결과는 함수가 매개 변수로 전달하는 가변 객체를 변경할 수 있지만, 그 개체의 ID를 변경할 수 없다는 것입니다.
예 8-11. 함수는 수신하는 가변 객체를 변경할 수있다.
"" " 함수가 수신하는 가변 객체 변경할 수 " "" >>>을 DEF (a, b) F : ... + = B ... 리턴 ... >>> X = 1 >>> Y = 2 >>> F (x, y)를 3 >>> X, Y # 횟수 X는 변하지 않는다. (1, 2 ) >>> >>> A = [1, 2 ] >>> B = [3,4 ] >>> F (a, b) [ 1, 2, 3, 4 ] >>> 먼트의 # 리스트 (A)은 변경된다. ([1, 2, 3, ) >>> U = (30, 40 ) >>> F (t, U) ( 10, 20, 30, 40 ) >>> t, U # 튜플 t는 변하지 않는다. ((10, 20), (30, 40 )) >>>
파이썬 함수 매개 변수 전달 참조 : https://www.cnblogs.com/zhoug2020/p/9110663.html
매개 변수의 기본값으로 2. 변경 가능한 유형 : 나쁜 아이디어
당신은 매개 변수의 디폴트 값으로 변경 가능한 객체를 피해야한다.
예 8-12. 간단한 클래스는 변경 가능한 기본의 위험을 설명합니다.
클래스 HauntedBus : 데프 __init__ (자기, 승객 = []) : # 승객 인수가 제공되지 않는 경우,이 매개 변수가 초기에 비어있는 기본 목록 객체에 바인딩됩니다. self.passengers는 = 승객 # 이 할당에는 승객 인수가 주어지지 자체 기본 목록의 별칭입니다 승객의 별칭, self.passenger 있습니다. 데프 (자기 이름) 선택 : self.passengers.append (이름) #을 () self.passengers으로 사용되는 방법은 (.remove시) 및으로 .Append, 우리는 실제로의 속성 기본 목록을, 돌연변이된다 기능 오브젝트. 데프 (자기 이름) 드롭 :bus3 = HauntedBus () #의 bus3은 다시 기본 목록이 할당, 빈 시작합니다. >>> bus3.passengers # 기본값은 빈 더 이상!다시 기본 목록이 할당됩니다. [ '캐리'] >>> bus3.pick ( '데이브') >>> bus2.passengers 번호 지금 데이브, bus3 고른, BUS2에 나타납니다. [ '캐리', '데이브'] >>> >>> bus2.passengers는 bus3.passengers # bus2.passengers 및 bus3.passengers가 동일한 목록을 참조한다. 진정한 >>> bus1.passengers 번호 그러나 bus1.passengers는 별개의 목록입니다. [ '빌', '찰리'] "" " #이 문제입니다. 그들 사이 같은 승객 목록을 공유까지 초기 승객 목록 끝을하지 않는 버스 인스턴스 " ""모듈이로드 될 때 보통 - 기본 값은 함수 객체의 속성이됩니다. 경우에 따라서 이상한 일들이 일어날은 HauntedBus이 비어 시작하는 경우에만 다음 self.passengers 때문에 기본값으로 오전 별칭이된다 승객 파라미터 값. - 문제는 함수가 정의 될 때마다 기본값이 평가된다는 점이다 즉, 모듈이로드 보통 때 - 기본 값은 함수 객체의 속성이됩니다. 소위 경우 기본값은 변경 가능한 객체이며, 당신이 그것을 변경, 변화는 함수의 모든 미래의 호출에 영향을 미칠 것입니다. "" " #은 그 __defaults__ 속성 양심의 가책을 느끼게 학생들을 대상 init__ HauntedBus을 .__ 검사 및 참조 : " "" >>> 디렉토리 (HauntedBus .__ init__) [ '__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__DIR__', '__doc__', '__eq__', '__format__'을 ' __ge__ ','__get__ ','__getattribute__ ','__globals__ ','__gt__ ','__hash__ ','__init__ ','__init_subclass__ ','__kwdefaults__ ','__le__ ','__lt__ ','__module__를 ','__name__ ' '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] >>> HauntedBus .__ INIT __.__ defaults__ ( [ '캐리', ' >>> >>> HauntedBus .__ 초기화 __.__ 기본값 __ [ 0]이다 bus2.passengers"" " # 마지막으로, 우리가 bus2.passengers을 확인할 수 있습니다 것은 HauntedBus .__ 초기화 __.__ defaults__의 첫 번째 요소에 바인딩 별칭 속성입니다 : " "" 진정한는 "" " #은 아무도없는 이유를 변경할 디폴트와 문제 설명 종종 나타날 수 있습니다 매개 변수에 대한 기본값으로 사용 # 변경 가능한 값을.
종료...