본문 바로가기

파이썬

[윤성우의 열혈 파이썬 중급편] 08. 두 함수를 대신하는 리스트 컴프리헨션 출처 : 윤성우의 열혈 파이썬 : 중급 08. 두 함수를 대신하는 리스트 컴프리헨션 map과 filter를 대신하는 리스트 컴프리헨션 st1 = [1, 2, 3] st2 = list(map(lambda n: n**2, st1)) st2 = [n**2 for n in st1] st = [1, 2, 3, 4, 5] ost = list(filter(lambda n: n % 2, st)) ost = [n for n in st if n % 2] st = list(range(1, 11)) fst = list(map(lambda n: n**2, filter(lambda n: n % 2, st))) fst = [n**2 for n in st if n % 2] map에 filter까지 더해지는 상황에서는 확실히 리스트 .. 더보기
[윤성우의 열혈 파이썬 중급편] 07. map & filter 출처 : 윤성우의 열혈 파이썬 : 중급 07. map & filter map def pow(n) return n ** 2 st1 = [1, 2, 3] st2 = [pow(st1[0]), pow(st1[1]), pow(st1h[2])] print(st2) # [1, 4, 9] st1 = [1, 2, 3] st2 = list(map(pow, st1)) print(st2) # [1, 4, 9] map 함수는 st1에 저장된 값들을 하나씩 전달하면서 pow 함수를 호출해준다 이 때 map의 두 번째 전달 대상은 iterable 객체여야 한다 map은 iterator 객체 하나를 반환한다 def pow(n) return n ** 2 st = [1, 2, 3] ir = map(pow, st) for i in ir:.. 더보기
[윤성우의 열혈 파이썬 중급편] 06. 객체처럼 다뤄지는 함수 그리고 람다 출처 : 윤성우의 열혈 파이썬 : 중급 06. 객체처럼 다뤄지는 함수 그리고 람다 파이썬에서는 함수도 객체 def func1(n): return n def func2(): print("hello") type(func1) # type(func2) # def say1(): print('hello') def say2(): print('hi-') def caller(fct): fct() caller(say1) # 매개변수에 함수를 전달 caller(say2) def fct_fac(n): def exp(x): return x ** n return exp f2 = fct_fac(2) f3 = fct_fac(3) f2(4) # 16 f3(4) # 64 함수를 정의하면 파이썬은 그 함수의 .. 더보기
[윤성우의 열혈 파이썬 중급편] 05. Iterable 객체와 Iterator 객체 출처 : 윤성우의 열혈 파이썬 : 중급 05. Iterable 객체와 Iterator 객체 iter 함수 ds = [1, 2, 3, 4] for i in ds: print(i, end = ' ') ir = iter(ds) next(ir) # 1 next(ir) # 2 next(ir) # 3 next(ir) # 4 next(ir) # StopIteration error iter 함수는 리스트에서 값을 꺼내는 기능을 제공하는 객체를 생성해서 반환 꺼내는 방법과 꺼낸 값을 처리하는 방법에 있어서도 유연성이 생긴다 Iterable 객체와 Iterator 객체의 구분 iterable 객체를 대상으로 iter 함수를 호출해서 iterator 객체를 만든다 iterator 객체를 생성할 수 있는 대상이.. 더보기
[윤성우의 열혈 파이썬 중급편] 04. list comprehension 출처 : 윤성우의 열혈 파이썬 : 중급 04. list comprehension list comprehension r1 = [1, 2, 3, 4, 5] r2 = [] for i in r1: r2.append(i*2) r2 = [x*2 for x in r1] 조건 필터 추가하기 r1 = [1, 2, 3, 4, 5] r2 = [] for i in r1: if i % 2: r2.append(i*2) r2 = [x*2 for x in r1 if x % 2] 더보기
[윤성우의 열혈 파이썬 중급편] 03. 깊은 복사와 얕은 복사 출처 : 윤성우의 열혈 파이썬 : 중급 03. 깊은 복사와 얕은 복사 v1 == v2 : 두 변수가 참조하는 객체의 내용이 같은가? v1 is v2 : 두 변수가 참조하는 객체는 동일 객체인가? r1 = [1, 2, 3] r2 = [1, 2, 3] r1 is r2 # False r1 == r2 # True r1 = [1, 2, 3] r2 = r1 r1 is r2 # True r1 = ['John', ('man', 'USA'), [175, 23]] r2 = list(r1) r1 is r2 # False r1[0] is r2[0] # T r1[1] is r2[1] # T r1[2] is r2[2] # T 리스트는 각 값들을 (객체) 리스트 내에서 참조하는 형태이다 .. 더보기
[윤성우의 열혈 파이썬 중급편] 02. 수정 가능한 객체와 수정 불가능한 객체 출처 : 윤성우의 열혈 파이썬 : 중급 02. 수정 가능한 객체와 수정 불가능한 객체 수정 불가능한 객체(immutable object) : 객체가 지닌 값의 수정이 불가능한 객체 tuple, string ... 수정 가능한 객체(mutable object) : 객체가 지닌 값의 수정이 가능한 객체 list, dictionary ... r = [1,2] id(r) r += [3,4] id(r) # 리스트의 주소가 바뀌지 않음 t = (1,2) id(t) t += (3,4) id(t) # t에 저장된 튜플이 바뀌었음을 확인 성격에 따라 달라지는 함수의 정의 def add_last(m, n): m += n r = [1, 2] add_last(r, [3, 4]) print(r) # [1.2.3.4] t = (.. 더보기
[Effective Python 복습] Chapter 5. 병행성과 병렬성 21. 키워드 전용 인수로 명료성을 강요하자 키워드 인수는 함수 호출의 의도를 더 명확하게 해준다 특히 불 플래그를 여러 개 받는 함수처럼 헷갈리기 쉬운 함수를 호출할 때 키워드 인수를 넘기게 하려면 키워드 전용 인수를 사용하자 파이썬3는 함수의 키워드 전용 인수 문법을 명시적으로 지원한다 리스트에 있는 * 기호는 위치 인수의 끝과 키워드 전용 인수의 시작을 기리킨다 def safe_division_c(number, diviser, *, ignore_overflow=False, ignore_zero_division=False): # ... safe_division_c(1, 10**500, True, False) # TypeError safe_division_c(1, 0, ignore_zero_divisi.. 더보기
[Effective Python 복습] Chapter 4. 메타클래스와 속성 파이썬 코딩의 기술 Chapter4. 메타클래스와 속성 - 메타클래를 이용하면 파이썬의 class문을 가로채서 클래스가 정의될 때마다 특별한 동작을 제공할 수 있다 - 또 하나의 강력한 기능은 속성 접근을 동적으로 사용자화하는 파이썬의 내장 기능이다 - 동적 속성은 객체들을 오버라이드하다가 예상치 못한 부작용을 일으키게 할 수 있다 - 최소 놀랍 규칙을 따르자 29. getter와 setter method 대신에 일반 속성을 사용하자 간단한 공개 속성을 사용하여 새 클래스 인터페이스를 정의하고 setter와 getter method는 사용하지 말자 객체의 속성에 접근할 때 특별한 동작을 정의하려면 @property를 사용하자 @property method에서 최소 놀람 규칙을 따르고 이상한 부작용은 피하.. 더보기
[Effective Python 복습] Chapter 3. 클래스와 상속 파이썬 코딩의 기술 Chapter3. 클래스와 상속 22. 딕셔너리와 튜플보다는 헬퍼 클래스로 관리하자 다른 딕셔너리나 긴 튜플을 값으로 담은 딕셔너리를 생성하지 말자 정식 클래스의 유연성이 필요 없다면 가변운 불변 데이터 컨테이너에는 namedtuple을 사용하자 내부 상태를 관리하는 딕셔너리가 복잡해지면 여러 헬퍼 클래스를 사용하는 방식으로 관리 코드를 바꾸자 class WieghtedGradebook(object): def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = {} def report_grade(self, name, subject, score, weight): by_subject = se.. 더보기