목록프로그래밍/Python (27)
Developer_Neo
네스티드 함수(Nested Function) - 중첩 함수로써 함수 안에 정의된 함수를 의미한다. 예로 살펴보자 def maker(m): def inner(n): return m*n return inner fl=maker(2) f1(7) # 14 위에서 inner함수가 네스티드 함수가 된다. 이게 왜 가능하냐? 파이썬의 함수는 객체이다 이렇기 때문에 다른함수를 호출할때 인자로도 전달이 가능하기 때문이다. 위의 코드에서 maker함수에서 m이 벗어나면 m은 사라지게 되는데 어떻게 inner함수가 알고선 계산을 올바르게 하는가? 클로저로 알아보자 클로저 위의 질문에 답변을 해보자면 정의한 inner함수가 변수 m의 값을 어딘가에 살짝 저장해두고 쓴다는 것이다. 따라서 안쪽에 위치한 네스티드 함수가 자신이 필..
[python] 연산자 오버로딩, 정보은닉과 , __dict__ [python] 연산자 오버로딩, 정보은닉과 , __dict__ 연산자 오버로딩 __add__(self, other) : + 연산자(A + B또는 A += B) __iadd__(self, other) : + 연산자(A += B) __sub__(self, other) : - 연산자(A - B, A -= B) __isub__(self, other) : - 연산자(A -= B) __.. devloper-dreaming.tistory.com 에서 보았듯이 정보은닉관점에서 객체가 갖는 값에 직접 접근하는 것은 오류의 확률을 높일 수 있으므로 메소드를 통해 접근하는 것이 안전하다고 했었다. 그래서 나온 메소드들은 getter와 setter인데 메소드 ..
연산자 오버로딩 __add__(self, other) : + 연산자(A + B또는 A += B) __iadd__(self, other) : + 연산자(A += B) __sub__(self, other) : - 연산자(A - B, A -= B) __isub__(self, other) : - 연산자(A -= B) __mul__(self, other) : * 연산자(A * B, A *= B) __truediv__(self, other) : / 연산자 __floordiv__(self, other) : // 연산자 __mod__(self, other) : % 연산자 __pow__(self, other) : ** 연산자(pow(A, B)) __and__(self, other) : and 연산자 __not__(sel..
파이썬의 클래스 역시 상속이라는 것을 할 수 있다. class Father: def run(self): print("so fast!!!") class Son(Father): def jump(self): print("so high!!!") def main(): s = Son() s.run() s.jump() main() ''' so fast!!! so high!!! ''' 위의 코드를 보면 클래스가 Father와 Son이 있는 것을 볼 수 있다. 여기에서 상속이라는 것을 했는데 바로 class Son(Father): 이 문장이었다. 이렇게 상속을 하게 되면 Son은 자식클래스이자 서브, 하위클래스가 되고 Father는 부모클래스이자 슈퍼, 상위 클래스가 된다. 따라서 Son클래스를 이용해서 만든 객체는 F..
네임드 튜플 왜? tri_one = (12,15) print(tri_one) (12, 15) 위의 코드를 보면 우리는 그냥 아 12와 15를 저장해둔 변수구나라고 생각을 한다 하지만 코드를 쓴 사람의 의도는 삼각형을 나타내는 거였고 각각 12 15는 밑변과 높이를 뜻하는 정보였다. 이렇게 됬을때 서로의 소통적이 문제가 발생할 수 있다. 그래서 쓰는 것이 네임드 튜플이다. 추가적으로 파이썬에서는 클래스에 대한 부분을 따로 작성하는 부분으로 네임드튜플로 했지만 3.7버전이후부터는 @dataclass라는 어노테이션을 이용해서 만들 수 있게 되어 네임드 튜플을 사용빈도가 줄어들었다. from dataclasses import dataclass @dataclass class User: id: int name: s..
제너레이터 - iterator객체의 한 종류로 next함수를 호출하면 값을 하나씩 얻을 수 있다. 제너레이터를 함수기반으로 만드는 법 yield가 들어갈것! yield가 하나라도 들어가면 제너레이터가 된다. def num_generator(): print('first') yield 0 print('second') yield 1 print('third') yield 2 >>> def num_generator(): print('first') yield 0 print('second') yield 1 print('third') yield 2 >>> gen=num_generator() >>> next(gen) first 0 >>> next(gen) second 1 >>> next(gen) third 2 >>> n..
처음에 Iterable객체와 Iterator객체는 무슨차이가 있는지 iter()와 next()함수는 언제 쓰는지에 대해 많이 혼동되었다. 그래서 정리하게 되었다. Iterable객체(자료형) 컨테이너 자료형 - 문자열, 튜플, 집합, 사전 내장함수 - range(), reversed(), enumerate(), filter(), map(), zip() Iterator객체 iter함수를 거쳐서 나온 것으로 iter함수가 생성해서 반환하는 객체이다. next()함수로 객체 안의 다음 값을 쉽게 얻을 수 있다. ir = iter( iterable객체 ) 로써 선언을 하면 ir은 Iterator객체된 것이고 next()함수를 사용할 수 있따는 것이다. next( iterator객체 ) 따라서 계속해서 next함..
Comprehension의 사전적 의미 - 이해, 이해력, 포용, 포용력, 포함, 압축 파이썬에서의 Comprehesion - 리스트(list), 집합(set), 딕셔너리(dictionary) 자료형에 대해 사용될 수 있다 방법 [ 표현식 for 변수 in iterable객체 ( if 조건식 ) ] { 표현식 for 변수 in iterable객체 ( if 조건식 ) } { 표현식(인데 key : value로) for 변수 in iterable객체 ( if 조건식 ) } 2. List Comprehension [ 표현식 for 변수 in iterable객체 ( if 조건식 ) ] A = [ ] for x in range(1,11): A.append(x*x) print(A) ''' [결과] [1, 4, 9,..