반응형
변수 범위에 대한 Python의 접근 방식을 이해하려고합니다. 이 예에서 f ()
가 main ()
내에서 인식되는 것처럼 x
의 값을 변경할 수 있지만 n
?
def f(n, x):
n = 2
x.append(4)
print('In f():', n, x)
def main():
n = 1
x = [0,1,2,3]
print('Before:', n, x)
f(n, x)
print('After: ', n, x)
main()
산출:
Before: 1 [0, 1, 2, 3]
In f(): 2 [0, 1, 2, 3, 4]
After: 1 [0, 1, 2, 3, 4]
해결 방법
일부 답변에는 함수 호출 컨텍스트에 "복사"라는 단어가 포함되어 있습니다. 혼란 스러워요.
Python은 항상 함수 호출 중에 전달하는 객체 를 복사하지 않습니다.
함수 매개 변수는 이름 입니다. 함수를 호출 할 때 Python은 이러한 매개 변수를 호출자 범위의 이름을 통해 전달하는 모든 객체에 바인딩합니다.
객체는 변경 가능 (목록과 같이) 또는 불변 (예 : 정수, Python의 문자열) 일 수 있습니다. 변경할 수있는 변경 가능한 개체입니다. 이름은 변경할 수 없으며 다른 개체에 바인딩 할 수 있습니다.
def f(n, x): # these `n`, `x` have nothing to do with `n` and `x` from main()
n = 2 # put `n` label on `2` balloon
x.append(4) # call `append` method of whatever object `x` is referring to.
print('In f():', n, x)
x = [] # put `x` label on `[]` ballon
# x = [] has no effect on the original list that is passed into the function
참조 페이지 https://stackoverflow.com/questions/575196
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python : 예외를 무시하고 계속하는 방법? (0) | 2020.10.04 |
---|---|
파이썬 Python에서 현재 가져 오기 경로를 얻는 방법은 무엇입니까? (0) | 2020.10.04 |
파이썬에서 __setattr__을 사용하는 이유는 무엇입니까? (0) | 2020.10.04 |
파이썬 Sorting dictionary keys in python (0) | 2020.10.04 |
파이썬 pyqt: how to remove a widget? (0) | 2020.10.04 |
댓글