3. About Python. 1. 파이썬 개요 및 설치
파이썬이란?
- 1991년 귀도 반 로썸이 발표한 인터프리터 언어
- 3대 구글 언어
- 구글 안드로이드 지원
특징
- 가독성 : 블록 들여쓰기 구분
- 풍부한 라이브러리
- 접착성 : C 모듈과 연계가능
- 무료
- 유니코드
- 동적타이핑: 런타임시 타입 체크, 자동 메모리 관리
파이썬의 종류
- Cpython : C로 작성된 파이썬 (파이썬)
- Jthons : java로 구현된 파이썬, 자바 가상머신에서 작동 가능, 자바 클래스 이용
- Ironthon : c#으로 구현
- Pypy : 파이썬으로 구현된 파이썬
4. 버전의 변화 1. 파이썬 개요 및 설치
파이썬 2.x 와 3 는 하위 호환성을 유지 하고 있지 않다.
1. print 함수의 변화
print “welcome to”, “python 3k” print (“welcome to”, “python3k”)
괄호의 추가, 구분자 ,끝라인, 출력 지정 가능(8장 입출력)
2. long 형 대신에, int 형만
type(2**31) type(2**31) <2의 31 제곱근>
<type long> <class int>
int/int 의 결과는 int 가 아니라, float
1/2 = 0
3/2 = 1
3/2 = 1.5
5. 버전의 변화 1. 파이썬 개요 및 설치
3. String, Unicode의 체계의 변화
2.x style
type(„가‟)
<type „str‟>
type<„가‟.decode(„utf8‟)>
<type „unicode‟>
type<u„가‟>
<type „unicode‟> 파이썬 2.x 에서는 일반 스트링이 인코딩 있는 문자열이었고
유니코드가 따로 있어서 디코딩으로 유니코드 변환을 해야
3 style 했는데, 파이썬 3에서는 따로 유니코드를 지정하지 않고 일반
스트링이 유니코드와 동일하고 인코딩이 있는 문자열을
bytes로 표현됩니다.
type<u„가‟>
Syntax error
type(„가‟)
<type „str‟>
type<„가‟.decode(„cp949‟)>
<type „bytes‟>
6. 파이썬 설치 및 실행 1. 파이썬 개요 및 설치
http://www.python.org/download
- 윈도우
- 맥
실습
- python idle 실행
7. 들여쓰기 1. 파이썬 개요 및
설치
들여쓰기(indentation)
- 파이썬의 가장 큰 특징
- 가독성을 높일수 있는 수단은 있으나, 버그를 찾기 어려운 면이 있다.
코드블록 1:
코드블록2 if a == 1:
코드블록 3: print(1)
코드블록4
- 코드블록2가 코드블록 1의 하위그룹임.
- 하위그룹이 오기 위해서는 바로 전에 콜론(:)이 사용되어야 한다.
- 동일한 코드블록 내, 정확히 같은 스페이스 같은 탭을 이용한 들여쓰기를 해야 한다.
>>> if a==1:
print(1)
print(2)
SyntaxError: unexpected indent
- 한줄로도 가능함. >>> if a==1: print(1)
8. 소스코드 인코딩 1. 파이썬 개요 및 설치
주석 #
>>> if a==1:
#vmflsxm
#adsfadf
print(2)
2
실행 파일과 소스코드 인코딩시 “#” 사용
#!/usr/bin/python
#coding:latin-1
Coding 지시자를 이용해서 인코딩 지정(디폴트 : 아스키(ASCII))
#-*- coding: utf-8 -*-
9. 기타 문법 1. 파이썬 개요 및 설치
세미콜론(;)
- 일반적인 프로그래밍언어에서 사용
- 붙여도 상관 없음.
- 단, 한 라인에 다 쓸경우 세미콜론으로 구분함.
문장이 끝나지 않았을 경우 “” 으로 그 사실을 명시해 줄수도 있음. (14p)
- but, 깨끗한 코드를 위해서 쓰지말자.
10. 2.x 를 3으로 변환하기 1. 파이썬 개요 및 설치
설치폴더/Tools/Scripts/ 의 2to3.py 를 이용
Test.py
def div(a):
print u"Result :",a/2
num = input("input any number:")
div(int(num))
seonghyeon-an-ui-MacBook-Pro:~ seonghyeonan$ /usr/bin/2to3 -w test.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored test.py
--- test.py (original)
+++ test.py (refactored)
@@ -1,4 +1,4 @@
def div(a):
- print u"Result :",a/2
-num = raw_input("input any number:")
+ print("Result :",a/2)
+num = input("input any number:")
div(int(num))
RefactoringTool: Files that were modified:
RefactoringTool: test.py
-w 옵션을 주지 않으면 어떻게 변경해야하는지만 화면에 출력되고 파일을 변경되지 않는다.
def div(a):
print("Result :",a/2)
num = input("input any number:")
div(int(num))
~
11. 변수명 2. 자료형
변수명 : 문자, 숫자, 언더바
- 숫자가 맨압에 올수 없다.
- 대소문자 구별
- 예약어는 변수명으로 사용할 수 없다. (for, whitle, class.. )
치환 연산자
- 변수명 = 값
다른 형태
- (a, b) = (1, 2) 튜플
- [c, d] = [3.4] - 리스트
- e=f=g=1 - 다중치환
12. 수치형 2. 자료형
수치형 데이터 타입
- int, long, float, complex
int : integer 10진수 정수
정수 앞에 „0o‟ 8진수, „0b‟ 2진수, „0x‟ 16진수
입력을 받아서 원하는 진수로 변환하는 함수 oct(), bin(), hex() : 출력이 문자열임.
>>> 0o10
8
>>> 0b10
2
>>> 0x10
16
>>> oct(a)
'0o144'
>>> hex(38)
'0x26'
>>> bin(a)
'0b1100100'
13. 수치형 2. 자료형
2.X버전에서는 int 형의 범위를 넘는것은 long 을 이용
3 버전 에서는 long형이 없어지고 모두 int 형으로 처리됨.
float : 실수형 표현
>>> type(3.14)
<class 'float'>
>>> type(314e-2)
<class 'float'>
복소수
>>> x= 3-4j
>>> type(x)
<class 'complex'>
>>> x.imag : 허수부
-4.0
>>> x.real : 실수부
3.0
>>> x.conjugate() :켤레복소수
(3+4j)
14. 수치형 2. 자료형
연산자
치환연산자 : =
더하기
빼기
곱하기
나누기
나머지(%)
거듭제곱(**)
: 제곱보다 거듭제곱의 연산이 우선순위가 더 높다.
정수 나누기(//)
: 나누기에서 몫(정수부)만 취함.
15. 문자열 2. 자료형
파이썬에서는 문자를 „ „ 또는 “” 으로 묶에서 표현한다.
>>> "ash84"
'ash84'
>>> 'ash84'
'ash84'
>>> 'ash84"
SyntaxError: EOL while scanning string literal
>>> type("ash84")
<class 'str'>
>>> type('ash84')
<class 'str'>
다량의 문자열 “”‟ 또는 „‟‟
>>> print(""" hello
my my car goo
d """)
hello
car goo
d
16. 문자열 2. 자료형
줄바꿈, 탭, 등의 특수문자의 표현
n : 줄바꿈
t : 탭
r : 캐리지리턴
0 : 널
:
‟ : „
” :”
>>> print("t hello n tom r john ")
hello
tom
john
18. 문자열 2. 자료형
문자열 인덱싱
첫번째 문자 : 0 부터 시작
>>> name = "ash84"
>>> name[0]
'a'
>>> name[5]
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
name[5]
IndexError: string index out of range
>>> name[0] = "p"
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
name[0] = "p"
TypeError: 'str' object does not support item assignment
>>>
인덱싱 오류
인덱싱을 이용한 문자열 변경은 안됨.
다만 문자열 전체를 재 할당시 가능 name=“psh84”
19. 문자열 2. 자료형
문자열 슬라이싱(변수명 [시작번호 : 끝번호])
>>> name[0:2]
'as'
>>> name[:-2]
'ash‟
>>> name[-2:]
'84'
>>>
음수의 경우, 문자열의 끝을 0으로 보고 센다.
: 위치를 생략한 경우, 문자열의 처음이나 끝위치로 간주한다.
문자열 <-> 수치 변환
각 타입 클래스의 생성자 이용
>>> str(3.14)
'3.14'
>>> int("0099")
99
>>> int("adsfas")
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
int("adsfas")
ValueError: invalid literal for int() with base 10: 'adsfas'
>>> float("32")
32.0
>>>
20. 유니코드 2.
자료형
인코딩이란?
= 각각의 문자열을 표현하는 방식
유니코드란 ?
= 세계의 모든 문자 코드들을 일관된 방식으로 표현할 수 있는 체계로 만든것.
파이썬 2.x 버전에서는 일반적인 문자열을 유니코드로 변경하는 unicode() 함수 및 문자열 앞에 „u‟를 붙여야 했음.
파이썬 3 버전에서는 일반 문자열이 모두 유니코드임.
- 개발자가 글자깨짐을 고려하지 않아도 됨.
- 유니코드 외의 인코딩이 있는 문자열의 bytes로 표현됨
>>> type("a")
<class 'str‟>
>>> "a".encode('utf-8')
b'a'
>>> type("a".encode('utf-8'))
<class 'bytes'>
>>> b = "a".encode('utf-8')
>>> type(b)
<class 'bytes'>
21. 유니코드 2.
자료형
유니코드 to 문자
>>> chr(97)
'a'
문자 to 유니코드
>>> ord('a')
97
현재 시스템의 인코딩 확인
>>> import sys
>>> sys.stdin.encoding
'us-ascii'
>>> sys.stdout.encoding
'us-ascii'
>>>
22. 리스트 2. 자료형
리스트
- 값의 나열
- 순서 존재
- 여러종류 담을수 있다.
- 0 부터 시작하는 인덱스 및 문자열 슬라이싱 가능.
>>> colors=['red','green','blue']
>>> type(colors)
<class 'list'>
>>> colors.append('gold') //append(문자열)
>>> colors
['red', 'green', 'blue', 'gold']
>>> colors
['red', 'pruple', 'green', 'blue', 'gold'] //insert(위치, 문자열)
23. 리스트 2. 자료형
extend()
>>> colors.extend(['white','black']) //extend() 한번에 여러값을 삽입, 리스트나 튜플 삽입등의 반복되는 값을 넣어야 함.
>>> colors
['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black‟]
>>> colors.extend("gray") //하나 삽입시 쪼개져서 들어감.
>>> colors
['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y']
더하기(+) 연산 지원
>>> colors+=["gray"]
>>> colors
['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']
반복되는 값으로 넣지 않으면, 쪼개져서 들어감.
index(문자열) : 문자열 위치 찾기 <가장 앞에 있는것 찾는다.>
Index(문자열, 시작위치) : 시작위치 이후에 문자열 위치 찾기
Index(문자열, 시작위치, 끝위치) : 시작위치와 끝 위치 사이의 문자열 위치 찾기
>>> colors+=["red"]
>>> colors.index("red")
0
>>> colors.index("red",1)
12
>>> colors.index("red",1,5)
SyntaxError: unexpected indent
>>>
24. 리스트 2. 자료형
현재 리스트내의 해당 문자열이 몇개 있는지 count()
Pop(위치) : 해당 위치의 문자열 추출 , 생략하면 제일 뒤에 있는것 추출
추출하고 나면 리스트 상에서 사라짐.
>>> colors.pop()
'red'
>>> colors
['red', 'pruple', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']
>>> colors.pop(1)
'pruple'
>>> colors
['red', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']
>>>
해당 문자열을 리스트에서 삭제 : remove(문자열) - 단순삭제
동일한 값이 2개 있으면, 앞에 있는것 먼저 삭제함.
>>> colors.append("red")
>>> colors
['red', 'green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray', 'red']
>>> colors.remove("red")
>>> colors
['green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray', 'red']
>>> colors.remove("red")
>>> colors
['green', 'blue', 'gold', 'white', 'black', 'g', 'r', 'a', 'y', 'gray']
>>> colors.remove("red")
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
colors.remove("red")
ValueError: list.remove(x): x not in list
27. 튜플 2.
자료형
튜플
- 리스트와 유사
- [] 대신에 () 표현
- 읽기전용임, 리스트에 비해서 함수가 적지만, 속도는 더 빠름.
- 2개의 함수, count() 와 index() 만 제공
>>> t = (1, 2, 3)
>>> type(t)
<class 'tuple'>
>>> t.count(1)
1
>>> t.index(2)
1
- 다중 할당 시, 사용됨.
>>> a, b = 1, 2
>>> print(a, b)
12
>>> (a, b) = (1, 2)
>>> print(a, b)
12
변수가 하나 더 필요한 swap 에도 간단히 해결 가능
>>> a,b = b, a
>>> print(a, b)
21
28. 리스트, 세트, 튜플 2.
자료형
>>> a
(1, 2, 3)
>>> type(a)
<class 'tuple'>
>>> b = list(a)
>>> b
[1, 2, 3]
>>> type(b)
<class 'list'>
>>> c = tuple(b)
>>> type(c)
<class 'tuple'>
>>> c
(1, 2, 3)
각각 list(), set(), tuple() 로 서로서로 변환이 가능함.
in 연산자 : 내부에 어떤 값이 있는지 확인할때, „값 in 리스트 또는 세트 또는 튜플‟
>>> 1 in a
True
>>> 2 in b
True
>>> 3 in c
True
>>> 5 in c
False
29. 사전 2.
자료형
사전 (키와 쌍으로 이루어짐. )
//생성자를 이용해서 사전 생성 , 키 = 값
>>> d = dict(a = 1, b = 3, c = 5)
>>> type(d)
<class 'dict'>
>>> d
{'a': 1, 'c': 5, 'b': 3}
>>> colors = {"apple":"red", "banana":"yellow"}
>>> colors
{'apple': 'red', 'banana': 'yellow'}
>>> type(colors)
<class 'dict'>
>>> colors["apple"] // 키로 값 가져오기
'red'
>>> colors['reds']
>>> colors['reds'] //키값없으면 에러
Traceback (most recent call last):
File "<pyshell#103>", line 1, in <module>
colors['reds']
KeyError: 'reds'
>>> colors[0] //인덱스 지원 안함.
Traceback (most recent call last):
File "<pyshell#106>", line 1, in <module>
colors[0]
KeyError: 0
30. 사전 2.
자료형
키값 추가
>>> colors["cherry"] = "red"
>>> colors
{'cherry': 'red', 'apple': 'red', 'banana': 'yellow'}
>>> colors["apple"] = "green” // 키값이 겹치면 해당키에 값 재할당
>>> colors
{'cherry': 'red', 'apple': 'green', 'banana': 'yellow'}
사전 가져오기 (items())
>>> for c in colors.items():
print(c)
('cherry', 'red')
('apple', 'green')
('banana', 'yellow')
>>> for a in colors.items():
print(a)
('cherry', 'red')
('apple', 'green')
('banana', 'yellow')
31. 사전 2.
자료형
키 가져오기 (keys())
>>> for a in colors.keys():
print(a)
cherry
apple
Banana
값 가져오기(values())
>>> for a in colors.values():
print(a)
red
green
yellow
32. 사전 2.
자료형
사전 삭제
del 이용, 키 값으로 하나씩 삭제 가능
>>> del colors["apple"]
>>> colors
{'cherry': 'red', 'banana': 'yellow'}
clear() 를 이용 한번에 모두 삭제
>>> colors.clear()
>>> colors
{}
다양한 자료형을 섞어서 사용 가능
>>> person = {"name":"ash84", "job":{1, 2, 3}}
>>> person
{'job': {1, 2, 3}, 'name': 'ash84'}
>>> type(person)
<class 'dict'>
33. bool 2. 자료형
Bool
- 참과 거짓을 나타내는 자료형 //bool() 함수의 사용
- True, False 만이 가능함.
- 논리연산 과 각종 비교연산의 결과로 사용
>>> bool(0)
>>> isexist = True False
>>> bool(-1)
>>> type(isexist)
True
<class 'bool'> >>> bool(1)
True
//대소문자 유의 >>> bool() // 빈문자열
>>> isexist = true; False
>>> bool("asdf")
Traceback (most recent call last):
True
File "<pyshell#150>", line 1, in <module> >>> bool(None)
isexist = true; False
NameError: name 'true' is not defined
비교연산
- <=, >= ,<, >, != , ==
논리연산
- and(&), or(|) not
수치를 논리연산에 사용
0 = False
음수를 포함한 다른 값 = True
34. 얕은복사/깊은복사에 대해서 2. 자료형
모든 변수는 해당객체의 주소를 가지고 있음.
A = 1 //1이란 객체 생성후 A라는 변수에 1 이란 객체의 주소를 저장함.
//a 와 b 가 같은 객체를 공유하게 됨.
>>> a = [1, 2, 3]
>>> b = a
>>> a[0] = 11
>>> a
[11, 2, 3]
>>> b
[11, 2, 3]
>>> id(a) // 주소 확인
4346207624
>>> id(b)
4346207624
//얕은 복사 : 주소값을 공유하는 것, 주소값을 복사해서 주는 형태
//예외 : int 형의 경우 깊은 복사 ????
>>> a = 10
>>> b = a
>>> id(a) // 주소 확인
4296853408
>>> id(b)
4296853408
>>> a
10
>>> b
10
>>> a = 3
>>> a
3
>>> b
10
35. 얕은복사/깊은복사에 대해서 2. 자료형
강제로 깊은 복사
>>> a = [1, 2, 3]
>>> b = a[:] // a 에 있는것을 처음부터 끝까지 다 복사 시켜라.
>>> a[0] = 10
>>> a
[10, 2, 3]
>>> b
[1, 2, 3]
>>>
일반적인 경우의 copy 모듈 사용
//
//깊은 복사
>>> import copy
>>> a = [1,2,3]
>>> b = copy.deepcopy(a)
>>> a[0] = 30
>>> a
[30, 2, 3]
>>> b
[1, 2, 3]
36. 함수의 정의 3. 함수
구조
def <함수명> (인수 1, 인수 2, ..): def times(a,b):
<구문> return a*
return <반환값>
함수의 생성과정(41p)
- 메모리 공간 어딘가에 함수객체가 생성
- 함수이름은 생성된 메모리 공간의 주소를 가리키는 역할을 함.
globals() : 현재 생성된 함수 객체를 볼수 있는 내장 함수.
mytimes = times
// 함수 레퍼런스(함수객체에 대한주소)를 다른 변수에 할당할 수 있음. 복사가 아닌 레퍼런스 복사
// mytimes, times 둘다 동일한 함수를 가리키고 있다.
37. return 3. 함수
- 다른 언어와 다르게 어떤종류의 객체도 돌려 줄수 있다.
- 여러값을 튜플로 묶어서 처리 할수 있음.
- return을 사용하지 않거나, return 만 적으면 None 값이 리턴됨.
- 오직 한개의 객체만 리턴 할수 있다. 여러개의 경우, 하나의 튜플 객체로 붂어서 리턴한다. (44p)
38. 인수 전달 3. 함수
- 파이썬에서 인수는 레퍼런스를 이용해서 전달
- 인수 변수의 변경가능성에 따라서 내부에서 처리하는 방식이 다르다. 변경가능성은 타입에 따라 다르다. (44p 예제)
- 변경불가능한 경우, 레퍼런스 방식으로 인수를 받아도, 함수 내부에서의 변경이 외부에 영향을 미치지 않는다.
global : x ->10
local ; x->1
global : x->10
- 변경이 가능한 경우 : 리스트, 튜플 ..
- 함수 안에서 변경하게 되면, 외부에 있는 것도 같이 변경하게 된다. (방지하려면 깊은 복사 (46p)
39. 스코핑 룰 3. 함수
이름 공간
: 프로그램에서 쓰이는 이름들이 저장되는 공간
a = [1, 2, 3]
- 1, 2, 3 리스트를 담는 메모리 공간이 생성되고, 그 메모리를 가리키는 주소를 a가 가지고 있음.
- “a” 라는 이름은 이름공간에 저장되게 된다.
- 이름은 미리 생성되지 않고, 치환될때, 만들어 지기때문에 이름은 이름공간에서 변경, 삭제, 검색이 가능하다.
함수의 이름 공간
- 함수는 함수만의 이름공간을 별도로 가진다.
- 함수내부의 변수는 함수 내부의 이름공간을 참조한다.
- 만약, 해당 변수를 함수 내부의 이름공간에서 찾지 못하면, 상위의 이름 공간에서 찾는다.
- 함수 내부를 지역영역, 외부를 전역영역, 파이썬 자체에서 정의한 내용을 내장영역
- LGB규칙 : 파이썬에서 이름을 검색하는 순서
- 함수에서 전역변수를 변경하려면, global 키워드를 사용하면 됨. (47p)
- 내장영역 이름 보기 __builtins__
40. 함수 인수 3. 함수
파이썬의 4가지 함수 인수의 모드 : 기본값 인수, 키워드 인수, 가변인수 리스트, 정의되지 않은 인수
기본인수
- 인수에 기본값을 지정하는것, 인수를 전달하지 않아도 처리됨(49p), 기본값 인수가 뒤에는 일반인수가 올수 없음.
키워드 인수
- 인수이름으로 값을 전달, 인수의 순서에 상관없이 인수의 이름에 맞춰서 전달(50p), 일반인수 다음에 키워드 인수 사용.
가변인수 리스트
- 인수의 개수가 정해지지 않은 인수 받기, 함수 정의시 * 를 인수에 붙여 쓴다. 해당 인수를 튜플로 처리됨(51p)
정의되지 않은 인수
-함수 정의시, ** 을 붙여서 정의후, 사전 형식으로 전달하면, 정의하지 않은 인수로 값을 전달 받을수 있다.(52p)
위의 인수 타입들은 정의시, 절대 일반인수 다음에 정의될수 없다.
41. lambda 함수와 재귀적 호출 3. 함수
Lambda 함수
- 함수의 이름이 없고 함수의 객체만 존재하는 익명 함수 (52p)
- return 을 적을수 없다. 여러개의 이수를 받을수 없고 하나의 리턴값을 돌려준다.
- 한줄의 간단한 함수가 필요시 사용
구성
lambda 인수 : <구문>
lambda x, y: x*y
재귀적 호출
- 함수내부에서 자기자신을 호출하는 것(54p)
42. pass 3.
함수
Pass
- 함수 및 클래스에서 아무런 동작도 수행하지 않는다.
>>> while True:
pass
- 계속 while 문만 실행함.
- 아무것도 하지 않는 함수, 클래스를 만들경우 사용
>>> class temp:
pass
43. __doc__와 help 3. 함수
help()
- API문서를 보여주는 help
- help(print), help(globals) 내장함수에 대한 정보를 알수 있다.
- 사용자 정의의 함수도 help를 통해서 볼 수 있다.
__doc__속성
- 함수에 특별한 설명을 달고 싶을때 사용
- plus.__doc__=“return the sum of a, b” //이런 식으로 설정
- help(plus)를 하면, 해당 내용을 볼 수 있다.
- 함수 생성시, 함수 처음 시작 부분에(: 이후) “””, “ 를 이용해서 지정 할 수도 있다. (58p)
44. 이터레이터 3. 함수
for 문의 동작원리
- 순회가능한 객체(리스트, 튜플, 문자열)에서 이터레이터 객체 반환
- 이터레이터 객체의 __next()__ 함수를 호출하, StopIteration 예외를 만날때까지 반복
- 이터레이터는 내부의 반복문을 관리해 주는 역할
it = iterator(s) //이터레이터 객체 가져오기
next(it) // 현재 이터레이터가 가리키고 있는 값 리턴, 객체의 다음 요소 가리팀
it.__next()__() //직접실행 가능.
45. 제너레이터 3. 함수
- 함수는 return 후에, 함수 객체가 스택에서 사라진다.
- return 대신에 yield를 적어주면 함수를 끝내지 않고 호출한 곳으로 값을 전달함. (60p)
def abc():
data = “abc”
for char in data:
yield char
- yield 를 사용하면, 함수의 상태가 그대로 보존 시킬수가 있다.
- 위의 예제에서 yield 이후에 for문이 초기화 되지 않아서, a, b, c, 를 차례로 호출 할 수가
있다.
- 메모리 절약이 가능하다. 미리 데이터를 만들어 놓을 필요없이 생성이 가능함.