Chapter 6. ν•¨μˆ˜#

ν•™μŠ΅λͺ©ν‘œμ™€ κΈ°λŒ€νš¨κ³Ό

  • ν•™μŠ΅λͺ©ν‘œ

    • ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방법과 ν˜ΈμΆœν•˜λŠ” 방법을 μ•Œμ•„λ³΄μž.

    • ν•¨μˆ˜ μ „λ‹¬μΈμž, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.

  • κΈ°λŒ€νš¨κ³Ό

    • 자주 μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯을 ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄λ†“κ³  μ‚¬μš©ν•  수 μžˆλ‹€.

ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ 두고 ν•„μš”ν•  λ•Œλ§ˆλ‹€ ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯(function)이닀. 자주 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλΌλ„ μ½”λ“œλ₯Ό ꡬ쑰화 체계화 ν•˜κΈ° μœ„ν•΄μ„œλ„ μ •μ˜ν•œλ‹€.

ν•¨μˆ˜μ˜ μ’…λ₯˜#

ν•¨μˆ˜λŠ” 크게 λ‚΄μž₯ ν•¨μˆ˜μ™€ μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜λ‘œ λ‚˜λ‰œλ‹€.

λ‚΄μž₯ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯을 미리 λ§Œλ“€μ–΄λ†“μ€ ν•¨μˆ˜μ΄λ©°, 이미 μ—¬λŸ¬λΆ„λ“€μ΄ μ‚¬μš©ν•΄ λ³Έ 적이 μžˆλŠ” print(), input(), len()… 등이 이에 μ†ν•œλ‹€. λ‚΄μž₯ν•¨μˆ˜λŠ” ν•„μš”ν•  λ•Œ ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν•„μš”μ— μ˜ν•΄μ„œ λ§Œλ“  ν•¨μˆ˜μ΄λ©° 였늘 μ—¬λŸ¬λΆ„λ“€μ΄ μ •μ˜ν•˜κ³  ν˜ΈμΆœν•  ν•¨μˆ˜λ“€μ΄ λ°”λ‘œ μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜μ— μ†ν•œλ‹€.

ν•¨μˆ˜ μ •μ˜μ™€ 호좜#

ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄λ³΄κ³  ν˜ΈμΆœν•΄λ³΄μž. ν•¨μˆ˜ μ •μ˜ ν˜•μ‹μ€ μ•„λž˜μ™€ κ°™λ‹€.

def ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2, ..., λ§€κ°œλ³€μˆ˜n):
    λ³Έλ¬Έ μ‹€ν–‰λ¬Έμž₯1
    λ³Έλ¬Έ μ‹€ν–‰λ¬Έμž₯2
    ...
    return 리턴값
  • νŒŒμ΄μ¬μ—μ„œλŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ defλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

  • def λ‹€μŒμ—λŠ” ν•¨μˆ˜λͺ…이 μ˜€λŠ”λ° ν•¨μˆ˜λͺ… μ§“λŠ” κ·œμΉ™μ€ λ³€μˆ˜λͺ… μ§“λŠ” κ·œμΉ™κ³Ό λ˜‘κ°™λ‹€.

  • ν•¨μˆ˜λͺ…() κ΄„ν˜Έμ•ˆμ—λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό 적어주며 μƒλž΅ κ°€λŠ₯ν•˜λ‹€. λ§€κ°œλ³€μˆ˜λŠ” λ§€κ°œλ³€μˆ˜ νŒŒνŠΈμ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•œλ‹€.

  • def ν•¨μˆ˜λͺ…() κ΄„ν˜Έ λ’€μ—λŠ” λ°˜λ“œμ‹œ 콜둠(:)을 써야 ν•œλ‹€.

  • ν•¨μˆ˜μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” λ¬Έμž₯은 λ°˜λ“œμ‹œ λ“€μ—¬μ“°κΈ°λ₯Ό ν•΄μ•Όν•œλ‹€.

  • return은 ν•¨μˆ˜ λ°–μœΌλ‘œ 값을 λ°˜ν™˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€. λ°˜ν™˜ νŒŒνŠΈμ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•œλ‹€.

ν•¨μˆ˜ 호좜 ν˜•μ‹μ€ μ•„λž˜μ™€ κ°™λ‹€.

ν•¨μˆ˜λͺ…(μ „λ‹¬μΈμž1, μ „λ‹¬μΈμž2, ..., μ „λ‹¬μΈμžn)
  • ν•¨μˆ˜ ν˜ΈμΆœμ€ μ •μ˜ν•œ ν•¨μˆ˜λ₯Ό λΆˆλŸ¬μ„œ μ‚¬μš©ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

  • μ •μ˜ν•œ ν•¨μˆ˜λŠ” ν•¨μˆ˜λͺ…()을 톡해 ν˜ΈμΆœν•œλ‹€.

  • μ΄λ•Œ ν•¨μˆ˜λͺ…() κ΄„ν˜Έμ•ˆμ—λŠ” μ „λ‹¬μΈμžλ₯Ό 쀄 수 있으며 μƒλž΅ κ°€λŠ₯ν•˜λ‹€. μ „λ‹¬μΈμžλŠ” μ „λ‹¬μΈμž νŒŒνŠΈμ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•œλ‹€.

μ‹¬ν”Œν•œ ν•¨μˆ˜ μ •μ˜#

  • κ°„λ‹¨ν•œ 예둜, hello() ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄λ³΄μž.

  • hello() ν•¨μˆ˜λŠ” β€˜μ•ˆλ…•ν•˜μ„Έμš”. λ°˜κ°‘μŠ΅λ‹ˆλ‹€.’λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

  • ν•¨μˆ˜λ₯Ό μ •μ˜(λ˜λŠ” μˆ˜μ •)ν•˜μ˜€λ‹€λ©΄ ν•¨μˆ˜λ₯Ό μΈμ‹ν•˜λ„λ‘ μ‹€ν–‰μ‹œμΌœ μ£Όμ–΄μ•Ό ν•œλ‹€.

  • ν•¨μˆ˜ μ •μ˜ 파트λ₯Ό μ‹€ν–‰μ‹œμΌœλ„ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 μ•„λ‹ˆλ―€λ‘œ κ²°κ³Όκ°€ λ‚˜μ˜€μ§€λŠ” μ•ŠλŠ”λ‹€.

def hello():
  print('μ•ˆλ…•ν•˜μ„Έμš”. λ°˜κ°‘μŠ΅λ‹ˆλ‹€.')
def dragon_treasure():
  print('Gives you my treasure!')
  print('''
                          __/>^^^;:,'
          .    \'    ,      /-.       :,/|/|'
          _______     __/ ^         :,/ \__'
      _ ./_|___|_\. _(~             ;/ /  /'
          \ \   / /    `-\'--._       / / ,<  ___'
          \ \' \' /   ,__.   /=\     /  _/  >|_\'.'
              \ " /     `_ `--------\'    __ / \',\ \\'
              \./   ,_// ,---_____,   ,_  \_  ,| |'
              V     `--\' |=|           \._/ ,/  |'
                          \=\            `,,/   |'
                          \=\            ||    /'
                              \=\____       |\    \\'
                              / \/    `     <__)    \\'
                              | |                    |'
                          ,__\,\                   /'
                          ,--____>    /\.         ./'
                          \'-__________>  \.______/'
      ''')

μ‹¬ν”Œν•œ ν•¨μˆ˜ 호좜#

  • μ •μ˜ν•œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

  • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€λŠ” μ˜λ―ΈλŠ” ν•¨μˆ˜ μ •μ˜νŒŒνŠΈμ— μžˆλŠ” λ³Έλ¬Έ μ‹€ν–‰ λ¬Έμž₯을 μ‹€ν–‰μ‹œν‚¨λ‹€λŠ” 것이닀.

  • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” ν•¨μˆ˜λͺ…()와 같이 μ“΄λ‹€.

ν•¨μˆ˜λͺ…()
hello()
μ•ˆλ…•ν•˜μ„Έμš”. λ°˜κ°‘μŠ΅λ‹ˆλ‹€.
dragon_treasure()
Gives you my treasure!

                          __/>^^^;:,'
          .    '    ,      /-.       :,/|/|'
          _______     __/ ^         :,/ \__'
      _ ./_|___|_\. _(~             ;/ /  /'
          \ \   / /    `-'--._       / / ,<  ___'
          \ ' ' /   ,__.   /=\     /  _/  >|_'.'
              \ " /     `_ `--------'    __ / ',\ \'
              \./   ,_// ,---_____,   ,_  \_  ,| |'
              V     `--' |=|           \._/ ,/  |'
                          \=\            `,,/   |'
                          \=\            ||    /'
                              \=\____       |\    \'
                              / \/    `     <__)    \'
                              | |                    |'
                          ,__\,\                   /'
                          ,--____>    /\.         ./'
                          '-__________>  \.______/'
      
hello()
dragon_treasure()
μ•ˆλ…•ν•˜μ„Έμš”. λ°˜κ°‘μŠ΅λ‹ˆλ‹€.
Gives you my treasure!

                          __/>^^^;:,'
          .    '    ,      /-.       :,/|/|'
          _______     __/ ^         :,/ \__'
      _ ./_|___|_\. _(~             ;/ /  /'
          \ \   / /    `-'--._       / / ,<  ___'
          \ ' ' /   ,__.   /=\     /  _/  >|_'.'
              \ " /     `_ `--------'    __ / ',\ \'
              \./   ,_// ,---_____,   ,_  \_  ,| |'
              V     `--' |=|           \._/ ,/  |'
                          \=\            `,,/   |'
                          \=\            ||    /'
                              \=\____       |\    \'
                              / \/    `     <__)    \'
                              | |                    |'
                          ,__\,\                   /'
                          ,--____>    /\.         ./'
                          '-__________>  \.______/'
      

πŸ˜„ μ•„λž˜ output sampleκ³Ό 같이 메뉴λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜ menu()λ₯Ό μ •μ˜ν•˜κ³  ν˜ΈμΆœν•΄λ³΄μ„Έμš”. 쀄(===)은 β€˜=’*70으둜 κ·Έλ¦¬μ„Έμš”.

Output Sample

======================================================================
['햄에그', 'BLT', 'μΉ˜ν‚¨μƒλŸ¬λ“œ', 'λ¦¬μ½”λ‹€μΉ˜μ¦ˆ', 'λŸ°μΉ˜μƒŒλ“œμœ„μΉ˜', 'λ―Έλ‹ˆλ²„κ±°']
======================================================================
menulist=['햄에그','BLT','μΉ˜ν‚¨μƒλŸ¬λ“œ','λ¦¬μ½”λ‹€μΉ˜μ¦ˆ','λŸ°μΉ˜μƒŒλ“œμœ„μΉ˜', 'λ―Έλ‹ˆλ²„κ±°']

λ§€κ°œλ³€μˆ˜μ™€ μ „λ‹¬μΈμžλ₯Ό κ°€μ§„ ν•¨μˆ˜ 호좜과 μ •μ˜#

λ§€κ°œλ³€μˆ˜#

def ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2, ..., λ§€κ°œλ³€μˆ˜n):
    λ³Έλ¬Έ μ‹€ν–‰λ¬Έμž₯1
    λ³Έλ¬Έ μ‹€ν–‰λ¬Έμž₯2
  • ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ ν•¨μˆ˜λͺ…() κ΄„ν˜Έμ•ˆμ— λ§€κ°œλ³€μˆ˜λ₯Ό 적어쀄 μˆ˜λ„ μžˆλ‹€. (μœ„μ—μ„œ 봀던 μ‹¬ν”Œν•œ ν•¨μˆ˜ μ •μ˜μ™€ 같이 전달받아야 ν•  데이터가 μ—†λ‹€λ©΄ μƒλž΅ν•œλ‹€.)

  • λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ μ•ˆκ³Ό ν•¨μˆ˜ 밖을 μ—°κ²°ν•΄μ£ΌλŠ” 맀개체 역할을 ν•΄μ€€λ‹€κ³  ν•΄μ„œ λ§€κ°œλ³€μˆ˜μ΄λ‹€.

  • ν•¨μˆ˜ λ°–μ—μ„œλΆ€ν„° ν•¨μˆ˜μ•ˆμœΌλ‘œ μ „λ‹¬λ˜λŠ” 데이터λ₯Ό λ°›λŠ” λ³€μˆ˜μ΄λ‹€.

  • 전달받아야 ν•  μΈμžκ°€ ν•˜λ‚˜ 이상이라면 λ§€κ°œλ³€μˆ˜ λͺ…을 콀마둜 λ‚˜μ—΄ν•œλ‹€.

  • λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ μ •μ˜νŒŒνŠΈ λ³Έλ¬Έμ—μ„œ μ‚¬μš©λ˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

def hello2(name):
  print(f'{name}λ‹˜ μ•ˆλ…•ν•˜μ„Έμš”. λ°˜κ°‘μŠ΅λ‹ˆλ‹€.')
def add(a,b):
  print(f'{a}+{b}의 값은 {a+b}μž…λ‹ˆλ‹€.')

μ „λ‹¬μΈμž#

ν•¨μˆ˜λͺ…(μ „λ‹¬μΈμž1, μ „λ‹¬μΈμž2, ..., μ „λ‹¬μΈμžn)
  • ν•¨μˆ˜κ°€ λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€κ³  μžˆλ‹€λ©΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜λͺ…() κ΄„ν˜Έμ•ˆμ— μ „λ‹¬μΈμžλ₯Ό 적어쀄 μˆ˜λ„ μžˆλ‹€. (μœ„μ—μ„œ 봀던 μ‹¬ν”Œν•œ ν•¨μˆ˜ 호좜과 같이 전달해야 ν•  데이터가 μ—†λ‹€λ©΄ μƒλž΅ν•œλ‹€.)

  • μ „λ‹¬μΈμžλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ ν•¨μˆ˜ μ •μ˜νŒŒνŠΈμ—κ²Œ 데이터λ₯Ό 전달할 λ•Œ μ‚¬μš©ν•œλ‹€.

  • μ „λ‹¬μΈμžλŠ” νŒŒλΌλ―Έν„°, μΈμˆ˜λΌκ³ λ„ λΆˆλ¦°λ‹€.

  • μ „λ‹¬μΈμžκ°€ μ—¬λŸ¬κ°œλΌλ©΄ 콀마둜 λ‚˜μ—΄ν•œλ‹€.

hello2('홍길동')
ν™κΈΈλ™λ‹˜ μ•ˆλ…•ν•˜μ„Έμš”. λ°˜κ°‘μŠ΅λ‹ˆλ‹€.
  • μ „λ‹¬μΈμžκ°€ 두 개라면 λ§€κ°œλ³€μˆ˜μ— μ°¨λ‘€λŒ€λ‘œ μ €μž₯λœλ‹€.

  • μ•„λž˜ μ½”λ“œμ—μ„œ aμ—λŠ” 10이, bμ—λŠ” 20이 μ „λ‹¬λœλ‹€.

add(10, 20)
10+20의 값은 30μž…λ‹ˆλ‹€.

πŸ˜„ 메뉴λ₯Ό μž…λ ₯λ°›μ•„ ν•΄λ‹Ή λ©”λ‰΄μ˜ 주문을 ν™•μΈν•˜λŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” order()ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  ν˜ΈμΆœν•˜μ„Έμš”. 메뉴 μž…λ ₯은 ν•¨μˆ˜ λ°–μ—μ„œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

Input Sample

μΉ˜ν‚¨μƒλŸ¬λ“œ

Output Sample

======================================================================
['햄에그', 'BLT', 'μΉ˜ν‚¨μƒλŸ¬λ“œ', 'λ¦¬μ½”νƒ€μΉ˜μ¦ˆ', 'λŸ°μΉ˜μƒŒλ“œμœ„μΉ˜', 'λ―Έλ‹ˆλ²„κ±°']
======================================================================
메뉴λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”: μΉ˜ν‚¨μƒλŸ¬λ“œ
당신은 μΉ˜ν‚¨μƒλŸ¬λ“œλ₯Ό μ£Όλ¬Έν•˜μ…¨μŠ΅λ‹ˆλ‹€.
menulist=['햄에그','BLT','μΉ˜ν‚¨μƒλŸ¬λ“œ','λ¦¬μ½”νƒ€μΉ˜μ¦ˆ','λŸ°μΉ˜μƒŒλ“œμœ„μΉ˜', 'λ―Έλ‹ˆλ²„κ±°']

def menu():
  print('='*70)
  print(menulist)
  print('='*70)

# order() ν•¨μˆ˜ μ •μ˜
def


menu()
inputOrder = input('메뉴λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”: ')

# order() ν•¨μˆ˜ 호좜
  File "<ipython-input-11-a4ccbd0b5de3>", line 9
    def
       ^
SyntaxError: invalid syntax

λ°˜ν™˜(return)#

  • return은 ν•¨μˆ˜ μ •μ˜νŒŒνŠΈμ—μ„œ μ‚¬μš©λœλ‹€.

  • return은 크게 두 κ°€μ§€ 역할이 μžˆλ‹€.

    • 첫 λ²ˆμ§ΈλŠ” ν•¨μˆ˜μ—μ„œ λ§Œλ“€μ–΄μ§„ 값을 ν˜ΈμΆœμžμ—κ²Œ λ°˜ν™˜ ν•˜λŠ” 것이닀.

    • 두 λ²ˆμ§ΈλŠ” ν•¨μˆ˜λ₯Ό νƒˆμΆœν•˜λŠ” 것이닀.

  • return이 없어도 ν•¨μˆ˜(μ •μ˜νŒŒνŠΈ)μ•ˆμ˜ λ³Έλ¬Έ μ‹€ν–‰ λ¬Έμž₯듀을 λκΉŒμ§€ λ‹€ μ‹€ν–‰ν•˜λ©΄ ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜μ˜¨λ‹€. μ΄λ•Œ λ˜λŒμ•„μ˜€λŠ” μœ„μΉ˜λŠ” ν•¨μˆ˜ ν˜ΈμΆœμ½”λ“œμ˜ μœ„μΉ˜μ΄λ‹€.

  • λ””μ €νŠΈλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ dessert()λ₯Ό μ •μ˜ν•˜κ³  ν˜ΈμΆœν•΄λ³΄μž.

def dessert(a,b,c):
  print('μƒ€λΆ€μž‘~μƒ€λΆ€μž‘~')
  print(f'{a+b+c}, μ™„μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.')
  return a+b+c
  #return a,b,c
order_dessert ='μ•„μ΄μŠ€ν¬λ¦Ό'
#order_dessert = input('Order dessert: ')

print(f'{dessert("μ΄ˆμ½”", "바닐라", order_dessert)}, λ°›μ•˜μŠ΅λ‹ˆλ‹€.')
  • ν•¨μˆ˜λ‘œλΆ€ν„° λ°˜ν™˜ 받은 값을 μœ„μ—μ„œμ™€ 같이 λ°”λ‘œ 좜λ ₯ν•  μˆ˜λ„ μžˆμ§€λ§Œ, μ•„λž˜μ™€ 같이 λ³€μˆ˜μ— μ €μž₯ν•  μˆ˜λ„ μžˆλ‹€.

r_dessert = dessert("λ”ΈκΈ°", "바닐라", order_dessert)
print(f'λ§›μžˆλŠ” {r_dessert}μž…λ‹ˆλ‹€.')
  • return을 λ§Œλ‚˜λ©΄ ν•¨μˆ˜λ₯Ό νƒˆμΆœν•˜κΈ° λ•Œλ¬Έμ— return 이후에 μ–΄λ– ν•œ μ½”λ“œκ°€ μžˆμ–΄λ„ μ „ν˜€ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

def dessert(a,b,c):
  print('μƒ€λΆ€μž‘~μƒ€λΆ€μž‘~')
  print(f'{a+b+c}, μ™„μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.')
  return a+b+c
  print('μ—¬κΈ΄ 무인도야 μ ˆλŒ€ 아무도 μ•ˆμ™€')

r_dessert = dessert("μˆ˜λ°•", "ν‚€μœ„", order_dessert)
print(f'λ§›μžˆλŠ” {r_dessert}μž…λ‹ˆλ‹€.')
  • ν•¨μˆ˜λ‘œλΆ€ν„° return이 μ—†λŠ”λ° λ°˜ν™˜κ°’μ„ 좜λ ₯ν•˜λ©΄ None을 좜λ ₯ν•œλ‹€.

def dessert(a,b,c):
  print('μƒ€λΆ€μž‘~μƒ€λΆ€μž‘~')
  print(f'{a+b+c}, μ™„μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.')

print(f'{dessert("μ΄ˆμ½”", "바닐라", order_dessert)}, λ°›μ•˜μŠ΅λ‹ˆλ‹€.')
r_dessert = dessert("μˆ˜λ°•", "ν‚€μœ„", order_dessert)
print(f'λ§›μžˆλŠ” {r_dessert}μž…λ‹ˆλ‹€.')

πŸ˜„ μ •μˆ˜ λ‘κ°œ x,yλ₯Ό 전달받아 \(x^y\)λ₯Ό λ°˜ν™˜ν•˜λŠ” mypow() ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜μ‹œμ˜€.

Input Sample

5
2

Output Sample

25
#ν•¨μˆ˜ μ •μ˜
def

#ν•¨μˆ˜ 호좜
x = int(input('First num: '))
y = int(input('Second num: '))
mypow(x,y)

λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„(Variable Scope)#

  • λ³€μˆ˜λŠ” λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„μ— 따라 μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜λ‘œ λ‚˜λ‰œλ‹€.

  • λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λŠ” λ³€μˆ˜μ˜ 수λͺ… λ˜λŠ” λ³€μˆ˜κ°€ 영ν–₯을 λ―ΈμΉ˜λŠ” λ²”μœ„λ₯Ό μ˜λ―Έν•œλ‹€.

  • μ „μ—­λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λŠ” ν”„λ‘œκ·Έλž¨ 전체이닀.

  • 반면, μ§€μ—­λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λŠ” κ·Έ λ³€μˆ˜λ₯Ό μ •μ˜ν•œ ν•¨μˆ˜λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€. 즉, ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μƒμ„±λ˜λ©° ν•¨μˆ˜λ₯Ό λ²—μ–΄λ‚˜λ©΄ 수λͺ…을 λ‹€ν•œλ‹€.

  • μ•„λž˜μ˜ 예λ₯Ό 톡해 μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ˜ κ°œλ…μ„ ν™•μ‹€νžˆ μ΄ν•΄ν•˜λ„λ‘ ν•˜μž.

μ§€μ—­λ³€μˆ˜#

  • func1() ν•¨μˆ˜μ™€ func2() ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³ , 각 ν•¨μˆ˜ μ•ˆμ— λ³€μˆ˜ v1κ³Ό v2λ₯Ό μ •μ˜ν•˜μ˜€λ‹€.

  • λ³€μˆ˜ v1κ³Ό v2λŠ” μ§€μ—­λ³€μˆ˜μ΄λ©° μžμ‹ μ΄ νƒ„μƒν•œ ν•¨μˆ˜ μ•ˆμ—μ„œλŠ” μœ νš¨ν•˜λ‹€.

def func1():
  v1=100
  print(f'func1의 local area: {v1}')

def func2():
  v2=200
  print(f'func2의 local area: {v2}')

func1()
func2()
  • ν•˜μ§€λ§Œ μ§€μ—­λ³€μˆ˜ v1, v2λŠ” κ·Έ λ³€μˆ˜κ°€ μ •μ˜λœ ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ―€λ‘œ μ „μ—­μ§€μ—­μ—μ„œλŠ” v1, v2κ°€ μœ νš¨ν•˜μ§€ μ•Šλ‹€.

def func1():
  v1=100
  print(f'func1의 local area: {v1}')

def func2():
  v2=200
  print(f'func2의 local area: {v2}')    

func1()
func2()
print(f'Global area: {v1, v2}')
  • λ˜ν•œ v2λŠ” func2()의 μ§€μ—­λ³€μˆ˜μ΄λ―€λ‘œ func1() ν•¨μˆ˜μ—μ„œλŠ” v2κ°€ μœ νš¨ν•˜μ§€ μ•Šλ‹€. μ΄λŠ” v1도 λ§ˆμ°¬κ°€μ§€μ΄λ‹€.

def func1():
  v1=100
  print(f'func1의 local area: {v2}')

def func2():
  v2=200
  func1()
  print(f'func2의 local area: {v1}')

func2()

μ „μ—­λ³€μˆ˜#

  • ν•¨μˆ˜λ°– Global areaμ—μ„œ μ •μ˜λ˜μ–΄ μžˆλŠ” λ³€μˆ˜λ₯Ό μ „μ—­λ³€μˆ˜λΌ ν•œλ‹€.

  • μ•„λž˜ μ½”λ“œ v4 = 400μ—μ„œ λ³€μˆ˜ v4λŠ” μ „μ—­λ³€μˆ˜μ΄λ‹€.

  • μ „μ—­λ³€μˆ˜λŠ” μœ νš¨λ²”μœ„κ°€ ν”„λ‘œκ·Έλž¨ μ „μ²΄μ΄λ―€λ‘œ ν•¨μˆ˜μ—μ„œλ„ λ³€μˆ˜ v4을 μ°Έμ‘°ν•  수 μžˆλ‹€.

def func1():
  v1 = 100
  print(f'func1의 local area: {v1, v4}')

v4 = 400
func1()
  • ν•¨μˆ˜λ‚΄μ—μ„œλŠ” μ „μ—­λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  μˆ˜λŠ” μžˆμ§€λ§Œ κΆŒν•œ 없이 μˆ˜μ •ν•  μˆ˜λŠ” μ—†λ‹€.

  • μ•„λž˜ μ½”λ“œμ—μ„œμ™€ 같이, μ „μ—­λ³€μˆ˜ μˆ˜μ •μ„ μ‹œλ„ν•˜λ € ν–ˆλ‹€λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. μ •ν™•νžˆ λ§ν•˜λ©΄ κΆŒν•œ 없이 μˆ˜μ •ν•  μˆ˜λŠ” 없기에 μ§€μ—­λ³€μˆ˜ v4λ₯Ό μ°Ύμ§€λ§Œ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ•„μ„œ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

def func1():
    v1 = 100
    v4 = v4 + 500
    print(f'func1의 local area: {v4}')

v4 = 400
func1()
  • ν•¨μˆ˜μ•ˆμ—μ„œ μ „μ—­λ³€μˆ˜λ₯Ό μ •μ˜ν•˜κ±°λ‚˜ μ „μ—­λ³€μˆ˜λ‘œ μ§€μ •ν•˜λ €λ©΄ global ν‚€μ›Œλ“œλ₯Ό μ“΄λ‹€.

def func1():
  global v5
  v5 = 400
  print(f'func1의 local area: {v5}')

func1()
print(f'Global area: {v5}')
def func1():
  global v4
  v4 = v4 + 400
  print(f'func1의 local area: {v4}')

v4 = 400
func1()
print(f'Global area: {v4}')
  • μ „μ—­λ³€μˆ˜ 이름과 μ§€μ—­λ³€μˆ˜ 이름이 κ°™μœΌλ©΄ μ–΄λ–»κ²Œ 될까?

  • μ•„λž˜ μ½”λ“œ name = β€˜μœ μž¬μ„β€™μ—μ„œ λ³€μˆ˜ name은 μ „μ—­λ³€μˆ˜μ΄λ‹€.

  • μ „μ—­λ³€μˆ˜λŠ” μœ νš¨λ²”μœ„κ°€ ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μœ νš¨ν•˜λ―€λ‘œ func1() ν•¨μˆ˜μ•ˆμ—μ„œλ„ μ°Έμ‘° κ°€λŠ₯ν•˜λ‹€.

  • func2()의 κ²½μš°λŠ” μ–΄λ–¨κΉŒ? μ „μ—­λ³€μˆ˜ name이 μžˆμ§€λ§Œ, func2()μ—μ„œλ„ name=β€™μœ μž¬μ„β€™κ³Ό 같이 λ™μΌν•œ μ΄λ¦„μ˜ λ³€μˆ˜ name이 μ •μ˜λ˜μ–΄ μžˆλ‹€. μ΄λ•Œμ—λŠ” μ§€μ—­λ³€μˆ˜ name이 μ „μ—­λ³€μˆ˜ name보닀 μš°μ„  μ‹œ λœλ‹€.

def func1():
  print(f'func1의 local area: {name}')

def func2():
  name = 'μœ μž¬μ„'
  print(f'func2의 local area: {name}')

name = 'μœ μž¬μ„'
func1()
func2()
print(f'Global area: {name}')

μˆ˜μ—…μ€ μ—¬κΈ°κΉŒμ§€ μž…λ‹ˆλ‹€.


(Advanced)μ•Œμ•„λ‘λ©΄ μœ μš©ν•œ map() ν•¨μˆ˜#

  • μ§€κΈˆ λ‹Ήμž₯ λͺ°λΌλ„ λ˜μ§€λ§Œ μ•Œμ•„λ‘λ©΄ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

  • map() ν•¨μˆ˜λŠ” ν•¨μˆ˜λͺ…κ³Ό λ°˜λ³΅κ°€λŠ₯ν•œ 데이터λ₯Ό μ „λ‹¬μΈμžλ‘œ λ°›μ•„ ν•¨μˆ˜μ— μ˜ν•΄ μˆ˜ν–‰λœ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.

  • μ΄λ•Œ λ°˜ν™˜κ°’μ€ map κ°μ²΄μ΄λ―€λ‘œ list()λ‚˜ tuple()둜 λ³€ν™˜ν•˜μ—¬ κ²°κ³Όλ₯Ό 확인해야 ν•œλ‹€.

  • ν˜•μ‹μ€ μ•„λž˜μ™€ κ°™λ‹€.

map(ν•¨μˆ˜λͺ…, iterable data)
  • 리슀트의 μ•„μ΄ν…œμœΌλ‘œ β€˜1’, β€˜2’,’3’을 숫자둜 λ³€ν™˜ν•˜κΈ° μœ„ν•΄ map() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ³΄μž.

  • μ „λ‹¬μΈμžλ‘œ μ£ΌλŠ” ν•¨μˆ˜λͺ…은 μ •μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” int() ν•¨μˆ˜μ΄λ‹€.

  • 이 λ•Œ int() ν•¨μˆ˜λ₯Ό μ§€κΈˆ ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ „λ‹¬μΈμžλ‘œ μ „λ‹¬ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ λ°˜λ“œμ‹œ κ΄„ν˜Έμ—†μ΄ ν•¨μˆ˜λͺ… int만 μ¨μ•Όν•œλ‹€.

a=['1', '2', '3']
list(map(int, a))
  • μ—¬λŸ¬λΆ„λ“€μ΄ μ •μ˜ν•œ μ‚¬μš©μž μ •μ˜ν•¨μˆ˜ λ˜ν•œ map()ν•¨μˆ˜μ˜ μ „λ‹¬μΈμžλ‘œ 쀄 수 μžˆλ‹€.

  • 예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같이 wow()ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄λ³΄μž. μ—¬κΈ°μ„œ μ •μ˜ν•œ wow()ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ 첫 κΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ μˆ˜μ •ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.

  • 즉 β€˜hi’λ₯Ό μ „λ‹¬μΈμžλ‘œ μ£Όλ©΄ β€˜Hi’λ₯Ό λ°˜ν™˜ν•œλ‹€.

def wow(text):
  text=text[0].upper()+text[1:]
  return text
wow('hi')
  • μ•žμ—μ„œ μ •μ˜ν•œ wow()ν•¨μˆ˜μ™€ λ¦¬μŠ€νŠΈλ³€μˆ˜ aλ₯Ό map()의 μ „λ‹¬μΈμžλ‘œ μ‚¬μš©ν•΄λ³΄μž.

  • 리슀트 a의 λͺ¨λ“  μ•„μ΄ν…œλ“€μ΄ 첫 κΈ€μžκ°€ λŒ€λ¬Έμžλ‘œ λ³€ν™˜ λœκ²ƒμ„ 확인할 수 μžˆλ‹€.

a = ['hello', 'welcome', 'fun', 'wow']
a = list(map(wow, a))
print(a)

마무리#

  • ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό λ§Œλ“€μ–΄λ‘κ³  ν•„μš”ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯이닀.

  • μ½”λ“œλ₯Ό ꡬ쑰화 체계화 ν•˜κΈ° μœ„ν•΄μ„œλ„ μ •μ˜ν•œλ‹€.

  • ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό μž₯점을 κ°€μ§ˆ 수 μžˆλ‹€.

  • μ½”λ“œμ˜ κ°„κ²°μ„±: μ½”λ“œκ°€ μ€‘λ³΅λ˜μ§€ μ•Šκ³  κ°„κ²°ν•΄μ§„λ‹€.

  • μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±: ν•œ 번 μž‘μ„±ν•΄λ‘” μ½”λ“œλ₯Ό μ—¬λŸ¬ 번 μ‚¬μš©ν•˜λ―€λ‘œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

  • μ½”λ“œ μˆ˜μ •μ˜ μš©μ΄μ„±: ν”„λ‘œκ·Έλž¨ κΈ°λŠ₯을 ν•¨μˆ˜λ‘œ λ‚˜λˆ„μ–΄ λ¬ΆκΈ° λ•Œλ¬Έμ— μ½”λ“œ μˆ˜μ •μ΄ 쉽닀.

  • ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“ˆν™”: κΈ°λŠ₯λ³„λ‘œ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜λ―€λ‘œ ν”„λ‘œκ·Έλž¨ λͺ¨λ“ˆν™”κ°€ μ¦λŒ€λœλ‹€.

  • ν•¨μˆ˜λŠ” def ν•¨μˆ˜μ΄λ¦„(): 으둜 μ •μ˜ν•˜λ©°, ν•¨μˆ˜μ΄λ¦„μ„ λͺ…μ‹œν•˜μ—¬ ν˜ΈμΆœν•œλ‹€.

  • μ „μ—­λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λŠ” ν”„λ‘œκ·Έλž¨ μ–΄λ””μ—μ„œλ“  μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

  • μ§€μ—­λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λŠ” μ§€μ—­λ³€μˆ˜κ°€ μ„ μ–Έλœ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

  • μ „λ‹¬μΈμžλŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ λ‚΄λΆ€λ‘œ 값을 전달할 λ•Œ μ‚¬μš©ν•˜λ©°, ν•¨μˆ˜ 호좜 μ‹œ κ΄„ν˜Έ μ•ˆμ— κΈ°μž…ν•œλ‹€.

  • λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ μ •μ˜μ—μ„œ κ΄„ν˜Έ μ•ˆμ— κΈ°μž…λœ λ³€μˆ˜λ₯Ό λœ»ν•˜λ©°, μ „λ‹¬μΈμžλ‘œλΆ€ν„° 값을 전달 λ°›μ•„ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λœλ‹€.

  • return은 ν•¨μˆ˜μ˜ κ²°κ³Όλ₯Ό ν•¨μˆ˜ μ™ΈλΆ€λ‘œ λ°˜ν™˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€.