컴프리헨션은 한 줄로 파이썬의 기능을 구현할 수 있는 기능이다. 코드 간소화를 위해서 사용되며 직관적이고 속도가 빠르다는 장점이 있다.
컴프리헨션을 사용할 땐 유의할 점이 있는데 첫번째는 여러 조건을 중첩할 경우에는 가독성이 떨어진다는 점이고, 두번째로는 조건문에 따라서 컴퓨터에서 사용되는 메모리에 영향을 줄 수 있다는 점이다.
# 1부터 20까지 홀수, 짝수 구분하기
# 컴프리헨션 사용 X
odd_list = []
even_list = []
for i in range(1, 21):
if i % 2 == 0:
even_list.append(i)
else:
odd_list.append(i)
print(f'홀수 : {odd_list}')
# 홀수 : [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(f'짝수 : {even_list}')
# 짝수 : [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# 컴프리헨션 사용
odd_list = [i for i in range(1, 21) if i % 2 != 0]
even_list = [i for i in range(1, 21) if i % 2 == 0]
print(f'홀수 : {odd_list}')
print(f'짝수 : {even_list}')
컴프리헨션에서 if문을 사용할 때 주의해야할 점은 컴프리헨션에서는 else는 사용할 수 있지만 else if문은 사용할 수 없다는 점이다.
컴프리헨션은 리스트 뿐만 아니라 딕셔너리, 셋에서도 사용할 수 있다.
전역 변수는 하나의 파이썬 파일 전체에서 값을 읽을 수 있는 변수이다. 전역 변수는 되도록이면 사이드이펙트 및 가독성을 위해서 함수 안에서 값을 수정하지 않는 것이 좋다.
+) 사이드이펙트란 의도하지 않을 결과를 의미한다. 구현하고자 하는 기능이 동작되지 않고 다른 요인으로 인해 동작을 못하거나 여러가지 다른 상황을 통상적으로 사이드이펙트라고 부른다.
지역변수는 함수 안에서 선언된 변수로 선언된 함수 안에서만 수정하고 읽을 수 있다. 지역변수는 이름이 같지만 다른 함수에 선언되어 있다면 서로 다른 변수로 취급된다.
global_var = 'global variable'
def local():
local1 = 'local variable 1'
local2 = 'local variable 2'
local3 = 'local variable 3'
print('local function')
print(f'local variable: {local2}')
print(f'global variable: {global_var}')
print(f'local variable: {local1}')
# NameError: name 'local1' is not defined
위의 코드에서 NameError
가 발생한 이유는 위에서 언급했듯이 지역변수는 선언된 함수 내에서만 사용이 가능하기 때문에 함수 밖에서 지역변수를 선언해서 에러가 난 것이다. 만약 동일한 이름의 전역변수가 있었다면 해당 변수가 출력이 됐을 것이다.