1. yield
아 진짜 하기 싫다 이거.. 여튼 시작.
recursive한 방법은 비효율적이다.
너무 비효율적이다
비슷한 top-down 방식의 fibo는 두 방향으로 갈리기 때문에 엄청나게 비효율적이다.
효율적이다.
뒤에서부터 맨 앞으로, 거꾸로 출력
return하면 첫 반환하고 함수가 죽어버린다.
next가 없어서 그만뒀다.
tuple을 iterable로 만들어버렸고, next의 끝은 항상 stopiteration
list comprehension
a는 generator라서 필요할 때 특정값을 딱 넘겨준다.
ex) for loop을 도는거니까 print(i)하면 다시 a한테 가는데 이 때 a는 list가 아니고 그냥 그 때 특정 값만 넘겨주고 바로 다음값을 구해서 대기하고 있음. 뭔소리냐면
0 전달, 0 출력, 1 전달, 1 출력, ... 이게 a라는 list가 아니라 generator에서 받는거라 메모리를 잡아먹지 않는다는 뜻.
그냥 a한테 받아와도 되는데 next(a)를 사용하면 다음 값을 전달받을 수 있다.
iter()는 callable을 반복가능한 객체로 바꿔준다. 그런데 이 경우 char(a)가 바로 return되고 끝나버린다.
iterable로 바꿔줘도 it의 next는 a 밖에 없다.
한번 더 해주면 stopiteration 걸린다. return이라 함수 호출이 더이상 안되기 때문.
그런데 여기서 yield char해버리면 a,b,c 다 반환된다.
tmp가 generator의 역할을 한다. 이게 똑같은 comprehension 같은데 괄호 씌우면 generator고 아니면 list더라.
안에서 iteration 돌아서 값을 생성하고 이를 한 메모리에 보관했다가 순차적으로 불리울 때만 호출하기 때문이다.
처음부터 끝까지 역출력한다.
g, og, oog, doog 반환
현재 my_num의 next()를 반환하는거라 이렇게 출력되는거 같다.
2. lambda
labmda x,y : expression
이런 함수를 특정 변수에 할당한 다으메 활용한다. 아니면 직접 써도된다.
lambda x,y: exp)(3, 3.14) 처럼 쓴다.
아니면 map함수 쓰기도 하는데 이거는 특정 iterable 객체에서 원소 빼와서 대입해서 반환한다.
filter는 True인 값만 반환한다.
'프로그래밍언어 > python' 카테고리의 다른 글
[파이썬문법] 16. class 상속 & class/static method (0) | 2022.04.22 |
---|---|
[파이썬문법] 16. class 변수 & property & decorator (0) | 2022.04.22 |
[파이썬문법] 14. 전역/지역변수 & *args/**kwargs (0) | 2022.04.22 |
[파이썬문법] 13. 고급파이썬문법(1) (0) | 2022.04.18 |
[파이썬] openpyxl & selenium 활용법 (0) | 2022.02.08 |