뜯고 또 뜯어보는 컴퓨터/파이썬 (Python)
-
Efficient python Ch24. 동적인 디폴트 인자 관리법뜯고 또 뜯어보는 컴퓨터/파이썬 (Python) 2021. 7. 31. 13:30
우리는 종종 정적으로 정해지지 않은 타입의 값(동적 타입: list, dict 등등)을 함수의 인자의 값으로 써야할 때가 있다. 예를 들어 로그 메시지와 시간을 함께 출력하고 싶다고 하자. from time import sleep from datetime import datetime def log(message, when=datetime.now()): print(f'{when}: {message}') log("안녕") sleep(0.1) log("다시 안녕") 더보기 2021-07-31 13:06:21.846984: 안녕 2021-07-31 13:06:21.846984: 다시 안녕 하지만, sleep=0.1 이 호출되었는데도, 시간은 변하지 않고, 그대로 출력되었는데, 이유는 다음과 같다. 파이썬에서는 ..
-
Efficient Python 23. 키워드 인자 사용법뜯고 또 뜯어보는 컴퓨터/파이썬 (Python) 2021. 7. 30. 01:28
- 다음과 같은 함수를 살펴보자. def remainder(number, divisor): return number % divisor assert remainder(20, 7) == 6 # remainder(20,7) # remainder(20, divisor= 7) # remainder(number= 20, divisor = 7) # remainder(divisor= 7, number= 20) - 파이썬에서는 함수에 값을 넘길때, 밑의 4가지 경우와 같이 키워드를 선택해서 넘길 수 있는데, 이를 파이썬의 키워드인자라 한다.(뭐지... 답을 말해주고 답이라 하는 느낌이다.. ㅎㅎ) - 키워드 인자의 규칙에는 다음과 같은 규칙성이 존재한다. 위치 기반 인자를 사용하려면 키워드 인자보다 앞에 지정해야 한다,..
-
Efficient Python 22. 변수위치 인자(*Args) 사용법뜯고 또 뜯어보는 컴퓨터/파이썬 (Python) 2021. 7. 30. 01:03
파이썬 뿐 아니라 다른 언어에서도 함수의 위치인자(positional argument)를 가변적으로 받을 수 있으면, 함수 호출이 더욱 깔끔해진다.이를 가변인자(varargs)나 스타인자(star args)라고 부르기도 한다. 예를 들어 디버깅정보를 로그로 남기는 함수를 구현해볼때 인자수가 고정돼 있으면 메시지와 같이 list값을 받는 함수가 필요하다. def log(message,values): if not values: print(message) else: values_str = ",".join(str(x) for x in values) print(f'{message}: {values_str}') log("내숫자는",[1,2]) log("안녕",[]) 더보기 내숫자는: 1,2 안녕 이때, 빈 리스트를..
-
Effective Python 21. 클로져란뜯고 또 뜯어보는 컴퓨터/파이썬 (Python) 2021. 7. 30. 00:17
1. 파이썬의 클로저와 변수영역의 이해 - 클로저를 보기 전, 먼저 숫자로 이루어진 List 에서 몇개의 변수(group 데이터)만을 앞으로 오고자 하는 경우를 생각해보자. def sort_priority(values, group): """ values 의 값들 중, group에 표현되어 있는 값들만 정렬해서 앞으로 빼오고 싶다, """ def helper(x): if x in group: return (0,x) else: return (1,x) values.sort(key=helper) numbers = [8,3,1,2,5,4,7,6] group = [2,3,5,7] sort_priority(numbers, group) print(numbers) 더보기 [2, 3, 5, 7, 1, 4, 6, 8] - ..
-
Effective python ch20. None보다는 예외를뜯고 또 뜯어보는 컴퓨터/파이썬 (Python) 2021. 7. 29. 23:25
다음과 같은 예가 있다고 해보자. ZeroDivisionError가 발생했으므로, 0 보다는 None을 반환하는 것이 자연스러워보인다. 하지만 반환한 결과( == None 을 의미) 를 사용하는 if 문등의 조건에서 평가할때, None이 문제를 야기할 수 있으므로, 이를 살펴보자 (0이나 ""가 문제가 될 수 있음) In [1]: def careful_device(a,b): try: return a/b except ZeroDivisionError: return None In [2]: # 적절히 해석하였을시. x, y = 1, 0 result = careful_device(x,y) if result is None: print("잘못된 입력") 잘못된 입력 In [3]: # 잘못 사용된 예시. x, y = ..