Pythonic code

92·2023년 1월 24일
0
post-thumbnail

1. 파이써닉 코드를 위한 함수

1.1 lambda

print( (lambda x,y: x + y)(10, 20) )
  • 먼저 xy 는 입력값을 의미
  • 두 번째, x + y는 return 부분과 같음. ':' 이후에 반환값 사용
  • (10, 20)은 각각 앞에 있던 xy 입력값
result = list(map(lambda i: i * 2 , [1, 2, 3]))
  • map(f, iterable)의 입력 함수 f 와 반복 가능한 iterable 객체(리스트, 튜플 등)

1.2 Enumerate()

  • enumerate()는 리스트, 문자열, 튜플 등이 있는 경우 순서와 리스트의 값을 함께 반환해 주는 기능
my_list = ['a','b','c','d']

for i, value in enumerate(my_list):
    print("순번 : ", i, " , 값 : ", value)

1.3 Generator

my_list = ['a','b','c','d']

# 인자로 받은 리스트로부터 데이터를 하나씩 가져오는 제너레이터를 리턴하는 함수
def get_dataset_generator(my_list):
    result_list = []
    for i in range(2):
        for j in my_list:
            yield (i, j)   # 이 줄이 이전의 append 코드를 대체
            print('>>  1 data loaded..')

dataset_generator = get_dataset_generator(my_list)
for X, y in dataset_generator:
    print(X, y)

1.4 Multiprocessing

num_list = ['p1','p2', 'p3', 'p4'] #코드 시작점

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes = 4)
    pool.map(count, num_list)
    pool.close()
    pool.join()

pool = multiprocessing.Pool(processes = 4) : 병렬 처리 시, 4개의 프로세스를 사용하도록 합니다. CPU 코어의 개수만큼 입력해 주면 최대의 효과를 볼 수 있습니다.
pool.map(count, num_list) : 병렬화를 시키는 함수로, count 함수에 num_list의 원소들을 하나씩 넣어 놓습니다. 여기서 num_list의 원소는 4개이므로 4개의 count 함수에 각각 하나씩 원소가 들어가게 됩니다.즉, count('p1')count('p2')count('p3')count('p4')가 만들어집니다.
pool.close() : 일반적으로 병렬화 부분이 끝나면 나옵니다. 더 이상 pool을 통해서 새로운 작업을 추가하지 않을 때 사용합니다.
pool.join() : 프로세스가 종료될 때까지 대기하도록 지시하는 구문으로써 병렬처리 작업이 끝날 때까지 기다리도록 합니다.

2. 파이써닉 코드를 위한 명명규칙

2.1 PEP8

1) Whitespace

  • 한 줄의 코드 길이가 79자 이하
  • 함수와 클래스는 다른 코드와 **빈 줄 두 개**로 구분
class a():
    pass
# 빈 줄
# 빈 줄
class b():
    pass
# 빈 줄
# 빈 줄
  • 클래스에서 함수는 빈 줄 하나로 구분
class a():
	
	def b():
		pass
  • 변수 할당 앞뒤에 스페이스를 하나만 사용 O
  • 리스트 인덱스, 함수 호출에는 스페이스를 사용 X
  • 쉼표(,), 쌍점(:), 쌍반점(;) 앞에서는 스페이스를 사용 X
my_list = [1, 2, 3]; my_list[0:1]
if len(my_list) == 3: print my_list

2) 주석

  • 코드의 내용과 일치하지 않는 주석 X
  • 불필요한 주석 X

3) 이름 규칙

  • 변수명 앞에 _(밑줄)이 붙으면 함수 등의 내부에서만 사용되는 변수
_my_list = []
  • 변수명 뒤에 _(밑줄)이 붙으면 라이브러리 혹은 파이썬 기본 키워드와의 충돌 피할 때
import_ = "not_import"
  • 소문자 L, 대문자 O, 대문자 I를 가능하면 사용 X
  • 모듈(Module) 명은 짧은 소문자로 구성되며
  • 클래스 명은 파스칼 케이스(PascalCase) 컨벤션으로 작성
  • 함수명은 소문자로 구성
  • 상수(Constant)는 모듈 단위에서만 정의하고 모든 단어는 대문자

2.2 네이밍 컨벤션(Naming Convention)

1. snake_case

ex) this_snake_case

2. PascalCase

ex) ThisPascalCase

3. camelCase

ex) thisCamelCase

3. 활용

3.1 2차원 리스트를 1차원 리스트로 만들기

my_list = [[1, 2], [3, 4], [5, 6]]

# 방법 1 - sum 함수
answer = sum(my_list, [])

# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))

# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))

# 방법 4 - list comprehension 이용
[element for array in my_list for element in array]

# 방법 5 - reduce 함수 이용 1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))

# 방법 6 - reduce 함수 이용 2
from functools import reduce
import operator
list(reduce(operator.add, my_list))

3.2 numpy 이용

# 방법 7 - numpy 라이브러리의 flatten 이용
import numpy as np
np.array(my_list).flatten().tolist()
profile
{ "ME" : "DataEngineer, DataAnalyst" }

0개의 댓글