Chap.7 함수[변수의 범위] - 지역 변수, 전역 변수
변수의 범위
지역 변수, 전역 변수
지역 변수
- 함수 내에서 사용된 변수
- 함수 내에서 만 사용 가능
- 함수 밖에서 사용 불가
def calsum(n): # 변수 n은 호출에서 초기화 total = 0 # 변수 total은 함수 내에서 초기화 for num in range(n+1): # 변수 num 또한 함수 내에서 초기화 total += num return total
세 변수 n, total, num 은 모두 지역변수
def kim(): temp = '김과장의 함수' print(temp) kim() print(temp) # name 'temp' is not defined
결과
name 'temp' is not defined
def kim(): temp = '김과장의 함수' print(temp) def lee(): temp = 2**10 return temp def park(a): temp = a*2 print(temp) kim() print(lee()) park(6)
결과
김과장의 함수
1024
12
전역 변수
- 어디서든 접근 가능한 변수
- 탑 레벨에서 사용된 변수
salerate = 0.9 def kim(): print("오늘의 할인율:", salerate) def lee(): price = 1000 print("가격 :", price * salerate) kim() salerate = 1.1 lee()
결과
오늘의 할인율: 0.9
가격 : 1100.0
price = 1000 def sale(): price = 500 sale() print(price)
결과
1000
price 두 변수는 다르다.
price= 1000 def sale(): price = 500 print("sale", id(price)) sale() print("global", id(price))
결과
sale 2097613157520
global 2097613157264
대입연산의 우선 순위 -> 지역변수가 높다. 함수 안에서 읽을 때 쓸 때 다르다.
id() : 동일한 객체 여부를 판별하는 연산자
test -> 전역변수에서 두 값이 같으면 id가 같다.
예제
전역변수에 대하여 쓰기 연산을 하고 싶을 때
price = 1000 def sale(): global price price = 500 sale() print(price)
결과
500
# 추천사항 : 전역변수는 가급적 사용하지마라 -> 지역변수 지향
# 전역변수는 오작동의 근원이다. 상수처럼 읽기용으로는 써라.
docstring
- 함수의 도움말
- 함수의 코드 블록 앞에 문자열로 지정 (위치가 고정되어 있다.)
- help(함수명) 호출 시 출력될 문자열
def calcsum(n): """1 ~ n까지의 합계를 구해 리턴한다.""" total = 0 for i in range(n+1): total += i return total help(calcsum)
결과
Help on function calcsum in module __main__:
calcsum(n)
1 ~ n까지의 합계를 구해 리턴한다.
예제(1)
min = FindMin(2, 7, 5, -1, 20)
내 풀이
def FindMin(int1, *ints): temp = int1 for num in ints: if temp >= num : temp = num return temp min = FindMin(2, 7, 5, -1, 20) print('최소값:', min)
강사님 : 수가 10000 이하라 가정
def FindMin(*numbers): min = 999999 for num in numbers: if num < min: min = num return min min = FindMin(2, 7, 5, -1, 20) print('최소값:', min)
예제(2)
max = FindMax(2, 7, 5, -1, 20) 해보기
def FindMax(int1, *ints): temp = int1 for num in ints: if temp < num : temp = num return temp max = FindMax(2, 7, 5, -1, 20) print('최대값:', max)
예제(3)
swap으로 함수 이해하기
def swap(x, y): temp = y y=x x=temp print('x', x) print('y', y) a=10 b=20 swap(a, b) print('a', a) print('b', b)
결과
x 20
y 10
a 10
b 20
a, b는 swap 함수의 영향을 받지 않았다!
지역 함수는 stack 영역!
stack frame에 push, pop되며 stack은 top만 볼 수 있다.
call by value (복사본)
읽기는 지역 변수(stack frame) 살피고 전역 변수 살핀다.
지역 변수가 우선 순위가 높다.
쓰기는 지역 변수 살피고 전역 변수로 가지 않는다.
'인터페이스 개발 > Python' 카테고리의 다른 글
Python - 문자열 관리[문자열 분리] - 첨자, 슬라이싱 (0) | 2020.07.25 |
---|---|
Python - 함수[예제] - 함수 만들기 연습, Number guessing game (0) | 2020.07.25 |
Python - 함수[인수의 형식] - 가변 인수, 인수의 기본값 (0) | 2020.07.20 |
Python - 함수[함수와 인수] - 반복되는 코드, 인수, 리턴값, pass (0) | 2020.07.20 |
Python - 반복문[예제] - 가위바위보(추가) (0) | 2020.07.20 |
댓글