본문 바로가기

Python 파이썬

파이썬 수첩 ( 전역 변수 / 지역 변수 / global 키워드 / 컨테이너 자료형 / 리스트의 메서드 / 딕셔너리의 메서드 / 중첩함수 / nonlocal 키워드 / 클로저 )

반응형

 

전역 변수

- 함수를 포함하여 스크립트 전체에서 접근할 수 있는 변수

 

지역 변수

- 변수를 만든 함수 안에서만 접근할 수 있고, 함수 바깥에서는 접근할 수 없음.

x= 10 #전역 변수

def foo():

 

x = 20 # 지역 변수

print(x)

foo( ) #20 #지역 변수 출력

 

print(x) #10 #전역 변수 출력


global 키워드

- 함수 안에서 전역변수의 값을 변경하거나 생성할 수 있음.

x = 10

def foo( ):

global x

x = 20 #전역변수 값 변경

print(x)

foo( ) #20

print(x) #20

--------------------------- 

 

def foo ( ):

global x

x = 20 #전역변수 값 생성

print(x)

foo( ) #20

print(x) #20

 


 

컨테이너 자료형

딕셔너리, 리스트, 튜플, 세트

 

mutable: 딕셔너리, 리스트, 세트

immutable: 튜플

 

sequence: 리스트, 튜플

non-sequence: 딕셔너리, 세트

 


 

리스트의 메서드

 

리스트.append(값): 리스트의 뒤에 값을 추가함.

리스트.remove(값): 리스트에서 값을 제거함.

리스트.pop(인덱스 번호): 리스트에서 해당 인덱스에 위치한 값을 제거함.

 


 

딕셔너리의 메서드

 

딕셔너리.pop(키): 딕셔너리에서 해당 키와 value를 제거함.

 

- 딕셔너리에 for 루프문을 사용하면 기본적으로 key만 뽑아옴.

 

conductor = {'first_name': '단테', 'last_name': '안'}

for key in conductor:

print(key)

>>> first_name

>>> last_name

 

딕셔너리.items()을 통해 key와 value 둘다 뽑아올 수 있음.

 

conductor = {'first_name': '단테', 'last_name': '안'}

for key, value in conductor.items( ):

print(key + ' : ' + value)

>>> first_name : 단테

>>> last_name : 안

 


 

중첩 함수

바깥쪽 함수의 지역변수는 모든 안쪽 함수에서 접근할 수 있음.

 

def print_hello():

hello = 'Hello, world!'

def print_message():

print(hello) # 바깥쪽 함수의 지역변수를 사용함

print_message()

 

print_hello()

>>> Hello, world!

 

------------------------

 

def A( ):

x=10

def B( ):

x=20

 

B( )

print(x)

 

A()

 

>>> 10

 

------------------------------

 

- 현재 함수의 바깥쪽에 있는 지역 변수의 값을 변경하려면 nonlocal 키워드를 사용하면 됨.

 

( 현재 함수의 바깥쪽에 있는 지역변수를 찾을때 가장 가까운 함수부터 먼저 찾음. )

 

def A( ):

x=10

def B( ):

 

nonlocal x

x=20

 

B( )

print(x)

 

A()

 

>>> 20

 


 

클로저 (closure)

 

함수를 둘러싼 지역변수 및 코드를 계속 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수

프로그램의 흐름을 변수에 저장할 수 있음.

지역변수와 코드를 묶어서 사용하고 싶을 때 활용함.

 

def calc( ):

a=3

b=5

def mul_add(x):

return a*x+b

 

return mul_add    #괄호를 붙이지 않고, 함수명만 반환함.

 

c = calc( ) #클로저

 

print(c(1), c(2), c(3), c(4), c(5))

 

>>> 8 11 14 17 20

 

------------------------------------

 

def calc( ):

a=3

b=5

 

return lambda x: a*x+b

 

반응형