반응형

파이썬(Python)/문법 61

continue, break, pass 차이

조건문을 사용할 때 continue, break, pass 를 어떻게 사용하는 냐에 따라 조건문 진행 방법이 달라 진다. 아래 코드를 통해 간단하게 이해해보자 for a_var in range(5): if a_var == 3: print("a_var종료") continue print(a_var) print("") for b_var in range(5): if b_var == 3: print("b_var종료") break print(b_var) print("") for c_var in range(5): if c_var == 3: print("c_var종료") pass print(c_var) print("") 결과>> 0 1 2 a_var종료 4 0 1 2 b_var종료 0 1 2 c_var종료 3 cont..

collections.defaultdict 이란

딕셔너리는 존재하지 않는 키 값을 출력 할 경우 아래 코드 처럼 에러가 발생 한다. 이러한 에러를 없애기 위해 try 문을 사용한다. import collections a_var = {"k_1":"v_1","k_2":"v_2","k_3":"v_3","k_4":"v_4"} try: print(a_var["k_5"]) except: print("에러발생") 결과>> 에러발생 defaultdict 객체는 위의 딕셔너리 문제를 쉽게 해결해 준다. defaultdict에 인자 값은 int, list, set 을 받을 수 있다. 아래 코드 처럼 키의 value 값은 default로 int 0이 자동으로 들어 간다. 그리고 인자를 int로 사용했을 경우에도 다른 값 (여기서는 string) 을 선언해서 사용할 수 있..

별표하나 별표두개 (*arg, **kwarg)

파이썬에서 함수 인자 앞에 별표 한개를 쓰느냐 두개를 쓰는 것에 대해 간단히 설명하겠다. 별표 없이 인자만 선언되어 있을 경우는 함수에 인자 갯수는 정의에 따라 고정되고 항상 동일한 수로 입력 해야한다. 하지만 별표 한개로 (*)로 정의 하면 인자 수를 제한 없이 사용할 수 있는 장점이 있다. 함수 내부에서는 해당 인자를 튜플로 인식해서 사용 된다. 별표 두개는 key 값과 value로 받아서 dictionary로 만들어 준다. 함수 내부에서는 해당 dictionary 형태로 사용할 수 있는 것이다. 또는 미리 key 값을 선언해 놓으면 dictionary로 넣을 경우 value 값만 받는 형태로도 사용할 수 있다. def arg_test(*args): print(type(args)) print(args..

파이썬 변수는 객체이다

파이썬은 모든 변수를 선언할때 객체에 의해서 선언된다. 아래 예를 통해 이해해 보자. a_var = 3 b_var = a_var print(type(a_var)) print(id(a_var)) print(id(3)) print(id(b_var)) b_var = 5 print(id(5)) print(id(b_var)) 결과>> 1668610000 1668610000 1668610000 1668610032 1668610032 C언어의 경우를 생각해보면 a_var와 b_var는 다른 메모리 주소를 가리킬 것이고 해당 메모리 주소를 따라가면 3이라는 값을 읽을 수있다. 하지만 파이썬의 경우 모두 int라는 클래스 안에 할당되고 a_var, b_var, 3이라는 값 모두 해당 주소 값을 가리키는 것을 알 수 있다.

locals(), globals()

locals 와 global의 현재 namespace (전역, 지역, builtin) 을 딕션너리(dict)으로 정리해서 넣어 준다. 둘의 차이는 locals은 말그대로 locals()가 실행되어지는 함수내의 지역 namespace 들을 정리해서 넣어주고 globals는 전역, 지역, builtin 정보 모두 dict 형태로 정리해 준다. 아래 예제를 통해 이해해 보자. a_var = range(2) def locals_test(): b_var = 3 c_var = "hi" d_var = locals() print(d_var) locals_test() e_var = globals() print(e_var) 결과>> {'b_var': 3, 'c_var': 'hi'} {'__name__': '__main__..

enumerate, index값 불러오기

자료형 list, set, tuple 들은 값의 순서를 왼쪽부터 index를 매길 수 있다. enumerate를 사용하지 않는 다면 아래 코드 처럼 갯수를 알기 위해 len라는 함수를 불러 추가적인 작업이 필요하다. a_var = range(5) for index in range(len(a_var)): print(index, a_var[index]) enumerate를 사용하면 아래 코드 처럼 함수 하나로 index와 값을 추출 할 수 있다. 여기서 우리는 enumerate의 return 값은 index, value 두 개가 나옴을 알 수 있다. a_var = range(5) for index, x in enumerate(a_var): print(index, x) 결과>> 0 0 1 1 2 2 3 3 4 4

선언 전 메모리절약, range, getsizeof

파이썬 코딩을 할때 유용한 팁으로 원하는 값을 미리 생성하느냐 아니면 문법으로 정의해 놓고 필요할때 마다 빼는 방식이냐에 따라 메모리 사용량이 달라 진다. 아래 예제 코드를 살펴 보도록 하자 import sys a_var = range(30) b_var = list(a_var) c_var = [i for i in range(30)] print(a_var) print(b_var) print(c_var) print(len(a_var)) print(len(b_var)) print(len(c_var)) print(sys.getsizeof(a_var)) print(sys.getsizeof(b_var)) print(sys.getsizeof(c_var)) 결과>> range(0, 30) [0, 1, 2, 3, 4, ..

yield, next 란

파이썬 문법 중 yield와 next가 있다. 일반적으로 함수에서 값을 뽑아 낼때는 return으로 값을 보내 준다. 그리고 생성된 함수는 값을 return 함으로서 역할을 종료 한다. 가령 while 문이 무한으로 돌고 있어도 return을 맞이하면 종료 한다. yield는 값을 보내줄때 사용하는데 return 과 다른 점은 함수의 종료가 아닌 지속적으로 보내 줄 수 있다. 이때 값을 받을 수 있는 방식이 next이다. 아래 예제를 통해 이해해 보도록 하자. def func_yield(): a_var = 2 yield a_var while True: a_var = a_var + 1 yield a_var b_var = func_yield() c_var = func_yield() print(next(b_v..

list comprehension, for if문 써서 한줄로 list 만들기

파이썬 예제들을 살펴 보면 한줄로 for문 if문을 사용해서 list를 만드는 것을 볼 수 있다. 효율적인 코딩을 위해 사용하는 방식으로 아래 파이썬 예제를 통해 이해해 보자. 아래 코드는 여러 리스트들 중에 가장 작은 숫자를 찾는 예제이다. yValues0 = [6,13,8,7] yValues1 = [9,6.5,40,6,12] yValues2 = [8,7,3,1] yUpperLimit = 30 yAll = [yValues0, yValues1, yValues2] minY = min([y for yValues in yAll for y in yValues]) maxY = max([y for yValues in yAll for y in yValues if y < yUpperLimit]) print(minY) ..

lambda, map 함수

lambda 인자 : 표현식 map(함수, 리스트) lambda와 map은 위 와같은 표현을 따른다. 두 함수는 같이 연계해서 사용하기 편해서 같이 설명한다. 예제를 통해 이해해보도록 하자 bb = (lambda aa: aa*2)(3) cc = map(lambda aa: aa*2, range(3)) dd = list(map(lambda aa: aa*2, range(3))) print(bb) print(cc) print(dd) 결과 6 [0, 2, 4] 람다는 인자 값을 받아서 표현식에 맞춰 실행해 준다. 이때 인자 값은 여러개를 한번에 넣을 수도 있다. map 함수는 리스트로 받은 값을 함수에 하나씩 실행해 준다. 여기서 range(3)은 [0,1,2]의 리스트와 동일하다. map으로 끝내면 해당함수의 ..

반응형