이전에 파이썬 ν΄λ‘œμ €μ— λŒ€ν•΄μ„œ μ •λ¦¬ν–ˆμ—ˆμ§€λ§Œ λ―Έν‘ν•΄μ„œ μžμ„Έν•˜κ²Œ λ‹€μ‹œ 정리해본닀.

λ³€μˆ˜μ˜ μ‚¬μš© λ²”μœ„

ν΄λ‘œμ €μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κΈ°μ „μ— νŒŒμ΄μ¬μ—μ„œ λ³€μˆ˜μ˜ μ‚¬μš©λ²”μœ„λ₯Ό μ•Œμ•„λ³΄μž.

μ „μ—­ λ³€μˆ˜(global variable)

ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜μ—¬ 슀크립트 μ „μ²΄μ—μ„œ μ ‘κ·Ό ν•  수 μžˆλŠ” λ³€μˆ˜λ₯Ό μ „μ—­ λ³€μˆ˜(global variable)라고 ν•œλ‹€.

k = 5            # μ „μ—­ λ³€μˆ˜
def println():   
    print(k)     # μ „μ—­ λ³€μˆ˜ 좜λ ₯ 
    
 println()       # ν•¨μˆ˜ 호좜 
 print(k)        # μ „μ—­ λ³€μˆ˜ ν’€λ ₯ 
 
 κ²°κ³Ό:
 5
 5

μ§€μ—­ λ³€μˆ˜(local variable)

μ§€μ—­ λ³€μˆ˜λŠ” λ³€μˆ˜λ₯Ό λ§Œλ“  ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ ‘κ·Ό ν•  수 있고 ν•¨μˆ˜ λ°”κΉ₯μ—μ„œλŠ” μ ‘κ·Ό ν•  수 μ—†λ‹€.

def println():
    k = 5       # μ§€μ—­ λ³€μˆ˜
    print(k)    # ν•¨μˆ˜μ•ˆμ—μ„œ μ§€μ—­ λ³€μˆ˜ 좜λ ₯ 
    
println()
print(x)
κ²°κ³Ό:
5
μ—λŸ¬ 

global ν‚€μ›Œλ“œ

  • ν•¨μˆ˜ μ•ˆμ—μ„œ μ „μ—­λ³€μˆ˜λ₯Ό λ³€κ²½ν•΄λ³΄μž.
k = 5          # μ „μ—­ λ³€μˆ˜
def println():
    k = 10     # kλŠ” println의 μ§€μ—­ λ³€μˆ˜ 
    print(k)   # println의 μ§€μ—­ λ³€μˆ˜ 좜λ ₯ 
    
println()
print(k)     # μ „μ—­λ³€μˆ˜ 좜λ ₯ 
κ²°κ³Ό:
10
5

ν•¨μˆ˜ μ•ˆμ—μ„œ k값을 10으둜 λ³€κ²½ν–ˆμ§€λ§Œ μ „μ—­ λ³€μˆ˜ k의 값은 λ³€ν•˜μ§€ μ•Šμ•˜λ‹€.
printlnν•¨μˆ˜ μ•ˆμ— kλŠ” μ§€μ—­ λ³€μˆ˜μ΄λ‹€. μ „μ—­ λ³€μˆ˜ k와 μ΄λ¦„λ§Œ 같을 뿐 μ„œλ‘œ 닀은 λ³€μˆ˜μ΄λ‹€.
ν•¨μˆ˜ μ•ˆμ—μ„œ μ „μ—­ λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜κ³ μž ν•˜λ©΄global ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

k = 5          # μ „μ—­ λ³€μˆ˜
def println(): 
     global k  # μ „μ—­ λ³€μˆ˜ kλ₯Ό μ‚¬μš©ν•˜κ² λ‹€κ³  μ„€μ •
     k = 10    # kλŠ” μ „μ—­ λ³€μˆ˜ 
     print(k)  # μ „μ—­ λ³€μˆ˜ 좜λ ₯  
     
println()
print(k)   # μ „μ—­ λ³€μˆ˜ 좜λ ₯ 
κ²°κ³Ό:
10
10

ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜

  • ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ 보자.
def print_hi():
    hi = 'μ•ˆλ…• 세상아!'
    def print_himessage():
        print(hi)
    print_himessage()
    
print_hi()
κ²°κ³Ό:
μ•ˆλ…• 세상아!

print_hiν•¨μˆ˜ μ•ˆμ—μ„œ print_himessageν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλ‹€.
그리고 print_hiν•¨μˆ˜ μ•ˆμ—μ„œ print_himessageν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆλ‹€.

이걸 μ‹€ν–‰ μ‹œν‚¬λ €λ©΄ λ°”κΉ₯의 ν•¨μˆ˜ print_hiν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Όν•œλ‹€.

μ§€μ—­ λ³€μˆ˜μ˜ λ²”μœ„

  • λ°”κΉ₯μͺ½ ν•¨μˆ˜μ˜ μ§€μ—­ λ³€μˆ˜λŠ” κ·Έ μ•ˆμ— μ†ν•œ λͺ¨λ“  ν•¨μˆ˜μ—μ„œ μ ‘κ·Όν•  수 μžˆλ‹€.

μ§€μ—­ λ³€μˆ˜ λ³€κ²½ν•˜κΈ°

  • λ°”κΉ₯μͺ½ ν•¨μˆ˜μ˜ μ§€μ—­ λ³€μˆ˜λ₯Ό μ•ˆμͺ½ ν•¨μˆ˜μ—μ„œ λ³€κ²½ν•΄λ³΄μž.
def a():
    x = 5
    def b():
        x = 10 
    b()
    print(x)
a()
κ²°κ³Ό:
5

10이 λ‚˜μ™€μ•Ό ν•  것 같은데 5κ°€ λ‚˜μ™”λ‹€. μ™œλƒν•˜λ©΄ κ²‰μœΌλ‘œ λ³΄κΈ°μ—λŠ” λ°”κΉ₯μͺ½ ν•¨μˆ˜a의 μ§€μ—­ λ³€μˆ˜ xλ₯Ό λ³€κ²½ν•˜λŠ” 것 κ°™μ§€λ§Œ, μ‹€μ œλ‘œλŠ” μ•ˆμͺ½ ν•¨μˆ˜ bμ—μ„œ 이름이 같은 μ§€μ—­ λ³€μˆ˜ xλ₯Ό μƒˆλ‘œ λ§Œλ“€κ²Œ λœλ‹€.

즉, νŒŒμ΄μ¬μ—μ„œλŠ” ν•¨μˆ˜μ—μ„œ λ³€μˆ˜λ₯Ό λ§Œλ“€λ©΄ 항상 ν˜„μž¬ ν•¨μˆ˜μ˜ μ§€μ—­ λ³€μˆ˜κ°€ λœλ‹€.
ν˜„μž¬ ν•¨μˆ˜ μ•ˆμ—μ„œ 바깐 μͺ½μ˜ μ§€μ—­ λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜λ €λ©΄ nonlocalν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

def a():
    x = 5
    def b():
        nonlocal x.  # ν˜„μž¬ ν•¨μˆ˜μ˜ λ°”κΉ₯μͺ½μ— μžˆλŠ” μ§€μ—­ λ³€μˆ˜ μ‚¬μš©
        x = 10 
    b()
    print(x)
a()
κ²°κ³Ό:
10

ν΄λ‘œμ €

  • ν΄λ‘œμ € ν˜•νƒœλ‘œ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄λ³΄μž.
def calc():
    a = 3
    b = 5 
    def mul_add(x):
        return a * x + b # ν•¨μˆ˜ λ°”κΉ₯μͺ½μ— μžˆλŠ” μ§€μ—­ λ³€μˆ˜ a,bλ₯Ό μ‚¬μš©ν•˜μ—¬ 계산 
    return mul_add  # mul_add ν•¨μˆ˜λ₯Ό λ°˜ν™˜ 

c = calc()
print(c(1),c(2),c(3),c(4),c(5))
κ²°κ³Ό:
8 11 14 17 20 

ν•¨μˆ˜ mul_addλ₯Ό λ§Œλ“  λ’€μ—λŠ” 이 ν•¨μˆ˜λ₯Ό λ°”λ‘œ ν˜ΈμΆœν•˜μ§€ μ•Šκ³  return으둜 ν•¨μˆ˜ 자체λ₯Ό λ°˜ν™˜ν•œλ‹€. (λ°˜ν™˜ν•  λ•Œ ν•¨μˆ˜ μ΄λ¦„λ§Œ λ°˜ν™˜ν•΄μ•Όν•œλ‹€.)

calcν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ λ’€ λ°˜ν™˜κ°’μ„ c에 μ €μž₯ν•œλ‹€.
calcμ—μ„œ mul_addλ₯Ό λ°˜ν™˜ν–ˆμœΌλ―€λ‘œ cμ—λŠ” ν•¨μˆ˜ mul_addκ°€ λ“€μ–΄κ°„λ‹€.
그리고 c에 숫자λ₯Ό λ„£μ–΄μ„œ ν˜ΈμΆœν•˜λ©΄ a * x + b계산식에 따라 값이 좜λ ₯ λœλ‹€.

  • 이처럼 ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ˜ 흐름을 λ³€μˆ˜μ— μ €μž₯ν•  수 μžˆλ‹€.
  • 즉 ν΄λ‘œμ €λŠ” μ§€μ—­ λ³€μˆ˜μ™€ μ½”λ“œλ₯Ό λ¬Άμ–΄μ„œ μ‚¬μš©ν•˜κ³  싢을 λ•Œ ν™œμš©ν•œλ‹€.
profile
λ°°μ›€μ˜ 기둝

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보

Powered by GraphCDN, the GraphQL CDN