전역 변수

스크립트 전체에서 접근할 수 있는 변수

(함수 바깥에서 만들어진 변수)

x=1		#전역변수
def f():
    print(x)

f()
print(x)

>>1
>>1

 

지역 변수

해당 변수를 만든 함수 안에서만 접근할 수 있는 변수

(함수 내부에서 만들어진 변수)

def f():
	x=1			#지역변수
    print(x)	#접근가능, 제대로 출력이 된다.
    
f()
print(x)		#에러 발생, 변수 x를 만든 함수 밖에서는 변수 x를 사용할 수 없다.

>>1
Traceback (most recent call last):
  File "...................", line 6, in <module>
    print(x)
NameError: name 'x' is not defined		#x가 정의되지않음

 

 

함수 안에서 전역 변수 사용

함수 안에서 전역 변수를 변경하려 하면 에러가 발생한다.

x=1
def f():
    x +=1		#에러 발생
    print(x)

f()

>>Traceback (most recent call last):
  File "//", line 6, in <module>
    f()
  File "//", line 3, in f
    x +=1
UnboundLocalError: local variable 'x' referenced before assignment
#지역변수 x가 할당되지않았는데 참조함.

하지만 global 키워드를 사용하면 전역 변수의 변경이 가능하다.

x=1				#전역 변수
def f():
    global x	#전역 변수 x를 사용하겠다고 명시
    x+=1
    print(x)

f()
print(x)

>>2
>>2		#전역 변수 x도 변경이 된 것을 볼 수 있다.

 

※global을 이용하여 함수 내에서 전역 변수를 만들 수 있다.

def f():
    global x
    x=1
    print(x)

f()
print(x)		#함수 밖에서 x 호출

>>1
>>1

파이썬에서 객체는 변경가능한(mutable) 객체와 변경불가능(immutable) 객체로 나뉜다.

 

mutable객체로는 list, set, dictionary 가 있고

위의 셋을 제외한 bool, int, float등이 immutable객체이다.

list mutable
set mutable
dict mutable
bool immutable
int immutable
float immutable
tuple immutable
str immutable
frozenset immutable

 

mutable


List

x=[1,2,3]
print(id(x))
x[2]=5		
print(id(x))	#값을 바꿔도 주소는 그대로


>>2066410918472
>>2066410918472

 

 

Set

x={0:True,1:True,2:True}
print(id(x))
x[0]=False		#{0:False,1:True,2:True}
print(id(x))	#값을 바꿔도 주소는 그대로

>>3146876058024
>>3146876058024

 

immutable


Int

x=1
print(id(x))
x+=1
print(id(x))

>>140712646963456
>>140712646963488

 

String

x='Python'
x[0]='A'	#에러 발생


>>Traceback (most recent call last):
  File ".....................................", line 2, in <module>
    x[0]='A'
TypeError: 'str' object does not support item assignment
x='Python'
print(id(x))
x+='3'
print(id(x))

>>1813087795312
>>1813087831536

 

 

 

 

 

'Python' 카테고리의 다른 글

Python - 람다함수(익명함수)  (0) 2020.08.24
Python - 전역 변수, 지역 변수  (0) 2020.08.23
Python - 빠른 입력  (0) 2020.08.17
Python - 함수 인자의 개수를 알 수 없을 때  (0) 2020.08.11
Python - 예외처리  (0) 2020.08.10

지금까지 파이썬에서 입력을 받기 위해서 input()을 사용했다.

하지만 파이썬으로 알고리즘 문제를 풀 때 input()을 이용해 많은 입력을 받다 보면 시간 초과가 발생한다.

시간 초과를 방지하기 위해 input()보다 더 빠른 sys모듈의 sys.stdin.readline()을 사용해보자.

import sys
x=sys.stdin.readline()
print(x)

>>Python	#입력
Python		#출력

sys.stdin.readline()은 문자열 마지막의 줄 바꿈 문자까지 읽기 때문에 strip()을 이용해 줄 바꿈 문자를 제거해주는 것이 좋다.

import sys
x=sys.stdin.readline().strip()
print(x)
print('Java')

>>Python	#입력
Python		#출력
Java

+ Recent posts