π² λͺ©ν: μ΄ν΄κ° κ°λ―λ§λ―ν μ λλ μ΄ν°μ λͺ¨λμ μ λλ‘ μ λ¦¬ν΄ λ³΄μ₯
βΆ λͺ©μ°¨
π μ λλ μ΄ν°(generator)
π λͺ¨λ(module)μ΄λ?
π λͺ¨λ λ§λ€κ³ λΆλ¬μ€κΈ°
π νμ΄μ¬ νμ€ λͺ¨λ
- ν¨μ λ΄λΆμ
yield
μ½λκ° ν¬ν¨λ ν¨μ- νΈμΆμ λ°λ‘ μ€νλμ§ μκ³ generatorλ₯Ό μμ±ν¨
- generatorλ₯Ό μΆλ ₯νκΈ° μν΄μλ next(func()) ννλ‘ νΈμΆ
- next(func())μ yieldμκΉμ§μ μ½λλ₯Ό μ€ννκ³ , 리ν΄κ°μ (μλ€λ©΄) yield λ€μ κ°μ΄ λ¨
func(): print("apple") print("orange") yield 1000 a = func() #μ무κ²λ μΆλ ₯λμ§ μμ print(a) #μ무κ²λ μΆλ ₯λμ§ μμ next(a) #apple, orange print(next(a)) #1000
- yieldλ₯Ό μ¬λ¬ λ² μ½μ ν΄μ λ©μΆλ ꡬκ°μ μ¬λ¬ κ° λ§λ€ μ μμ
- λκΉμ§ μΆλ ₯νλ €λ©΄ yieldμ κ°―μ λ§νΌ next() μ¬μ© νμ
func(): print("happy") yield 100 print("Monday") yield 200 print("today") yield 300 a = func() next(a) #happy next(a) #Monday next(a) #today
μΌλ°μ μΈ μ¬μ© λ°©λ²: λ°λ³΅λ¬Έμ ν΅ν΄ νΈμΆ
for i in a: pass #happy, monday, today for i in a: print(i) #happy, 100, monday, 200, today, 300
νλ§λλ‘ ν λ²μ©λ§ μΆλ ₯ κ°λ₯ν μΌνμ© ν¨μλΌκ³ ν μ μμ!
μ μ°λκ°?
- λ©λͺ¨λ¦¬λ₯Ό μ μ½ν μ μλ€
- ν¨μ νΈμΆ μκ°μ λ΄λΆ μ½λκ° μ€νλμ§ μκ³ , λ°λ³΅λ¬Έ λ±μΌλ‘ μ΄μ©ν λ μ€νλλ―λ‘ μ§μ°λ‘λ(lazy load) λ±μ μν΄ νμ©
- λ€λ₯Έ νμ΄μ¬ νλ‘κ·Έλ¨μμ λΆλ¬μ μ¬μ©ν μ μλλ‘ ν¨μ, λ³μ, ν΄λμ€ λ±μ λͺ¨μλμ νμΌ!
- κΈ΄ μ½λλ₯Ό λ€λ₯Έ νμΌμ 볡μ¬νλ λμ λͺ¨λλ‘ λ§λ€κ³ μν¬νΈνμ¬ μ¬μ© κ°λ₯
- λ€λ₯Έ μ¬λμ΄ λ§λ λͺ¨λμ μ¬μ©ν μλ μκ³ , μ§μ λͺ¨λμ λ§λ€ μλ μμ
- νμΌλͺ μ "λͺ¨λμ΄λ¦.py"
- νμΌ μμΉλ μν¬νΈλ₯Ό μνν νμΌκ³Ό κ°μ λλ ν°λ¦¬ or νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬κ° μ μ₯λ λλ ν°λ¦¬μ¬μΌ ν¨!
#pet.py def dog(): print("λ©λ©") def cat(): print("μΌμΉ")
π if name == "main":
λ§μ½ λͺ¨λ λ΄μ ν¨μλ₯Ό νΈμΆνλ λ±μ μ½λκ° ν¬ν¨λ κ²½μ°, λ€λ₯Έ νμΌμμ λΆλ¬μ¬ λ ν΄λΉ μ½λκ° μ€νλλ€.
if __name == "main":
μ΄λΌλ 쑰건문 μλμ ν¨μ νΈμΆ μ½λλ₯Ό λ£μΌλ©΄ μ΄λ¬ν νμμ λ°©μ§ν μ μμ!#pet.py def dog(): print("λ©λ©") def cat(): print("μΌμΉ") if __name == "main": #λ€λ₯Έ νμΌμμ μν¬νΈμ μ΄ λΆλΆμ μ€νλμ§ μμ dog() cat()
- import λͺ¨λμ΄λ¦
- λͺ¨λ μ 체λ₯Ό λΆλ¬μ€λ λ°©λ²
- νΈμΆμ
λͺ¨λμ΄λ¦.ν¨μμ΄λ¦
ννλ‘ μ¬μ©ν΄μΌ ν¨import pet pet.dog() #λ©λ© pet.cat() #μΌμΉ
- from λͺ¨λμ΄λ¦ import ν¨μμ΄λ¦
- νΉμ ν¨μ(λ€)λ§ λΆλ¬μ€λ λ°©λ²
- νΈμΆμ λͺ¨λμ΄λ¦μ λΆμ΄μ§ μκ³ μ§μ μ¬μ© κ°λ₯!
from pet import cat cat() #μΌμΉ
- from λͺ¨λμ΄λ¦ import *
- ν΄λΉ λͺ¨λμ λͺ¨λ ν¨μλ₯Ό λΆλ¬μ€λ, μ§μ μ¬μ© κ°λ₯
- ν¨μλ λ³μμ μ΄λ¦ μΆ©λμ΄ λ°μν μ μκΈ° λλ¬Έμ μ§μνλ κ²μ΄ μ’λ€
from pet import * dog() #λ©λ© cat() #μΌμΉ
- import λͺ¨λμ΄λ¦ as p
- λͺ¨λλͺ μ΄ κΈΈ κ²½μ° λͺ¨λλͺ λμ λ€λ₯Έ λ¬Έμλ₯Ό μ¬μ©ν μ μμ
import pet as p p.dog() #λ©λ©
νμ΄μ¬ μΈν°ν리ν°μ κ΄λ ¨λ μ 보 λ° κΈ°λ₯ μ 곡
sys.modules
μν¬νΈλ λͺ¨λκ³Ό ν¨ν€μ§κ° μ μ₯λ λμ λ리
sys.path
νμ΄μ¬μ pathλ‘ μ‘ν μλ λλ ν°λ¦¬κ° μ μ₯λ 리μ€νΈ
sys.argv
- νμ΄μ¬ μ€ν¬λ¦½νΈμ μ λ¬λ λͺ λ Ήμ΄ λΌμΈ μΈμ(command line arguments) 리μ€νΈ
- νμ΄μ¬μ΄ νλ‘κ·Έλ¨μ μ€νν λλ§λ€ 컀맨λ λΌμΈμ μ£Όμ΄μ§ λͺ¨λ κ°μ λ°μμ
sys.argv
리μ€νΈμ λ£μsys.argv[0]
μ νμ μ€ν¬λ¦½νΈμ μ 체 κ²½λ‘ μ 보sys.argv[1]
λΆν° μ λ¬λ μΈμκ° λμ΄μ°κΈ°λ‘ ꡬλΆλμ΄ μ μ₯λ¨
νκ²½λ³μ, λλ ν°λ¦¬, νμΌ λ± μ΄μ체μ μμ μ μ΄
os.getcwd()
νμ¬ λλ ν°λ¦¬
os.chdir(κ²½λ‘)
λλ ν°λ¦¬ μμΉ λ³κ²½
os.mkdir(λλ ν°λ¦¬)/rmdir(λλ ν°λ¦¬)
λλ ν°λ¦¬ μμ±/μμ
os.system(λͺ λ Ήμ΄)
νμ΄μ¬μμ μμ€ν λͺ λ Ήμ΄ μ¬μ©
μνκ³Ό κ΄λ ¨λ ν¨μ μ 곡
- math.ceil(n): μ¬λ¦Ό
- math.floor(n): λ΄λ¦Ό
- math.round(n): λ°μ¬λ¦Ό
- math.fabs(n): μ λκ°
- math.factorial(n): 1λΆν° nκΉμ§μ κ³±
- math.pi: μμ£Όμ¨
μμμ μ μμ±, 리μ€νΈ 무μμ μΆμΆ λ±
- random.random(): 0.0 μ΄μ 1.0 λ―Έλ§μ μ€μ(float)
* μνλ μ«μλ₯Ό λν΄μ λ²μλ₯Ό μ‘°μ ν μ μμμ) random.random()+5 #5.0 μ΄μ 6.0 λ―Έλ§μ κ° λ°ν
- random.uniform(x, y)
: x μ΄μ y μ΄νμ μ€μ
- random.randint(x, y)
: x μ΄μ y μ΄νμ μ μ(int)
- random.randrange(x, y[, z])
: (z κ°κ²©μΌλ‘) x μ΄μ y λ―Έλ§μ μ μ
- random.choice(리μ€νΈ)
: 리μ€νΈ μ€ μμμ κ° λ°ν
- random.sample(리μ€νΈ, n)
: 리μ€νΈ μ€ μμμ κ° nκ°λ₯Ό ν¬ν¨ν 리μ€νΈ λ°ν
* choice, sampleμ 리μ€νΈλΏλ§ μλλΌ νν, λ¬Έμμ΄ λ± μνμ€ μλ£νμ λͺ¨λ μ¬μ© κ°λ₯
- random.shuffle(리μ€νΈ)
: 리μ€νΈ μμ μκΈ°
* 리ν΄κ°μ΄ μκ³ , λ³μ 리μ€νΈμ λ΄μ© μ체λ₯Ό λ³κ²½ν¨
λ μ§ λ° μκ° λ°μ΄ν° μ²λ¦¬
- datetime.datetime
- datetime.datetime(yyyy, mm, dd, hh, mm, ss, microsec) ννλ‘ μκ°μ λνλ΄λ κ°μ²΄
- printν κ²½μ° "
yyyy-mm-dd hh:mm:ss.microsec
" νμμΌλ‘ λνλ¨- κ° λ°μ΄ν°λ
year
,month
,day
,hour
,minute
,second
μμ±μ ν΅ν΄ μ κ·Ό κ°λ₯
- datetime.datetime.now()
- νμ¬μκ°μ datetime.datetime κ°μ²΄λ‘ λ°ν
- datetime.timedelta
- datetimeκ°μ²΄κ°μ μκ° μ°¨μ΄λ₯Ό λνλ΄λ κ°μ²΄
- datetime.timedelta(days=0, seconds=0, microseconds=0) νν (μμ±μμλ hours="", minutes="" λ±μ λ¨μλ‘λ κ°λ₯)
- printμ "
d days, hh:mm:ss.microsec
" νμμΌλ‘ λνλ¨
- strftime(ν¬λ§·)
- datetimeκ°μ²΄λ₯Ό λ€μν ν¬λ§·μ λ¬Έμμ΄λ‘ λ³ν
- strptime(λ¬Έμμ΄, ν¬λ§·)
- λ€μν ν¬λ§·μ λ¬Έμμ΄μ datetimeκ°μ²΄λ‘ λ°ν
* ν¬λ§·μ½λλ μ¬κΈ° μ°Έμ‘°!
39. Generator(μ λ€λ μ΄ν°) - νμ΄μ¬ - κΈ°λ³Έμ κ°κ³ λ¦μ!
05-2 λͺ¨λ - μ ν ν¬ νμ΄μ¬
5. λͺ¨λ - μμ΄λ³΄λ₯Ό μν Python
νμ΄μ¬ μ½λ© λμ₯: 47.4 λ μ§/μκ° λͺ¨λ νμ©νκΈ°
μμ λμλ μλ³΄κ³ κ°λλ€! osμ pythonμ μ΄μ΄μ£Όλ os λͺ¨λκ³Ό sys λͺ¨λμ νμ ν·κ°λ¦¬λ€μ.. λλΆμ μ λ³΄κ³ κ°λλ€!