[PYTHON] Python의 생소한 함수들 몇가지 정리
0. INTRO
python을 주 언어로 사용하며 프로젝트를 하던 중 사용하게된 자주 쓰지 않는 python 함수들 몇가지를 설명해볼까한다.
1. 본문
1. get()
-
dict.get(key, default=None) 이러한 형태로 쓰인다.
test = {"a":123, 'b':456, 'c':'aaa', 'd':'bbb'} # dict에 key가 있으면 해당 value를 return하고 없다면 None을 return test.get('b') -> 456 test.get('e') -> None # dict에 key가 없으면 두번째 인자값을 반환한다. test.get('e', 'Empty') -> 'Empty'
2. iter()
- 파이썬의 변수들을 iterable한 객체로 만들어준다.
- iter(호출가능한객체, 반복을끝낼값)
3. next()
- iterable한 객체들의 값을 순서대로 꺼내준다.
-
next(반복가능한객체, 기본값), 이렇게 기본값 지정이 가능하여 반복이 끝났다면 기본값이 출력된다.
str_ = 'python' it = iter(str_) # iterable한 객체 생성 first = next(it) # first는 it 객체의 첫 값인 'p'가 출력된다. # y가 나올때 반복을 끝내도록 하고 싶다면 # lambda와 next를 통해서 it 객체의 값을 하나씩 꺼내서 'y'와 비교한다. for i in iter(lambda:next(it), 'y'): print(i) # y t h o n
4. literal_eval()
-
list, dict, tuple type이지만 따옴표로 둘러쌓여 str로 읽혀지는 변수를 원래 type으로 돌려준다.
import ast test_str = "[1,2,3,4,5]" origin = ast.literal_eval(test_str) origin >> [1,2,3,4,5]
5. getattr()
- getattr(object, attribute, default)(vars)
- object : 필수. 객체.
- attribute : 필수. 값을 얻을 속성명.
- default : 선택. 속성이 없는 경우 반환할 값.
- vars : 해당 메소드에 들어가는 변수
-
Class 안의 method를 호출할 수 있다.
class Test: def t1(self, aa): print(aa + "11") def t2(self, bb): print(bb + "22") # getattr(class명, class내 함수)(함수에 전달될 인자) getattr(Test(), 't1')('pp') >> 'pp11' getattr(Test(), 't2')('qq') >> 'qq22' # t3이라는 함수가 class내에 없으므로 No Function 값 반환 getattr(Test(), 't3', 'No Function') >> 'No Function'
6. import_module()
- Python 에서 import는 보통 두가지 경우에 많이 사용한다.
- python의 내장 혹은 외부 library를 불러와서 해당 library내에서 지원해주는 함수들을 사용할 때
- 다른 경로에 있는 python file 내부에 정의된 Class나 함수 등을 사용할 때
- 특정 디렉토리 아래에 존재하는 python file을 여러개 불러와서 작업해야 하는 등의 상황에서는 상단에 import하는 부분이 굉장히 길어지거나 지저분해질 수 있다.
-
디렉토리가 아래와 같은 구조를 가질 때, query_files 내부의 python file들을 차례대로 import하여 해당 파일 내에 존재하는 data를 변수에 저장해주는 함수가 importlib.import_module 이다.
query_files | ├── first.py └── second.py
import os import importlib current = os.getcwd() filelist = ["first", "second"] # 폴더 내부의 파이썬 파일 이름 명시 query = {} # os.walk() 함수를 통해 특정 dir 내에 있는 폴더, 파일 추적 for root,dirs,files in os.walk(os.path.join(os.getcwd(), "query_files")): db_list = [f.replace(".py","") for f in files] for db in db_list: # import query_files.first as modules 와 동일한 효과 modules = importlib.import_module(f"query_files.{db}") query.update(modules.queries)
Leave a comment