Python 03 Function

hsngjuΒ·2020λ…„ 10μ›” 1일
0

python

λͺ©λ‘ 보기
3/6
post-thumbnail

ν—·κ°ˆλ¦¬λŠ” 것과 λ‚˜μ€‘μ— λ‹€μ‹œ ν•œ 번 확인해야 ν•  κ°œλ…μ„ 제 주관에 따라 μ„ νƒν•˜κ³  κΈ°λ‘ν•œ 글이기 λ•Œλ¬Έμ— νŒŒμ΄μ¬μ—μ„œ ν™œμš©λ˜λŠ” κ°œλ…μ΄ λ‹€ ν¬ν•¨λœκ²Œ μ•„λ‹ˆλΌλŠ” 것! μ•Œμ•„μ£Όμ„Έμš”..

β—Ύ ν•¨μˆ˜λ₯Ό μ“°λŠ” 이유

  • 가독성
  • μž¬μ‚¬μš©μ„±
  • μœ μ§€λ³΄μˆ˜

β—Ύ ν•¨μˆ˜μ˜ μž…λ ₯

def func(x):
      return x + 2
  • λ§€κ°œλ³€μˆ˜
    • x λŠ” λ§€κ°œλ³€μˆ˜(parameter)
    • μž…λ ₯을 λ°›μ•„ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ ν™œμš©ν•  λ³€μˆ˜λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.
    • ν•¨μˆ˜μ˜ μ •μ˜ λΆ€λΆ„μ—μ„œ λ³Ό 수 μžˆλ‹€.
func(2)
  • μ „λ‹¬μΈμž
    • 2 λŠ” (전달)인자(argument)
    • μ‹€μ œλ‘œ μ „λ‹¬λ˜λŠ” μž…λ ₯값이라고 μƒκ°ν•˜λ©΄ λœλ‹€.
    • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” λΆ€λΆ„μ—μ„œ λ³Ό 수 μžˆλ‹€.

β—Ύ ν•¨μˆ˜μ˜ 인자

ν•¨μˆ˜λŠ” μž…λ ₯κ°’(input)으둜 인자(argument)λ₯Ό λ„˜κ²¨μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μΉ˜μΈμž

  • ν•¨μˆ˜λŠ” 기본적으둜 인자λ₯Ό μœ„μΉ˜λ‘œ νŒλ‹¨ν•©λ‹ˆλ‹€.
def cylinder(r, h):
    return r**2 * 3.14 * h
cylinder(5,2)

κΈ°λ³ΈμΈμžκ°’

ν•¨μˆ˜κ°€ 호좜될 λ•Œ, 인자λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ κΈ°λ³Έ 값을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. == λ””ν΄νŠΈ

def greeting(name='읡λͺ…'):
    return f'{name}, μ•ˆλ…•?'

greeting()
  • 단, κΈ°λ³Έ μΈμžκ°’(Default Argument Value)을 κ°€μ§€λŠ” 인자 λ‹€μŒμ— κΈ°λ³Έ 값이 μ—†λŠ” 인자λ₯Ό μ‚¬μš©ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

    # 였λ₯˜
    def greeting(name='읡λͺ…',age):
        ...
    # μˆ˜μ •
    def greeting(age,name='읡λͺ…'):
        ...

ν‚€μ›Œλ“œμΈμž

ν‚€μ›Œλ“œ μΈμžλŠ” 직접 λ³€μˆ˜μ˜ μ΄λ¦„μœΌλ‘œ νŠΉμ • 인자λ₯Ό 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

def greeting(age, name='john'):
    return f'{name}은 {age}μ‚΄μž…λ‹ˆλ‹€.'

greeting(name='철수', age=24)
greeting(24, name='철수')
  • 단 μ•„λž˜μ™€ 같이 ν‚€μ›Œλ“œμΈμžλ₯Ό ν™œμš©ν•œ 이후에 μœ„μΉ˜μΈμžλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    #였λ₯˜
    greeting(age=24, '철수')

κ°€λ³€μΈμžλ¦¬μŠ€νŠΈ

κ°œμˆ˜κ°€ 정해지지 μ•Šμ€ μž„μ˜μ˜ 인자λ₯Ό λ°›κΈ° μœ„ν•΄μ„œλŠ” κ°€λ³€ 인자 리슀트*argsλ₯Ό ν™œμš©ν•©λ‹ˆλ‹€.

κ°€λ³€ 인자 λ¦¬μŠ€νŠΈλŠ” tuple ν˜•νƒœλ‘œ μ²˜λ¦¬κ°€ 되며, λ§€κ°œλ³€μˆ˜μ— *둜 ν‘œν˜„ν•©λ‹ˆλ‹€.

  • ν™œμš©λ²•

    # 보톡, 이 κ°€λ³€ 인자 λ¦¬μŠ€νŠΈλŠ” λ§€κ°œλ³€μˆ˜ λͺ©λ‘μ˜ λ§ˆμ§€λ§‰μ— μ˜΅λ‹ˆλ‹€.
    def func(a, b, *args):

κ°€λ³€(μž„μ˜) ν‚€μ›Œλ“œ 인자

정해지지 μ•Šμ€ ν‚€μ›Œλ“œ μΈμžλ“€μ€ dict ν˜•νƒœλ‘œ μ²˜λ¦¬κ°€ 되며, **둜 ν‘œν˜„ν•©λ‹ˆλ‹€.

보톡 kwagrsλΌλŠ” 이름을 μ‚¬μš©ν•˜λ©°, **kwargsλ₯Ό 톡해 인자λ₯Ό λ°›μ•„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • ν™œμš©λ²•

    def func(**kwargs):

β—Ύ ν•¨μˆ˜μ™€ μŠ€μ½”ν”„

ν•¨μˆ˜λŠ” μ½”λ“œ 내뢀에 곡간(scope)λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. ν•¨μˆ˜λ‘œ μƒμ„±λœ 곡간은 μ§€μ—­μŠ€ν¬ν¬(local scope)라고 뢈리며, κ·Έ μ™Έμ˜ 곡강인 μ „μ—­ 슀포크(global scope)와 κ΅¬λΆ„λ©λ‹ˆλ‹€.

  • μ „μ—­ μŠ€μ½”ν”„ (global) : μ½”λ“œ μ–΄λ””μ—μ„œλ“  μ°Έμ‘°ν•  수 μžˆλŠ” 곡간
    • μ „μ—­ λ³€μˆ˜(global variable): μ „μ—­ μŠ€μ½”ν”„μ— μ •μ˜λœ λ³€μˆ˜
  • 지역 μŠ€μ½”ν”„(local) : ν•¨μˆ˜κ°€λ§Œλ“  μŠ€μ½”ν”„λ‘œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλŠ” 곡간
    • 지역 λ³€μˆ˜(local variable): 둜컬 μŠ€μ½”ν”„μ— μ •μ˜λœ λ³€μˆ˜

이름 검색 κ·œμΉ™

νŒŒμ΄μ¬μ—μ„œ μ‚¬μš©λ˜λŠ” 이름(μ‹λ³„μž)듀은 이름곡간(namespace)에 μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

이것을, LEGB Rule 이라고 λΆ€λ₯΄λ©°, μ•„λž˜μ™€ 같은 μˆœμ„œλ‘œ 이름을 μ°Ύμ•„λ‚˜κ°‘λ‹ˆλ‹€.

  • Local scope: μ •μ˜λœ ν•¨μˆ˜

  • Enclosed scope: μƒμœ„ ν•¨μˆ˜

  • Global scope: ν•¨μˆ˜ λ°–μ˜ λ³€μˆ˜ ν˜Ήμ€ import된 λͺ¨λ“ˆ

  • Built-in scope: νŒŒμ΄μ¬μ•ˆμ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ” ν•¨μˆ˜ λ˜λŠ” 속성

λ³€μˆ˜μ˜ 수λͺ…μ£ΌκΈ°(lifecycle)

λ³€μˆ˜μ˜ 이름은 각자의 수λͺ…μ£ΌκΈ°(lifecycle)κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • 빌트인 μŠ€μ½”ν”„(built-in scope): 파이썬이 μ‹€ν–‰λœ 이후뢀터 μ˜μ›νžˆ μœ μ§€

  • μ „μ—­ μŠ€μ½”ν”„(global scope): λͺ¨λ“ˆμ΄ 호좜된 μ‹œμ  이후 ν˜Ήμ€ 이름 μ„ μ–Έλœ 이후뢀터 인터프리터가 λλ‚ λ•Œ κΉŒμ§€ μœ μ§€

  • 지역(ν•¨μˆ˜) μŠ€μ½”ν”„(local scope): ν•¨μˆ˜κ°€ 호좜될 λ•Œ μƒμ„±λ˜κ³ , ν•¨μˆ˜κ°€ κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€ (ν•¨μˆ˜ λ‚΄μ—μ„œ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” μ˜ˆμ™Έλ₯Ό μΌμœΌν‚¬ λ•Œ μ‚­μ œλ¨)

profile
κΈ°λ‘ν•˜λŠ” μŠ΅κ΄€μ€ μ‰½κ²Œ λ¬΄λ„ˆμ§€μ§€ μ•Šμ•„μš”.

0개의 λŒ“κΈ€