본문 바로가기

노력/인공지능

(9)
9. 파이썬 개인공부 (복습, 요약) 데이터 타입 데이터 타입 시퀀스 뮤터블 이터러블 int X X X float X X X complex X X X bool X X X str O X O bytes O X O bytearray O O O tuple O X O list O O O dictionary X O O set X O O range O X O int, float, complex, bool은 모두 단일형. str, bytes, bytearray는 문자열을 나타내는 형. 모두 시퀀스이며 이터러블형이다. str과 bytes는 이뮤터블. tuple과 list는 유사하지만 tuple은 변화할 수 없는 이뮤터블형이다. dictionary는 3가지 딕셔너리 뷰(dictionary view)를 가진다. keys()values()items()dictio..
8. 파이썬 개인공부 8 (클래스) 오픈소스 기반으로 개발함. 다들 고급기법을 써서 이해하지 못하면 사용을 할 수가 없다. Ephiphany : 자신도 모르게 깨닫는 것. class A: def quark(self): print('a') class B: def quark(self): print('b') def x(t): print(t.quark()) x(A())x(B()) 이렇게 A와 B를 상속하지 않으면서 같은 함수를 만들면서 다른 클래스로 선언할 수 있다. 이런 것을 덕타이핑이라고 한다. Type 1. 상속 sequence 2. protocol을 따른다. 이터러블이라는 최상위 객체를 상속해서 사용할 수 있고, 덕타이핑을 제공한다. 이터러블이 아닌데도 같은 것을 할 수 있는 경우가 있다. 덕타이핑을 제공하기 때문에... is.... : ..
7. 파이썬 개인공부 7 (객체) OOP 파이썬은 모든 것이 객체이다. -> 기본 패러다임이 객체지향 우리가 풀 문제가 간단하면 함수형, 객체형 패러다임 필요없다. 절차적으로도 가능. 하지만 실제 문제는 굉장히 복잡하다. 이럴 때 함수형, 객체형 패러다임이 필요하다. 공통된 특성을 객체로 만든다. 사용하기 위해 인스턴스화 한다. 함수, 클래스 선언: 함수 사용 : 함수 호출 클래스 사용 : 인스턴스화 인스턴스화 할 때 클래스 안의 __init__의 파라미터와 맞춰서 사용한다. class Door: def __init__(self, number, status): self.number = number self.status = status def open(self): self.status = 'open' def close(self): self..
6. 파이썬 개인공부 6 (함수) side effect가 없는 함수 : 수학함수. math functions. pure 함수 mutable 안쓴다. 수학적 함수가 아니다: 1. 리턴값이 없다. 2. 함수에 넣어서 사용했는데 원래 값이 바뀌어서 나온다. 수학적 함수라면 퓨어함수라고 부른다. first class function이면 값처럼 사용할 수 있다. 값 바뀌는 코드 거의 안쓴다. a = 1b = a+1 higher-order functions : 함수를 받아서 함수를 리턴해주는 함수. map, filter, reduce : 대표적인 higher-order functions 반복의 단점을 극복하기 위해서 for-while 대신에 comp, map, iterator, generator 등을 사용한다. a = [1,2,3,4,5]list(..
5. 파이썬 개인공부 5 (함수형 패러다임) functional paradigm에서는 어떤 값을 튜플로 주로 사용한다. 모든 것은 함수 기반이다. a = 0b = a+1a = 3 - 절차적 패러다임 절차적 패러다임은 일일히 다 보아야 사용할 수 있다. 함수형 패러다임은 유지보수가 간편하다. (함수가 잘 짜여져 있는지만 확인하면 된다.) 우리의 주 패러다임은 객체지향이다. 객체지향과 함수형 패러다임은 비슷한 편. %timeit ((((1+2)+3)+4)+5)100000000 loops, best of 3: 14.7 ns per loop %timeit (1+(2+(3+(4+5))))10000000 loops, best of 3: 14.9 ns per loop 괄호 하나차이로도 속도의 차이가 크게 난다. 파이썬은 앞에서부터 계산하기 때문. 절차적 패러다..
4. 파이썬 개인공부 4 (반복) 피보나치 수열 : 1 1 2 3 5 8 13 ... dynamic programming : 결과를 계속 이어서 사용하는 기법 -> 가장 기본적으로 피보나치 구현하는 방법 def fib(n): a, b = 0, 1 while a 이 기법에 익숙해져야 한다. 재귀 : 나를 나보다 더 작은 단위로 나누어서 다시 호출하는 방식 느려서 재귀방식을 쓰지 말라고 하는 언어가 있다. 현대적인 언어들은 언어단에서 function의 결과를 저장해서 다시 재귀함수의 속도가 느리지 않다. 파이썬은 tai..
3. 파이썬 개인공부 3 (데이터 타입, 함수) 값을 생성하는 방식: 리터럴 방식, 객체 방식 딕셔너리를 생성하는 리터럴 방식 : {'a':1, 'b':2}딕셔너리를 생성하는 객체 방식 : dict(a=1,b=2) 함수 : def moon(a, a) : return a 함수의 파라미터가 두 개 같은 것이 들어간다면 에러발생 {'a':1, 'a':2} : 나중것으로 할당되는다.dict(a=1, a=2) : 위의 이유로 에러발생, 좋은 개념은 아니다. def moon(a=3): return a 위 처럼 파라미터의 기본값을 두면 moon()처럼 입력값이 없어도 기본값인 3이 출력된다. def moon(a=3, b=7): return a+b 파라미터는 순서대로 들어간다.(positional 방식) 직접 명시해주는 방식은 keyword 방식 moon(a=1, ..
2. 파이썬 개인공부 2 (데이터 타입) 많이 사용하는 것은 리터럴이 있다. range, bytearray, frozenset처럼 객체방식을 쓸 필요가 없다. x = bytearray() 리터럴이지만 어쩔 수 없이 객체를 사용해야 하는 것 : 집합 y = set() : 이렇게 해야 공집합을 만들 수 있다. b = list(range(10))b : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]10b = [range(10)]b : [range(0, 10)] 리스트를 리터럴로 선언하는 방식과 그냥 대괄호로 선언하는 방식이 조금 다르다. 중복이 있는 리스트를 set()으로 덮어버리면 중복이 제거된 상태로 출력된다. 딕셔너리: 그냥 일반적인 선언: y = {"a":1, "b":2}, y = {3:1, "b":2} -> 이렇게 숫자를 사용한 키도..