[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