Language 10

[Effective Python] Better way 10. 대입식을 사용해 반복을 피하라

Better way 10. 대입식을 사용해 반복을 피하라 fresh_fruit = { 'apple': 10, 'banana': 8, 'lemon': 5, } def make_lemonade(count): print(f'Making {count} lemons into lemonade') def out_of_stock(): print('Out of stock!') count = fresh_fruit.get('lemon', 0) if count: make_lemonade(count) else: out_of_stock() 위 코드에서 count 변수는 if 문의 첫 번째 블록 안에서만 쓰인다. if 앞에서 count를 정의하면 else 블록이나 그 이후의 코드에서 count 변수에 접근해야 할 필요가 있는 것 ..

Language/Python 2022.08.23

[Effective Python] Better way 9. for나 while 루프 뒤에 else 블록을 사용하지 말라

Better way 9. for나 while 루프 뒤에 else 블록을 사용하지 말라 파이썬은 다음과 같은 문법이 가능함 # a, b가 서로소임을 검사하려함 a = 4 b = 9 for i in range(2, min(a, b) + 1): print('검사 중', i) if a % i == 0 and b % i == 0: print('서로소 아님') break else: # for 문이 끝까지 돌고나면 실행되는 블록 print('서로소') 하지만 동작이 직관적이지 않고 혼동을 야기할 수 있으므로 쓰지 않는 것이 좋음 def coprime(a, b): for i in range(2, min(a, b) + 1): if a % i == 0 and b % i == 0: return False return Tru..

Language/Python 2022.08.22

[Effective Python] Better way 8. 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip을 사용하라

Better way 8. 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip을 사용하라 zip 내장 함수를 사용해 여러 이터레이터를 나란히 이터레이션 할 수 있다. zip은 튜플을 지연 계산하는 제너레이터를 만든다. 따라서 무한히 긴 입력에도 zip을 쓸 수 있다. 입력 이터레이터의 길이가 서로 다르면 가장 짧은 이터레이터 길이까지만 출력한다. names = ['Cecilia', 'Lise', 'Marie'] counts = [len(n) for n in names] # 두 리스트를 동시에 이터레이션 할 경우 names의 길이를 사용해 이터레이션 할 수 있음 longest_name = None max_count = 0 for i in range(len(names)): count = counts[i] ..

Language/Python 2022.08.22

[Effective Python] Better way 7. range보다는 enumerate를 사용하라

Better way 7. range보다는 enumerate를 사용하라 range에 대해 루프를 돌면서 시퀀스의 원소를 인덱스로 가져오기 보다는 enumerate를 사용 enumerate의 두 번째 파라미터로 어디부터 원소를 가져오기 시작할 지 지정할 수 있음 (디폴트는 0) enumerate는 이터레이터를 lazy generator로 감싼다. enumerate는 루프 인덱스와 이터레이터의 다음 값으로 이뤄진 쌍을 넘겨준다.(yield) flavor_list = ['바닐라', '초콜릿', '피칸', '딸기'] it = enumerate(flavor_list) print(next(it)) print(next(it)) >>> (0, '바닐라') (1, '초콜릿') 가장 깔끔한 예 for i, flavor in..

Language/Python 2022.08.18

[Effective Python] Better way 6. 인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라

Better way 6. 인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라 튜플에 있는 값은 숫자 인덱스를 사용해 접근 할 수 는 있지만 튜플이 만들어 진 후에 인덱스를 통해 새 값을 대입해서 튜플을 변경할 수는 없다. 언패킹은 튜플 인덱스를 사용하는 것 보다 가독성이 좋음. 리스트, 시퀀스, 이터러블 안에 여러 계층으로 이터러블이 들어간 경우 등 다양한 패턴을 언패킹 구문에 사용할 수 있음. favorite_snacks = { '짭쪼름한 과자': ('프레즐', 100), '달콤한 과자': ('쿠키', 180), '채소': ('당근', 20), } ((type1, (name1, cals1)), (type2, (name2, cals2)), (type3, (name3, cals3))) = favori..

Language/Python 2022.08.18

[Effective Python] Better way 5. 복잡한 식을 쓰는 대신 도우미 함수를 작성하라

[Effective Python] Better way 5. 복잡한 식을 쓰는 대신 도우미 함수를 작성하라 다음과 같이 URL의 질의 문자열(query string)을 parsing 한다고 가정하자. from urllib.parse import parse_qs my_values = parse_qs('빨강=5&파랑=0&초록=', keep_blank_values=True) print(repr(my_values)) >>> {'빨강': ['5'], '파랑': ['0'], '초록': ['']} 일부 질의 문자열 파라미터는 여러 값이 들어 있고, 일부 파라미터는 값이 하나만 들어 있으며, 이름은 있지만 값이 비어있거나, 아예 없을 수도 있음 결과 딕셔너리에 get 메서드를 사용하면 상황에 따라 다른 값이 반환됨. p..

Language/Python 2022.08.18

[Effective Python] Better way 4. C 스타일 형식 문자열을 str.format과 쓰기보다는 f-문자열을 통한 인터폴레이션을 사용하라

Better way 4. C 스타일 형식 문자열을 str.format과 쓰기보다는 f-문자열을 통한 인터폴레이션을 사용하라 파이썬에서 문자열의 사용 사용자 인터페이스 또는 명령줄 유틸리티에 메시지를 표시 파일과 소켓에 데이터를 씀 어떤 일이 잘못됐는지 Exception에 자세히 기록할 때 디버깅을 할 때 파이썬에서 C 스타일 형식 문자열(%로 포맷팅)을 사용할 때 문제점 형식화 식에서 tuple 내 데이터 값의 순서를 바꾸거나 값의 타입을 바꾸면 타입 변환이 불가능 함 key = 'my_var' value = 1.234 formatted = '%-10s = %.2f' % (key, value) print(formatted) >>> my_var = 1.23 # key, value의 위치를 바꾸면 에러 re..

Language/Python 2022.08.17

[Effective Python] Better way 3. bytes와 str의 차이를 알아두라

Better way 3. bytes와 str의 차이를 알아두라 bytes 타입의 인스턴스에는 부호가 없는 8 바이트 데이터가 그대로 들어간다. a = b'h\x65llo' print(list(a)) print(a) >>> [104, 101, 108, 108, 111] b'hello' str 인스턴스에는 사람이 사용하는 언어의 문자를 표현하는 유니코드 코드 포인트가 들어 있다. a = 'a\u0300 propos' print(list(a)) print(a) >>> ['a', '̀', ' ', 'p', 'r', 'o', 'p', 'o', 's'] à propos str 인스턴스에는 직접 대응하는 이진 인코딩이 없고 bytes에는 직접 대응하는 텍스트 인코딩이 없다. → 유니코드 데이터를 이진 데이터로 변환..

Language/Python 2022.08.16

[Effective Python] Better way 2. PEP 8 스타일 가이드를 따르라

Better way 2. PEP 8 스타일 가이드를 따르라 PEP 8 은 파이썬 코드를 어떤 형식으로 작성할지 알려주는 스타일 가이드 커뮤니티의 공통된 코드 스타일을 공유하면 프로젝트를 수행할 때 더 쉽게 협력할 수 있음 공백 탭 대신 스페이스를 사용해 들여쓰기하라. 문법적으로 중요한 들여쓰기에는 4칸 스페이스를 사용하라. 라인 길이는 79개 문자 이하여야 한다. 긴 식을 다음 줄에 이어서 쓸 경우에는 일반적인 들여쓰기보다 4 스페이스를 더 들여써야한다. 파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣어라. 클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한 줄 넣어라. 딕셔너리에서 키와 콜론(:) 사이에는 공백을 넣지 않고, 한 줄 안에 키와 값을 같이 넣는 경우에는 콜론 다음에 스페이스를 ..

Language/Python 2022.08.16

[Effective Python] Better way 1. 사용 중인 파이썬의 버전을 알아두라

Batter way 1. 사용 중인 파이썬의 버전을 알아두라 파이썬에서 가장 널리 쓰이는 오픈 소스 라이브러리의 대다수는 파이썬3에 호환되거나 파이썬3에 초점을 맞춘다. # 파이썬의 버전을 정확히 알고 싶으면 --version를 사용 python --version # 내장 모듈인 sys의 값을 검사하면 현재 실행 중인 파이썬 버전을 알아낼 수 있음 import sys print(sys.version_info) print(sys.version)

Language/Python 2022.08.16