πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[2νŒ€/κΉ€κ°€λ¦Ό, μ΅œλ‹€μ˜ˆ] 5μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - ν•¨μˆ˜

omomirg 2023. 4. 6. 10:24

 

5μ°¨μ‹œ_ν•¨μˆ˜_κ°•μ˜μžλ£Œ.pdf
3.40MB
5μ°¨μ‹œ_ν•¨μˆ˜_과제.pdf
0.13MB

 

 

ν•¨μˆ˜

μ°Έκ³ λ„μ„œ : 데이터 과학을 μœ„ν•œ 파이썬 ν”„λ‘œκ·Έλž˜λ°, μ΅œμƒμ² 

ν•¨μˆ˜κΈ°μ΄ˆ

  • λ“€μ–΄κ°€κΈ° μ•žμ„œ
    1. λ‹€ 같이 λͺ¨μ—¬ ν† λ‘ ν•˜λ©° ν•œ 쀄 ν•œ 쀄 μž‘μ„±
    2. κ°€μž₯ μž˜ν•˜λŠ” μ‚¬λžŒμ΄ 혼자 μž‘μ„±
    3. ν•„μš”ν•œ 뢀뢄을 λ‚˜λˆ„μ–΄ μž‘μ„±ν•œ ν›„ ν•©μΉ˜κΈ°
    κ°€μž₯ 쒋은 방법 2번, 일반적으둜 μ‚¬μš©ν•˜λŠ” 방법 3번 νŒ€μ›λ“€μ΄ 각자 ν•΄μ•Ό ν•  뢀뢄을 λ‚˜λˆ μ„œ ν•˜κ³  λ‚˜μ€‘μ— ν•©μΉ˜λŠ” κ²ƒμ˜€λŠ˜μ€ κ·Έ 쀑 ν•¨μˆ˜λ₯Ό 배울 μ˜ˆμ •
  • ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ λ•Œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” 뢀뢄을 λ‚˜λˆ„κΈ° μœ„ν•΄ νŒŒμ΄μ¬μ—μ„œλŠ” ν•¨μˆ˜, κ°μ²΄, λͺ¨λ“ˆμ„ μ œκ³΅ν•¨
  • μ—¬λŸ¬λͺ…이 ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  λ•Œ, μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μž‘μ„±ν•˜λ©΄ μ’‹μ„κΉŒ ?
  • ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μž₯점
    • ν•¨μˆ˜(function) : μ–΄λ–€ 일을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œμ˜ 덩어리, μ½”λ“œμ˜ 묢음
    • ex. λ„ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬κ°ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•˜λŠ” μž‘μ—…μ΄ μžˆλ‹€λ©΄, ν•΄λ‹Ή μž‘μ—…μ„ ν•¨μˆ˜ν™”ν•˜μ—¬ ν•„μš”ν•  λ•Œλ§ˆλ‹€ ν˜ΈμΆœν•˜λŠ” 것
    • ν•¨μˆ˜μ˜ μž₯점
      • ν•„μš”ν•  λ•Œ λ§ˆλ‹€ 호좜 κ°€λŠ₯ : ν•¨μˆ˜λŠ” 반볡적으둜 μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 업무λ₯Ό ν•œ 번만 μž‘μ„±ν•΄λ†“κ³  ν•„μš”ν•  λ•Œ λ§ˆλ‹€ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš© κ°€λŠ₯, 같은 μž‘μ—… μ—¬λŸ¬λ²ˆ 반볡 λΆˆν•„μš”
      • 논리적 λ‹¨μœ„λ‘œ λΆ„ν•  κ°€λŠ₯ :
        γ„΄ κ³±μ…ˆ μ‹€ν–‰ μ½”λ“œ,γ„΄ λ‚˜λˆ—μ…ˆ μ‹€ν–‰ μ½”λ“œ,.
      • .
      • .
      • γ„΄ λ§μ…ˆ μ‹€ν–‰ μ½”λ“œ,
      • < λ„ν˜• 계산 ν”„λ‘œκ·Έλž¨ >
      • μ½”λ“œμ˜ μΊ‘μŠν™” :
        • μΈν„°νŽ˜μ΄μŠ€ μ •μ˜μΈν„°νŽ˜μ΄μŠ€κ°€ 잘 μ •μ˜λœ ν•¨μˆ˜λΌλ©΄ μ½”λ“œμ˜ λ‚΄λΆ€ ꡬ쑰λ₯Ό λͺ°λΌλ„ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” λ°μ—λŠ” 아무 λ¬Έμ œκ°€ μ—†μŒ
        • μ½”λ“œμ— μž…λ ₯(input)λ˜λŠ” κ°’κ³Ό μ½”λ“œμ˜ μˆ˜ν–‰ 결과인 μΆœλ ₯(output)λ˜λŠ” 값을 λͺ…ν™•νžˆ ν•œλ‹€λŠ” 것, ν”νžˆ λΈ”λž™λ°•μŠ€λΌκ³ λ„ν•¨
      • ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ§Œ 잘 μ •μ˜ν•˜λ©΄ λ‹€λ₯Έ μ‚¬λžŒμ΄ μžμ‹ μ˜ μ½”λ“œλ₯Ό μ‰½κ²Œ κ°€μ Έλ‹€ μ‚¬μš©ν•  수 있음
  • ν•¨μˆ˜μ˜ μ„ μ–Έdef : definition의 쀀말, ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό μ‹œμž‘ν•œλ‹€λŠ” 의미
    • ν•¨μˆ˜ 이름 κ·œμΉ™
      • μ†Œλ¬Έμžλ‘œ μž…λ ₯
      • 띄어쓰기λ₯Ό ν•  κ²½μš°μ—λŠ” 기호 μ‚¬μš© ex. save*_*model
      • μž‘μ—…μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ 동사와 λͺ…사λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ 많음 ex. find_number
      • 외뢀에 κ³΅κ°œν•˜λŠ” ν•¨μˆ˜μΌ 경우 μ€„μž„λ§μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  짧고 λͺ…λ£Œν•œ μ΄λ¦„μœΌλ‘œ μ •ν•œλ‹€
    λ§€κ°œλ³€μˆ˜ : parameter, ν•¨μˆ˜μ—μ„œ μž…λ ₯κ°’μœΌλ‘œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜, 1개 μ΄μƒμ˜ κ°’ 적을 수 o
    def calculate_rectangle_area(x, y) 
        return x * y
    
    ν•¨μˆ˜μ΄λ¦„ : def calculate_rectangle_areareturn : λ°˜ν™˜ν•œλ‹€λŠ” 의미, x, yλ₯Ό κ³±ν•œ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ‘œ 이해</aside>f(x) = x + 1 일 λ•Œ f(1) = 2 즉, ν•¨μˆ˜ f(x)μ—μ„œ x에 1이듀어가면 2κ°€ λ°˜ν™˜λ˜λŠ” 것
  • μˆ˜ν•™μ—μ„œ x에 ν•΄λ‹Ήν•˜λŠ” 것이 맀개 λ³€μˆ˜, 즉 μž…λ ₯값이고 x+1의 계산 과정이 ν•¨μˆ˜ μ•ˆμ˜ μ½”λ“œλ©° κ·Έ κ²°κ³Όκ°€ λ°˜ν™˜λ˜λŠ” κ°’
  • μˆ˜ν•™μ—μ„œ ν•¨μˆ˜μ™€ 같은 κ°œλ…μ΄λΌ 생각 !
  • <aside> πŸ’‘ λ°˜ν™˜μ΄λž€ ?
  • λ§€κ°œλ³€μˆ˜ : x, y
  • λͺ…λ Ήλ¬Έ : λͺ…령문은 λ°˜λ“œμ‹œ ‘λ“€μ—¬μ“°κΈ°’ν•œ ν›„ μ½”λ“œ μž…λ ₯ (forλ¬Έ, ifλ¬Έ, … ect 일반적인 μ½”λ“œ)
  • ν•¨μˆ˜μ΄λ¦„ : 개발자 λ§ˆμŒλŒ€λ‘œ 지정 but κ·œμΉ™ 쑴재
  • def ν•¨μˆ˜_이름 (λ§€κ°œλ³€μˆ˜ #1...): λͺ…λ Ήλ¬Έ1 λͺ…λ Ήλ¬Έ2 return <λ°˜ν™˜κ°’>
  • ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œ
    μ‚¬κ°ν˜• x의 길이 : 10
    μ‚¬κ°ν˜• y의 길이 : 20
    μ‚¬κ°ν˜• 넓이 : 200
    
    <aside> ⚠️ ν•¨μˆ˜μ˜ μ„ μ–Έ 뢀뢄을 μ½”λ“œμ˜ 맨 λ§ˆμ§€λ§‰μ— μž…λ ₯ν• μ‹œ ν•΄λ‹Ή μ½”λ“œ ν˜ΈμΆœμ— 였λ₯˜ λ°œμƒdef … : ν•¨μˆ˜ μ •μ˜, ν•΄λ‹Ή μ½”λ“œλ₯Ό λ©”λͺ¨λ¦¬μ— μ—…λ‘œλ“œν•΄ λ‹€λ₯Έ μ½”λ“œλ₯Ό ν˜ΈμΆœν•΄ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ€€λΉ„κ³Όμ • κ±°μΉ¨print("μ‚¬κ°ν˜•μ˜ λ„“μ΄οΌš", calculate_rectangle_area(rectangle_x, rectangle_y)) : μ •μ˜ν•œ ν•¨μˆ˜ μ‹€ν–‰, κ²°κ³Όκ°’ 좜λ ₯
  • rectangle x … : 2개의 λ³€μˆ˜μ— 값이 ν• λ‹Ή, κ·Έ ν›„ printλ¬Έ μ‹€ν–‰
  • </aside>
  • def calculate_rectangle_area(x, y): return x * y rectangle_x = 10 rectangle_y = 20 print("μ‚¬κ°ν˜• x의 길이:", rectangle_x) print("μ‚¬κ°ν˜• y의 길이:", rectangle_y) # 넓이λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ 호좜 print("μ‚¬κ°ν˜•μ˜ λ„“μ΄οΌš", calculate_rectangle_area(rectangle_x, rectangle_y))
  • ν”„λ‘œκ·Έλž˜λ°μ˜ ν•¨μˆ˜μ™€ μˆ˜ν•™μ˜ ν•¨μˆ˜f(x) = x + 1<math>f(2) =. 1, g(2) = 4, f(g(2)) = 15, g(f(2)) =. 21<programing>
    151
    
    • 맀개 λ³€μˆ˜(parameter)와 인수(argument)
      11
      
      def f(x)의 x : λ§€κ°œλ³€μˆ˜λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€ μ •μ˜μ— μžˆμ–΄ μ–΄λ–€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ”μ§€ μ •μ˜ν•˜λŠ” 것
      • μΈν„°νŽ˜μ΄μŠ€
      • μ‚¬μš©μžκ°€ κΈ°κΈ°λ₯Ό μ‰½κ²Œ λ™μž‘μ‹œν‚€λŠ”λ° 도움을 μ£ΌλŠ” μ‹œμŠ€ν…œ
      f(2)의 2 : μΈμˆ˜λ‘˜ λͺ¨λ‘ ν•¨μˆ˜μ˜ μž…λ ₯κ°’μœΌλ‘œ λΆ€λ₯΄κΈ°λ„ ν•œλ‹€ ν•˜μ§€λ§Œ μ •ν™•ν•œ 의미λ₯Ό νŒŒμ•…ν•˜κ³  μ‚¬μš©ν•  것을 ꢌμž₯ !
    • λ§€κ°œλ³€μˆ˜κ°€ 섀계도라면 μΈμˆ˜λŠ” ꡬ뢄 없이 μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ 많으며,
    • 일반적으둜 ν•¨μˆ˜μ˜ μž…λ ₯값에 λŒ€ν•œ μ •μ˜λ₯Ό ν•¨μˆ˜ μ‚¬μš©μ— μžˆμ–΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•œλ‹€κ³ ν•¨
    • def f(x): return 2*x+7 print(f(2))
  • def f(x): return 2*x+7 def g(x): return x**2 x = 2 print(f(x)+g(x)+f(g(x))+g(f(x))
  • 11 + 4 + 15 + 121 = 151
  • f(x) = 2x + 7, g(x) = x**, x = 2 일 λ•Œ, f(x) + g(x) + f(g(x)) + g(f(x))의 값은 ?
  • ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ ν•¨μˆ˜μ™€ μˆ˜ν•™μ—μ„œμ˜ ν•¨μˆ˜λŠ” 맀우 μœ μ‚¬
  • ν•¨μˆ˜μ˜ ν˜•νƒœ
    • a_ractangle_area() :이 κ²½μš°μ—λŠ” a_ractangle_area()κ°€ 35둜 μΉ˜ν™˜λ˜λŠ” 것이 μ•„λ‹ˆκ³ , λ°˜ν™˜κ°’μ΄ 없기에 ν•¨μˆ˜ μžμ²΄λŠ” none값을 가짐, λŒ€μ‹  λ‚΄λΆ€ ν•¨μˆ˜ print()ν•¨μˆ˜λ‘œ 인해 35 좜λ ₯
    • μž…λ ₯값도 μ—†κ³  λ°˜ν™˜λ˜λŠ” 값도 μ—†μ§€λ§Œ print(5*7)에 μ˜ν•΄ 35κ°€ 좜λ ₯λœλ‹€.
    • b_ractangle_area() :λ°˜ν™˜κ°’μ΄ 없기에 맀개 λ³€μˆ˜ μžλ¦¬μ— 값을 λ„£μ–΄μ€˜μ•Ό ν•΄λ‹Ή κ°’ μ‹€ν–‰, λ°˜ν™˜μ΄ μ—†μœΌλ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” none으둜 μΉ˜ν™˜λ¨
    • b_ractangle_area()κ°€ λ§€κ°œλ³€μˆ˜λ‘œ x,yλ₯Ό λ„˜κ²¨ λ°›κ³ , κ·Έ 값을 κ³„μ‚°ν•˜μ—¬ 화면에 좜λ ₯ν•˜λŠ” ν•¨μˆ˜
    • x_ractangle_area(), d_ractangle_area(x,y :즉, return문으둜 인해 35둜 μΉ˜ν™˜ λ˜λŠ” 것
    • μ΄λ ‡κ²Œ return이 μžˆλŠ” 경우, 즉 ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ΄ μžˆλŠ” κ²½μš°μ—λŠ” κ·Έ ν•¨μˆ˜λ₯Ό 호좜 ν•˜λŠ” κ³³μ—μ„œμ„œ ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ„ λ³€μˆ˜μ— ν• λ‹Ήν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯
    • c_ractangle_area(), d_ractangle_area() ν•¨μˆ˜ λͺ¨λ‘, ν•¨μˆ˜ μ•ˆμ—μ„œ print()ν•¨μˆ˜λ₯Ό μˆ˜ν–‰μ‹œν‚€λŠ” 것이 μ•„λ‹Œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ print()ν•¨μˆ˜ 이용
  • 35 35 35 35
  • def a_ractangle_area(): # λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ x print(5*7) def b_ractangle_area(): # λ§€κ°œλ³€μˆ˜ o, λ°˜ν™˜κ°’ x print(x*y) def x_ractangle_area(): # λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ o return(5*7) def d_ractangle_area(x,y): # λ§€κ°œλ³€μˆ˜ o, λ°˜ν™˜κ°’ o return(x*y) a_ractangle_area() b_ractangle_area(5,7) print(c_ractangle_area()) print(d_ractangle_area(5,7))
  • ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ˜ μœ λ¬΄μ— 따라 λ„€ 가지 ν˜•νƒœλ‘œ ꡬ뢄

ν•¨μˆ˜ 심화

  • ν•¨μˆ˜μ˜ 호좜 방식
    9
    3
    
    f(x)에 5와 3이 μž…λ ₯됨,μ΄λ ‡κ²Œ ν•¨μˆ˜ μ•ˆμ—μ„œ λ³€μˆ˜κ°€ 인수의 ν˜•νƒœλ‘œ μž…λ ₯ 될 λ•Œ λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 방식을 ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λ‹€μŒκ³Ό 같이 크게 두 κ°€μ§€λ‘œ λ‚˜λˆˆλ‹€λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” 곡간을 κ°€λ₯΄ν‚€κ³ , κ·Έ 곡간 μžμ²΄μ— μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λ©΄ κ·Έ 곡간을 가리킀고 μžˆλŠ” λ‹€λ₯Έ λ³€μˆ˜μ—λ„ 영ν–₯을 μ€€λ‹€.즉 μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜κ±°λ‚˜ ν•΄λ‹Ή 객체λ₯Ό μ§€μšΈ λ•ŒλŠ” 영ν–₯을 주지 μ•Šμ§€λ§Œ λ‹¨μˆœνžˆ ν•΄λ‹Ή 객체 에 값을 μΆ”κ°€ν•  λ•ŒλŠ” 영ν–₯을 μ€€λ‹€
    [0, 1]
    
    λ¨Όμ € hamμ΄λΌλŠ” 리슀트λ₯Ό λ§Œλ“€κ³ , ν•¨μˆ˜ spam에 ham을 인수둜 μž…λ ₯ν•œλ‹€.hamκ³Ό eggsλŠ” ν•¨μˆ˜μ˜ 호좜 λ°©μ‹μœΌλ‘œ 객체λ₯Ό ν˜ΈμΆœν•˜κ³  μžˆκΈ°μ— 같은 μ£Όμ†Œ 곡유eggs = [2, 3]으둜 μƒˆλ‘œμš΄ 리슀트λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.그리고 ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜μ™€ print(ham)이 μ‹€ν–‰λ˜λ©΄ eggs.append(1)에 μ˜ν•΄ μΆ”κ°€λœ [0, 1]이 화면에 좜λ ₯λœλ‹€.
  • μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜κΈ° μ „κΉŒμ§€λŠ” 기쑴에 λ„˜μ–΄μ˜¨ 인수 객체의 μ£Όμ†Œκ°’μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ” 방식 이라고 μ΄ν•΄ν•˜λ©΄ 됨
  • 이것이 λ°”λ‘œ κ°μ²΄ 호좜(call by object reference)μ΄λΌλŠ” 파이썬의 ν•¨μˆ˜ λ‚΄λΆ€ λ³€μˆ˜ 호좜 방식이닀.
  • κ·Έλž˜μ„œ 더이상 hamκ³Ό eggsκ°€ 같은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 가리킀지 μ•Šκ³  eggsλŠ” 자기만의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€μ§€κ²Œ λœλ‹€.
  • λ”°λΌμ„œ eggs. append(1)에 μ˜ν•΄ ν•΄λ‹Ή λ¦¬μŠ€νŠΈμ— 1 이 μΆ”κ°€λ˜λ©΄ hamκ³Ό eggs λͺ¨λ‘ 영ν–₯을 λ°›λŠ”λ‹€
  • μ΄λ•Œ 함 수 μ•ˆμ—μ„œλŠ” 이름이 hamμ—μ„œ eggs둜 바뀐닀.
  • def spam(eggs): eggs.append(1) # κΈ°μ‘΄ 객체의 μ£Όμ†Œκ°’μ— [1]μΆ”κ°€ eegs = [2, 3] ham = [0] spam(ham) print(ham)
  • νŒŒμ΄μ¬μ—μ„œλŠ” 객체의 μ£Όμ†Œλ₯Ό ν•¨μˆ˜λ‘œ λ„˜κΈ°κΈ° λ•Œλ¬Έμ— μ „λ‹¬λœ 객체의 값에 변경이 μžˆμ„ 경우,
  • νŒŒμ΄μ¬μ€ 객체의 μ£Όμ†Œκ°€ ν•¨μˆ˜λ‘œ λ„˜μ–΄κ°„λ‹€λŠ” 뜻의 κ°μ²΄ 호좜 λ°©μ‹μ„ μ‚¬μš©
  • 즉, μœ„μ˜ μ½”λ“œμ—μ„œ λ§Œμ•½ μ°Έμ‘° 호좜둜 μ μš©λœλ‹€λ©΄ 맨 λ§ˆμ§€λ§‰μ— μžˆλŠ” X의 값은 5둜 λ³€ν™˜λ˜μ–΄μ•Ό ν•œλ‹€. but νŒŒμ΄μ¬μ€ 전톡적인 두 가지 방식을 ν˜Όν•©ν•œ μ‘°κΈˆμ€ νŠΉμ΄ν•œ 방식을 μ‚¬μš©ν•˜κ³  μžˆλ‹€.
  • κ·Έλ ‡λ‹€λ©΄ ν•¨μˆ˜ μ•ˆμ—μ„œμ˜ x와 λ°–μ—μ„œμ˜ xλŠ” 같은 λ³€μˆ˜μΌκΉŒ?
  • def f(x): y = x x = 5 return y*Y x = 3 print(f(x)) print(x)
  • λ³€μˆ˜μ˜ μ‚¬μš© λ²”μœ„ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  것인지, λ˜λŠ” ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  것인지 κ·Έ λ²”μœ„λ₯Ό κ²°μ •ν•˜λŠ” κ·œμΉ™
    • λ³€μˆ˜ μ‚¬μš©λ²”μœ„ κ²°μ •μ‹œ κ³ λ €ν•΄μ•Όν•  λ³€μˆ˜
      • μ§€μ—­λ³€μˆ˜(local variabl) : ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©
      • μ „μ—­λ³€μˆ˜(global variabl) : ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©
      def test(t):
          print(x)
          t = 20
          print('In Function:', t)
      
      x = 20
      test(x)
      print('In Main:', x)
      print('In Main:', t)
      
      10
      In Function : 20
      In Main : 10
      Traceback (most recent call last):
          File "scoping_rule.py", line 9, in <module> 
              print("In Main:", t) 
      NameError: name 't' is not defined
      
      ν”„λ‘œκ·Έλž¨μ΄ κ°€μž₯ λ¨Όμ € μ‹œμž‘λ˜λŠ” 지점은 x= 10κ·Έλ ‡λ‹€λ©΄ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 처음 λ§Œλ‚˜λŠ” print(x)의 xλŠ” μ–΄λ–€ λ³€μˆ˜μΌκΉŒ?즉, ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μ „μ—­ λ³€μˆ˜μ΄λ‹€.즉, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλŠ” xλ₯Ό λ”°λ‘œ μ„ μ–Έν•œ 적은 μ—†κ³ , tλ₯Ό μ„ μ–Έν•΄ μ‚¬μš©but ν•¨μˆ˜κ°€ μ’…λ£Œλ˜κ³  μ½”λ“œμ— print('In Main:’, t)κ°€ μ‹€ν–‰λ˜λ©΄ 였λ₯˜κ°€ 좜λ ₯λœλ‹€. μ™œλƒν•˜λ©΄ tκ°€ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” μ§€μ—­ λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έ
      I love London!
      I love Paris!
      
      s = 'I love London!' : μ§€μ—­ λ³€μˆ˜
      def f():
          global s
          s ="I love London!
          print(s)
      
      s = "I love Paris!"
      f()
      print(s)
      
      I love London! 
      I love London!
      
      기쑴의 sμ—λŠ” ‘I love Paris!’κ°€ μ €μž₯λ˜μ–΄ μžˆλŠ”λ°κ·Έλž˜μ„œ 이전과 달리 ν•¨μˆ˜ 내뢀와 외뢀에 μžˆλŠ” sλŠ” 같은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜κ²Œ λœλ‹€.
      def calculate(x, y):
          total = x + y     # μƒˆλ‘œμš΄ 값이 ν• λ‹Ήλ˜μ–΄ ν•¨μˆ˜ λ‚΄λΆ€ total은 지역 λ³€μˆ˜κ°€ 됨
          print('In Function')
          print('a:', str(a), 'b:', str(b), 'a +b:', str(a + b), 'total:', str(total))
          return total
      
      a =5                  #a와 bλŠ” μ „μ—­ λ³€μˆ˜
      b =7
      total = 0             # μ „μ—­ λ³€μˆ˜ total
      print('In Program - 1')
      print('a:', str(a), 'b:', str(b), 'a + b:', str(a + b))
      
      sum = calculate (a, b)
      print("After Calculation")
      print('Total:', str(total), 'Sum:', str(sum))  # 지역 λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜μ— 영ν–₯을 μ£Όμ§€μ•ŠμŒ
      
      In Program - 1
      a:5b:7a+b:12
      In Function
      a:5 b:7 a+b:12 total:12
      After Calculation
      Total:0 Sum:12
      
    • λ”°λΌμ„œ ν•΄λ‹Ή λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μƒˆλ‘œμš΄ 값인 ‘I love London!’이 ν• λ‹Ήλ˜λ©΄ ν•¨μˆ˜ μ™ΈλΆ€μ˜ s에도 ν•΄λ‹Ή 값이 ν• λ‹Ήλ˜μ–΄ 이와 같은 κ²°κ³Όκ°€ 좜λ ₯λ˜λŠ” 것이닀
    • f() ν•¨μˆ˜ λ‚΄λΆ€μ˜ μ½”λ“œκ°€ μˆ˜ν–‰λ˜λŠ” μˆœκ°„ global sκ°€ μ„ μ–Έλ˜μ–΄ ν•¨μˆ˜ μ™ΈλΆ€μ˜ s, 즉 μ „μ—­ λ³€μˆ˜ s의 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ‚¬μš©ν•œλ‹€.
    • s = 'I love Paris!' : μ „μ—­ λ³€μˆ˜
    • def f(): s = 'I love London!' print(s) s = 'I love Paris!' f() print(s)
    • 그리고 t = 20 에 μ˜ν•΄ t에 20이 ν• λ‹Ήλ˜κ³ , μ‹€μ œλ‘œ 4ν–‰ print('In Function:’, t)의 결과둜 In Function: 20이 화면에 좜λ ₯λ˜λŠ” 것을 μ˜ˆμƒν•  수 있음
    • test(x) ν•¨μˆ˜μ˜ xλ₯Ό t둜 μΉ˜ν™˜ν•˜μ—¬ μ‚¬μš©
    • μ΄λ•Œμ˜ xλŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 재 μ •μ˜λ˜μ§€ μ•Šμ•˜κΈ°μ— ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ 메인 ν”„λ‘œκ·Έλž¨μ—μ„œ μ •μ˜ν•œ x = 10의 xλ₯Ό λœ»ν•¨
    • x = 20의 xλŠ” test(x) ν•¨μˆ˜μ˜ 인수둜 λ„˜μ–΄κ°„λ‹€.
  • λ³€μˆ˜μ˜ μ‚¬μš© λ²”μœ„ : λ³€μˆ˜κ°€ μ½”λ“œμ—μ„œ μ‚¬μš©λ˜λŠ” λ²”μœ„
  • μž¬κ·€ ν•¨μˆ˜μž¬κ·€μ μ΄λΌλŠ” ν‘œν˜„μ€ μžμ‹ μ„ μ΄μš©ν•΄ λ‹€λ₯Έ 것을 μ •μ˜ν•œλ‹€λŠ” 뜻, μž¬κ·€ ν•¨μˆ˜λŠ” μˆ˜ν•™μ˜ 점화식과 같은 ν˜•νƒœ
    def factorial(n):
        if n ==1:
            return 1
        else:
            return n*factorial(n-1)
    
    print(factorial(int(input('In Number for Factorial Calculation: '))))
    
    In Number for Factorial Calculation: 5 < μ‚¬μš©μž μž…λ ₯
    120 < ν™”λ©΄ 좜λ ₯
    
    < μ½”λ“œ μ‹€ν–‰ κ³Όμ • >μœ„μ˜ ν•¨μˆ˜λŠ” forλ¬Έμ΄λ‚˜ whileλ¬ΈμœΌλ‘œλ„ μ–Όλ§ˆλ“ μ§€ ν‘œν˜„ κ°€λŠ₯λ°˜λ³΅λ¬Έμ—μ„œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ μ’…λ£Œ 쑰건과 λ°˜λ³΅λ¬Έλ§ˆλ‹€ λ™μΌν•œ 연산이 μ§„ν–‰λ˜κΈ° λ•Œλ¬Έ μž¬κ·€ ν•¨μˆ˜λ₯Ό 잘 μ‚¬μš©ν•˜λŠ” 것은 맀우 μ€‘μš” ! !
  • κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ¨Έλ‘œ 갈수둝 μž¬κ·€μ μœΌλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ 자주 μ ‘ν•˜κ²Œ λ˜λ―€λ‘œ κ°œλ…μ μœΌλ‘œ μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό 함
  • μž¬κ·€ ν•¨μˆ˜μ˜ κΈ°λ³Έ ꡬ쑰가 μ’…λ£Œ 쑰건, 단계별 λ°˜ν™˜μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμœΌλ―€λ‘œ 크게 λ³€κ²½ 없이도 μ‚¬μš©ν•  수 있음
  • 5 * factorial(5 - 1) = 54 factorial(4 - 1) = 543* factorial(3 - 1) = 5432 factorial(2 -1) =54321
  • μž¬κ·€ ν•¨μˆ˜ (recursive function): 자기 μžμ‹ μ„ λ‹€μ‹œ ν˜Έμ€„

ν•¨μˆ˜μ˜ 인수

  • 인수
  • 인수(argument) : ν•¨μˆ˜μ˜ μž…λ ₯으둜 λ“€μ–΄κ°€λŠ” λ³€μˆ˜μ˜ λ‹€μ–‘ν•œ ν˜•νƒœ
  • ν‚€μ›Œλ“œ μΈμˆ˜ν•¨μˆ˜μ— μž…λ ₯λ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ λ³€μˆ˜λͺ…을 μ‚¬μš©ν•΄ ν•¨μˆ˜μ˜ 인수λ₯Ό μ§€μ •ν•˜λŠ” 방법
    Hello TEAM LAB, My name is Sungchul HeUo TEAMLAB, My name is Sungchul
    
    print_something() ν•¨μˆ˜λŠ” (my_name, your_name)μ΄λΌλŠ” μž…λ ₯ 인터 페이슀λ₯Ό 가짐but ν•¨μˆ˜μ˜ μž…λ ₯ λ³€μˆ˜λͺ…λ§Œ μ •ν™•νžˆ κΈ°μž¬λœλ‹€λ©΄ μˆœμ„œμ— 상관없이 μ›ν•˜λŠ” λ³€μˆ˜μ— 인수λ₯Ό 넣을 수 μžˆμŒμ¦‰ μž…λ ₯λ˜λŠ” μˆœμ„œμ— 상관 없이 ‘Sungchul’은 my_name, ‘TEAMLAB’은 your_name으둜 할당됨, λ”°λΌμ„œ 두 ν•¨μˆ˜μ— λŒ€ν•œ 2가지 호좜 μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όκ°€ λ™μΌν•˜κ²Œ 좜λ ₯됨
  • print_something(your_ name = ‘TEAMLAB’, my_name = ‘Sungchul’)을 보면 ν•¨μˆ˜μ˜ μΈμˆ˜μ—μ„œ μ‚¬μš©λ˜λŠ” 각각의 λ³€μˆ˜λͺ…을 λͺ…μ‹œν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή λ³€μˆ˜μ— 값이 할당될 수 μžˆλ„λ‘ μ²˜λ¦¬ν•˜μ˜€λ‹€.
  • 일반적으둜 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μΈμˆ˜κ°€ μˆœμ„œλŒ€λ‘œ μž…λ ₯λ˜λ„λ‘ μ½”λ“œ μž‘μ„±ν•΄μ•Όλ¨print_something(’Sungchul’, ‘TEAMLAB’)μ—μ„œ ‘Sungchul’은 my_name, ‘TEAMLAB’은 yoiir_name에 ν• λ‹Ή
  • def print_something(my_name, your_name): print('Hello {}, My name is {1}'.format(your_name, my_name)) print_something('Sungchul', 'TEAMLAB') print_something(your_name = 'TEAMLAB', my_name = 'Sungchul')
  • ν‚€μ›Œλ“œ 인수(keyword arguments):
  • λ””ν΄νŠΈ μΈμˆ˜λ§€κ°œλ³€μˆ˜μ— 기본값을 μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜κ³ , μ•„λ¬΄λŸ° 값도 인수둜 λ„˜μ–΄κ°€μ§€ μ•Šμ„ λ•Œ μ§€μ •λœ 기본값을 μ‚¬μš©ν•˜λŠ” λ°©
    Hello TEAMLAB, My name is Sungchul
    Hello TEAMLAB, My name is Sungchul
    
    def print_something_2(my_name, your_name = ‘TEAMLAB’) μ—μ„œ ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜κ²°κ΅­ μ½”λ“œλ₯Ό λͺ¨λ‘ μ‹€ν–‰ν•˜λ©΄ 두 μ½”λ“œμ˜ κ²°κ³ΌλŠ” κ°™λ‹€.예λ₯Όλ“€μ–΄ μ΄ˆκΉƒκ°’μ„ 0으둜 ν• λ‹Ήν•˜λ©΄ ‘init=0’κ³Ό 같은 ν˜•νƒœλ‘œ μž…λ ₯
  • 가끔은 κ·Έ λ³€μˆ˜μ— νŠΉμ •ν•œ 값이 μž…λ ₯λ˜μ–΄μ•Ό ν•  λ•Œμ—λŠ” ‘init = None’κ³Ό 같은 ν˜•μ‹μœΌλ‘œ μ΄ˆκΉƒκ°’μ„ μ§€μ •ν•˜λ©΄ 됨
  • μ΄λŸ¬ν•œ λ””ν΄νŠΈ 인수λ₯Ό μ‚¬μš©ν•  λ•Œ 보톡 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ μ΄ˆκΉƒκ°’μ„ μž…λ ₯ν•΄μ£Όμ–΄μ•Ό ν•  λ•Œκ°€ 있음
  • your_name λ§€κ°œλ³€μˆ˜μ—λŠ” κΈ°λ³Έκ°’μœΌλ‘œ ‘TEAMLAB’ 지정, 이 경우 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ your_name λ§€κ°œλ³€μˆ˜μ—λŠ” λ³„λ„μ˜ 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ•„λ„ ν•¨μˆ˜κ°€ μž‘λ™print_something_2(’Sungchul’)μ—μ„œ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜κ°€ 2κ°œμΈλ°λ„ 인수λ₯Ό ν•˜λ‚˜λ§Œ μž…λ ₯, 이 경우 μž…λ ₯된 값은 첫 번째 λ§€κ°œλ³€μˆ˜μΈ my_name에 ν• λ‹Ή, 두 번째 λ§€κ°œλ³€μˆ˜μΈ your_nameμ—λŠ” λ””ν΄νŠΈ 인수둜 μ§€μ •λœ ‘TEAMLAB’ ν• λ‹Ή
  • def print_something_@(my_name, your_name = 'TEAMLAB'): print('HEllo{0}, My name is {1}.format(your_name, my_name)) print_something_2('Sungchul', 'TEANLAB') print_something_2('Sungchul')
  • λ””ν΄νŠΈ 인수(default arguments):
  • κ°€λ³€ μΈμˆ˜νŒŒμ΄μ¬μ—μ„œ 기본적으둜 κ³±μ…ˆ λ˜λŠ” 제곱 μ—°μ‚° 외에도 λ³€μˆ˜λ₯Ό λ¬Άμ–΄μ£ΌλŠ” κ°€λ³€ 인수λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©
    def asterisk_test(a, b, *args)
        return a+b+sum(args)
    
    print(asterisk_test(1,2,3,4,5))
    
    15
    
    asterisk test() ν•¨μˆ˜λŠ” λ³€μˆ˜ a, bλ₯Ό λ„˜κ²¨ λ°›κ³ , λ‚˜λ¨Έμ§€λ₯Ό *args둜 λ„˜κ²¨λ°›μŒasterisk_test(l, 2, 3, 4, 5)λ₯Ό 보면 1κ³Ό 2λŠ” 각각 a와 b에 ν• λ‹Ήλ˜κ³ , λ‚˜λ¨Έμ§€ 인수인 3, 4, 5κ°€ λͺ¨λ‘ *args에 할당됨
    (3,4,5)
    NONE
    
    결과값이 κ΄„ν˜Έλ‘œ λ¬Άμ—¬ 좜λ ₯됨, μ΄λ ‡κ²Œ κ΄„ν˜Έλ‘œ λ¬Άμ—¬ 좜λ ₯λ˜λŠ” μžλ£Œν˜•μ„ νŠœν”Œ(tuple)μžλ£Œν˜•μ΄λΌ ν•˜λ©° 리슀트 μžλ£Œν˜•μ²˜λŸΌ 인덱슀둜 μ ‘κ·Όν•  수 μžˆλŠ” μžλ£Œν˜•μ΄λΌκ³  κΈ°μ–΅ !λ˜ν•œ λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•œ νŠœν”Œ ν˜•νƒœλ‘œ ν•¨μˆ˜ μ•ˆμ—μ„œ μ‚¬μš©λ˜μ–΄μ§€λ―€λ‘œ 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ argsοΌ»0οΌ½, argsοΌ»1οΌ½ λ“±μ˜ ν˜•νƒœλ‘œ λ³€μˆ˜μ— μ ‘κ·Όν•  수 있음
    (3, 4, [5])
    
    μž…λ ₯받은 κ°€λ³€ 인수의 개수λ₯Ό μ •ν™•νžˆ μ•ˆλ‹€λ©΄, x, y, *z = args처럼 μ–ΈνŒ¨ν‚Ή κ°€λŠ₯
    def asterisk_test_2(*args):
        s,y,*z = args
        return x,y,z
    
    print(asterisk_test_2(3,4,5,10,20))
    
    (3,4,,[5,10,20])
    
    *λŠ” κΈ°λŠ₯이 λ‹€μ–‘ν•˜μ—¬ μ–ΈνŒ¨ν‚Ήν•  λ•Œλ„ 값을 κ°€λ³€ 인수의 ν˜•νƒœλ‘œ 받을 수 있음
  • μ΄λŸ¬ν•œ νŠΉμ§•μ„ 잘 κΈ°μ–΅ν•˜λ©΄ ν•¨μˆ˜μ™€ λ³€μˆ˜ μ‚¬μš©μ‹œ κ°€λ³€ 인수λ₯Ό μœ μš©ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯
  • λ§Œμ•½ *zκ°€ μ•„λ‹Œ μƒνƒœμ—μ„œ asterisk_test_2(3, 4, 5. 10. 20)으둜 λ³€κ²½ν•˜μ—¬ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ–ΈνŒ¨ν‚Ήμ˜ κ°œμˆ˜κ°€ λ§žμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 였λ₯˜ λ°œμƒ
  • def asterisk_test_2(*args): s,y,*z = args return x,y,z print(asterisk_test_2(3,4,5))
  • κ°€λ³€μΈμˆ˜ *λŠ” λ°˜λ“œμ‹œ 일반적인 ν‚€μ›Œλ“œ μΈμˆ˜μ— λŒ€ν•œ 선언이 λͺ¨λ‘ λλ‚œ ν›„ λ§ˆμ§€λ§‰μ— μ„ μ–Έλ˜μ–΄μ•Όν•¨
  • def asterisk_test(a, b, *args): print(args) print(asterisk_test(1,2,3,4,5))
  • μ—¬κΈ°μ„œ *argsλ₯Ό κ°€λ³€ 인수라고 함
  • 예λ₯Ό λ“€μ–΄, ν•­μ˜ κ°œμˆ˜κ°€ 정해지지 μ•Šμ€ λ‹€ν•­λ°©μ •μ‹μ˜ λ§μ…ˆ μ—°μ‚°, 고객이 물건을 μ–Όλ§ˆλ‚˜ ꡬ맀할지 λͺ¨λ₯΄λŠ” 마트 κ³„μ‚°κΈ°μ—μ„œ 합산을 μˆ˜ν–‰ν•˜λŠ” μ—°μ‚° 등에 μ‚¬μš©
  • κ°€λ³€ 인수(variable-length arguments) : asterisk라고 뢀름
  • ν‚€μ›Œλ“œ κ°€λ³€ μΈμˆ˜κ°€λ³€ μΈμˆ˜λŠ” λ³€μˆ˜μ˜ μˆœμ„œλŒ€λ‘œ νŠœν”Œ ν˜•νƒœλ‘œ μ €μž₯됨, μ‚¬μš©ν•  λ•ŒλŠ” 맀우 κ°„λ‹¨ν•˜μ§€λ§Œ λ³€μˆ˜μ˜ 이름을 지정할 수 μ—†λ‹€λŠ” 단점 μ΄λŸ¬ν•œ 단점을 λ³΄μ™„ν•˜λŠ” 방법그리고 μž…λ ₯된 값은 νŠœν”Œ μžλ£Œν˜•μ΄ μ•„λ‹Œ λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜•(dictionary type)으둜 μ‚¬μš©ν•  수 μžˆλ‹€. λ°°μš°μ§€ μ•Šμ€ μ§€κΈˆμ€ λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜•μ„ λ³€μˆ˜λͺ…κ³Ό 값을 쌍으둜 μ €μž₯ν•˜λŠ” 방식이라고 μƒκ°ν•˜λ©΄ 쉽닀
    def kwargs_Test(**kwargs):
        print(kwargs)
        print('First value is {first}'.format(**kwargs))
        print('Second value is {second]'.fornat(**kwargs))
        print('Third value is {third}'.format(**kwargs))
    
    kwargs_test(first = 3, second = 4, third = 5)
    
    {'first': 3, 'second': 4, 'third': 5}
    First value is 3
    Second value is 4
    Third value is 5
    
    ν‚€μ›Œλ“œ κ°€λ³€ μΈμˆ˜λŠ” λ³€μˆ˜λͺ…μœΌλ‘œ kwargsλ₯Ό μ‚¬μš©μ΄λŸ¬ν•œ ν˜•νƒœλ₯Ό λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜•μ΄λΌ ν•˜κ³ , μ‹€ν–‰ κ²°κ³Ό λ³€μˆ˜λͺ…κ³Ό 값이 쌍으둜 μ €μž₯된 것을 μ•Œ 수 μžˆμŒκ°œλ³„ λ³€μˆ˜λͺ…을 λ”°λ‘œ λΆˆλŸ¬λ‚΄ μ‚¬μš©ν•  μˆ˜λ„ μžˆλŠ”λ°,이미 ν‚€μ›Œλ“œ κ°€λ³€ 인수λ₯Ό μ‚¬μš©ν•΄ ‘first = 3, second = 4, third = 5’ λ³€μˆ˜λ₯Ό ν•¨μˆ˜ μ•ˆμ— λ„£μ—ˆκΈ° λ•Œλ¬Έμ— secondλΌλŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 있음
  • λ‹€μŒ μ½”λ“œμ—μ„œ 3, 4λŠ” 각각 one, two에 ν• λ‹Ήλ˜κ³ , λ‚˜λ¨Έμ§€ 5, 6, 7, 8, 9λŠ” args에, first = 3, second = 4*,* third = 5λŠ” λ”•μ…”λ„ˆλ¦¬ν˜•μœΌλ‘œ kwargs에 ν• λ‹Ήλœλ‹€.
  • 정리해보면, 일반적으둜 λ§€κ°œλ³€μˆ˜, κ°€λ³€ 인수. ν‚€μ›Œλ“œ κ°€λ³€ 인수λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜λ©΄ λ§€κ°œ λ³€μˆ˜, κ°€λ³€ 인수, ν‚€μ›Œλ“œ κ°€λ³€ 인수 μˆœμœΌλ‘œ 각 값을 μ λ‹Ήν•œ μœ„μΉ˜μ˜ λ³€μˆ˜μ— ν• λ‹Ή
  • 이전 κ°€λ³€ μΈμˆ˜μ—μ„œ λ³΄μ•˜λ“―μ΄ λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜• λ³€μˆ˜μ— *λ₯Ό2개 뢙이면 κ°œλ³„ λ³€μˆ˜λ‘œ ν’€λ¦¬λ©΄μ„œ ν•¨μˆ˜μ— λ“€μ–΄κ°ˆμˆ˜ 있으며 μΈν„°ν”„λ¦¬ν„°λŠ” λ‹€μŒκ³Ό 같이 해석
  • 이 μ½”λ“œλŠ” print() ν•¨μˆ˜λ‘œ 좜λ ₯ν•  λ•Œ λ³€μˆ˜ kwargs에 μžˆλŠ” second λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ” 것
  • print('Second value is {second}’.format(**kwargs))와 같이
  • λ³€μˆ˜λͺ… μžμ²΄λŠ” μ€‘μš”ν•˜μ§€ μ•Šμ§€λ§Œ, * λŠ” λ°˜λ“œμ‹œ **처럼 2개λ₯Ό λΆ™μ—¬μ•Ό ν•œλ‹€λŠ” 것은 κΈ°μ–΅ ! kwargs_test(first = 3, second = 4, third = 5)μ—μ„œ 3개의 ν‚€μ›Œλ“œ 인수λ₯Ό λ„˜κ²ΌμœΌλ―€λ‘œ 2ν–‰μ˜ print() ν•¨μˆ˜μ—μ„œ κ·Έ μΈμˆ˜λ“€μ΄ {'first': 3, 'second': 4, 'third': 5} ν˜•νƒœλ‘œ 좜λ ₯
  • ν‚€μ›Œλ“œ κ°€λ³€ μΈμˆ˜λŠ” λ°˜λ“œμ‹œ λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ˜ 맨 λ§ˆμ§€λ§‰, 즉 κ°€λ³€ 인수 λ‹€μŒμ— μ„ μ–Έλ˜μ–΄μ•Όν•¨
  • 이 방법은 λ§€κ°œλ³€μˆ˜μ˜ 이름을 λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šκ³  μž…λ ₯ν•˜λŠ” λ°©λ²•μœΌλ‘œ 이전 κ°€λ³€ μΈμˆ˜μ™€λŠ” 달리 * λ₯Ό 2개 μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό ν‘œμ‹œ
  • ν‚€μ›Œλ“œ κ°€λ³€ 인수(keyword variable-length arguments) :

쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 방법

  • 쒋은 μ½”λ“œμ˜ μ˜λ―Έμ’‹μ€ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 되기 μœ„ν•΄μ„œλŠ” μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό λ§Œλ“€λΌλŠ” μ‘°μ–Έμ΄λŸ¬ ν•œ 것을 가독성이라 ν•˜λ©° κ²°κ΅­ ν”„λ‘œκ·Έλž¨ μ½”λ“œλŠ” λ§Žμ€ μ‚¬λžŒμ΄ μ‰½κ²Œ 읽고 이해할 수 μžˆλ„λ‘ 가독성이 μ’‹μ•„μ•Ό ν•œλ‹€
  • λ‹€μ‹œ 말해 λ‹€λ₯Έ μ‚¬λžŒμ΄ λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œλ₯Ό ꡉμž₯히 μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” 뜻,
  • "컴퓨터가 이해할 수 μžˆλŠ” μ½”λ“œλŠ” μ–΄λŠ λ°”λ³΄λ‚˜ λ‹€ 지 수 μžˆλ‹€. 쒋은 ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” μ½”λ“œλ₯Ό μ§ λ‹€” - λ§ˆν‹΄ 파울러
  • μ½”λ”© κ·œμΉ™
    • κΈ°λ³Έ μ½”λ”© κ·œμΉ™
      • λ“€μ—¬μ“°κΈ°λŠ”4 슀페이슀
      • ν•œ 쀄은 μ΅œλŒ€ 79μžκΉŒμ§€
      • λΆˆν•„μš”ν•œ 곡백은 μ—†μ• κΈ°
    • PEP 8 μ½”λ”© κ·œμΉ™
      • = μ—°μ‚°μžλŠ” 1μΉΈ 이상 λ„μš°μ§€ μ•ŠλŠ”λ‹€.
      • variable_example = 12 # ν•„μš” μ΄μƒμœΌλ‘œ 빈칸이 많음 variable_example = 12 # 정상적인 띄어쓰기
      • 주석은 항상 κ°±μ‹ ν•˜κ³  λΆˆν•„μš”ν•œ 주석은 μ‚­μ œν•œλ‹€.
      • μ†Œλ¬Έμž 1, λŒ€λ¬Έμž O, λŒ€λ¬Έμž IλŠ” μ‚¬μš©μ„ κΈˆν•œλ‹€.
      • 1100 = "Hard to Understand" # λ³€μˆ˜ κ΅¬λΆ„ν•˜κΈ° 어렀움
      • ν•¨μˆ˜λͺ…은 μ†Œλ¬Έμžλ‘œ κ΅¬μ„±ν•˜κ³ , ν•„μš”ν•˜λ©΄ λ°‘μ€„λ‘œ κ΅¬λΆ„ν•œλ‹€.
    • 파이썬 κ°œλ°œμžκ°€ 직접 μ •ν•œ κ·œμΉ™, κΌ­ PEP 8에 맞좰 μ½”λ”©ν•  ν•„μš”λŠ” μ—†μŒ
    <aside> πŸ’‘ flake8 λͺ¨λ“ˆμ½”딩을 ν•œ ν›„ μ½”λ”© κ·œμΉ™μ„ μ œλŒ€λ‘œ μ§€μΌ°λŠ”μ§€ ν™•μΈν•˜λŠ” 방법 쀑 ν•˜λ‚˜λŠ” flake8 λͺ¨λ“ˆλ‘œ μ²΄ν¬ν•˜λŠ” 것
    conda install -c anaconda flake8
    
    μ•„λž˜ μ½”λ“œ μž…λ ₯ ν›„ ‘test_flake.py’둜 μ €μž₯cmd 창에 λ‹€μŒκ³Ό 같이 μž…λ ₯μ‹œ 각 μ½”λ“œμ˜ μˆ˜μ •λ°©λ²• μ•Œλ €μ€Œ
  • flake8 test_flake.py
  • 1L0O = "123" for i in 10 : print('Hello')
  • flake8을 μ„€μΉ˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € cmd 창에 λ‹€μŒκ³Ό 같이 μž…λ ₯
  • </aside>
  • ν•¨μˆ˜ 개발 κ°€μ΄λ“œλΌμΈ
    • ν•¨μˆ˜ 이름
      • ν•¨μˆ˜ λ‚΄μš©μ€ κ°€λŠ₯ν•˜λ©΄ 짧게 μž‘μ„±ν•  것(쀄 수λ₯Ό 쀄일 것)
      • ν•¨μˆ˜ 이름에 ν•¨μˆ˜μ˜ μ—­ν• κ³Ό μ˜λ„λ₯Ό λͺ…ν™•νžˆ λ“œλŸ¬λ‚Ό 것
      def print_hello_world():
          print('Hello, World')
      def get_hello_world():
          return'Hello, World'
      
    • ν•¨μˆ˜μ˜ 역할즉, ν•¨μˆ˜λŠ” ν•œ 가지 역할을 λͺ… ν™•νžˆ ν•΄μ•Ό ν•œλ‹€. λ‹€μŒ μ½”λ“œμ²˜ 럼 두 λ³€μˆ˜λ₯Ό λ”ν•˜λŠ” ν•¨μˆ˜λΌλ©΄ ꡳ이 κ·Έ κ²°κ³Όλ₯Ό 화면에 좜λ ₯ν•  ν•„μš”λŠ” μ—†μŒ 이름에 λ§žλŠ” μ΅œμ†Œν•œμ˜ μ—­ν• λ§Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
    • def add_variables(x, y): return x + y def add_variables(x, y): print(x, y) return x + y
    • ν•˜λ‚˜μ˜ ν•¨μˆ˜μ—λŠ” μœ μ‚¬ν•œ 역할을 ν•˜λŠ” μ½”λ“œλ§Œ ν¬ν•¨μ‹œμΌœμ•Ό 함
    • ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” 경우
      • κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” μ½”λ“œλ₯Ό ν•¨μˆ˜λ‘œ λ³€ν™˜
        a =52
        if (a >3):
            print('Hello World')
            print('Hello TEAMLAB')
        if (a > 4):
            print('Hello World')
            print('Hello TEAMLAB')
        if (a > 5):
            print('Hello World')
            print('Hello TEAMLAB')
        
        이의 경우 ν•¨μˆ˜ λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λ©΄ μ’‹μŒ
      • def print_hello(): print("Hello World") print('Hello TEAMLAB') a =5 if (a > 3): print_hello() if (a > 4): print_hello() if (a >5): print_heUo()
      • ex. print (’Hello World’), print(’Hello TEAMLAB’) μ½”λ“œ 반볡
      • λ³΅μž‘ν•œ 둜직이 μ‚¬μš©λ˜μ—ˆμ„ λ•Œ 식별 κ°€λŠ₯ν•œ μ΄λ¦„μ˜ ν•¨μˆ˜λ‘œ λ³€ν™˜
        import math
        a = 1, b = -2, c = 1
        
        print((-b + math.sqrt(b ** 2 - (4 * a * c)) ) / (2 * a))
        print((-b - math.sqrt(b ** 2 - (4 * a * c)) ) / (2 * a))
        
        이 κ²½μš°μ—λ„ ν•¨μˆ˜ λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŒν•¨μˆ˜λ₯Ό κ°œλ°œν•˜λŠ” μž…μž₯μ—μ„œλŠ” μ–΄λ–»κ²Œ μž‘μ„±ν•˜λ“  λ³΅μž‘ν•œ λ‘œμ§μ„ μž‘μ„±ν•΄μ•Ό ν•˜μ§€λ§Œ, ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œλŠ” κ°„λ‹¨νžˆ μΈμˆ˜μ— λŒ€ν•œ μ •λ³΄λ§Œ μ•Œλ©΄ λ˜λ―€λ‘œ 맀우 μœ μš©ν•˜λ‹€.
      • import math def get_result_quadratic_equation(a, b, c): values = [ ] values.append((-b + math.sqrt(b ** 2 - (4 * a * c))) / (2 * a)) values.append((-b - math.sqrt(b ** 2 - (4 * a * c)) ) / (2 * a)) return values print(get_result_quadratic_equation(l,-2,1))
      • ex. μ΄μ°¨λ°©μ •μ‹μ˜ 근을 κ΅¬ν•˜λŠ” 근의 곡식 μ‚¬μš©