๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- C, C++, Python, Android

Python ํ•จ์ˆ˜(Function)์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ๋ถ„๋ฅ˜

by Wonit 2019. 12. 7.

Function

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ํ•จ์ˆ˜๋ž€ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ๋ฐ ๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ์ฝ”๋“œ ๋ธ”๋Ÿญ์ด๋‹ค.

 

Python์—์„œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” def ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜):๋กœ ์„ ์–ธ์„ ํ•œ ๋’ค, ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ•œ ํ•จ์ˆ˜ ๋ชธ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

 

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด input๊ณผ output์œผ๋กœ ๋‚˜๋ˆ„๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” ์•ž์œผ๋กœ input์„ ๋งค๊ฐœ๋ณ€์ˆ˜, output์„ ๋ฐ˜ํ™˜ ๊ฐ’, ํ•จ์ˆ˜ ๋ชธ์ฒด๋กœ ํ‘œํ˜„ํ•  ๊ฒƒ์ด๋‹ค.

 

ํ•จ์ˆ˜์˜ ๋ถ„๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋ƒ ์—†๋ƒ, ๋ฐ˜ํ™˜ ๊ฐ’์ด ์žˆ๋ƒ ์—†๋ƒ๋กœ ๋‚˜๋‰œ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (X) ๋ฐ˜ํ™˜ ๊ฐ’ (X)

def intro():
    print('hello world')

intro()

 

๋งค๊ฐœ๋ณ€์ˆ˜ (O) ๋ฐ˜ํ™˜ ๊ฐ’ (X)

def intro(arg):
    print(arg+"๋ฅผ ์ž…๋ ฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.")


intro(input('์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” '))
>>>
1234๋ฅผ ์ž…๋ ฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (X) ๋ฐ˜ํ™˜ ๊ฐ’ (O)

def intro():
    return 10
print(intro(), '์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค')
>>>
10 ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (O) ๋ฐ˜ํ™˜ ๊ฐ’ (X)

list_t = []
def fill():
    list_t.append('filled')
fill()
fill()
fill()
fill()
print(list_t)
>>>
['filled', 'filled', 'filled', 'filled']
์œ„์™€ ๊ฐ™์ด ๋ฐ˜ํ™˜ ๊ฐ’๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ๊ณผ ๋ชฉ์ ์ด ๋‹ฌ๋ผ์ง€๋Š”๋ฐ ์ด๋Š” ํŠน์ • ์ˆซ์ž, ๋ฌธ์ž์—ด, ์‹œํ€€์Šค์—๋งŒ ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ์ ์šฉ๋˜๋Š”๋ฐ ์ฐจ์ฐจ ๋ฐฐ์›Œ๊ฐ€๋ฉด์„œ ๋Š๋ผ๋ฉด ๋œ๋‹ค!!

 

์ธ์ž์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ฐจ์ด์ 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ๋น„์Šทํ•œ ๋‹จ์–ด๊ฐ€ ๊ณ„์† ๋‚˜์˜ค๊ณ  ๊ทธ ๊ฒƒ๋“ค์ด ์šฐ๋ฆฌ๋ฅผ ํž˜๋“ค๊ฒŒ ํ•œ๋‹ค... ์•ˆ ๊ทธ๋ž˜๋„ ํž˜๋“  ๊ณต๋ถ€์— ๊ทธ๋Ÿฐ ์žก๋‹คํ•œ๊ฒŒ ํž˜๋“ค๊ฒŒ ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ ์ดˆ์žฅ๋ถ€ํ„ฐ ์™„์ „ํžˆ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์ž.

 

  • ์ธ์ž(argument)
    ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’

  • ๋งค๊ฐœ๋ณ€์ˆ˜(parameter)
    ํ•จ์ˆ˜์—์„œ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ๋Š” ๋ณ€์ˆ˜

 

์œ„์น˜ ์ธ์ž์™€ ํ‚ค์›Œ๋“œ ์ธ์ž

 

Python์€ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ํ•จ์ˆ˜์— ๋น„ํ•ด ๊ต‰์žฅํžˆ ์œ ์—ฐํ•˜๊ณ , ๋…ํŠนํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

์œ„์น˜ ์ธ์ž๋ž€, ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜์˜ ํŠน์„ฑ(์ธ์ž๋Š” ๋“ค์–ด์˜จ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค)๊ณผ ๊ฐ™๋‹ค.

 

ํ•˜์ง€๋งŒ ํ‚ค์›Œ๋“œ ์ธ์ž๋ž€, ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ƒ์‘ํ•˜๋Š” ์ด๋ฆ„์„ ์ธ์ž์— ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๋‹ค์Œ ์˜ˆ๋ฅผ ๋ณด์ž.

 

์œ„์น˜ ์ธ์ž
def add(a, b, c):
    sum = (a + b + c)
    return sum

print(add(1,2,3))

add์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ 1,2,3์€ ๊ฐ๊ฐ a, b, c์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค!

 

ํ‚ค์›Œ๋“œ ์ธ์ž
def lunch(juice, dessert, main_dish):
    return {'main_dish': main_dish, 'juice':juice, 'dessert':dessert}

print(lunch('orange', 'ice Cream', 'steak'))
>>
{'main_dish': 'steak', 'juice': 'orange', 'dessert': 'ice Cream'}

 

์ด๊ฒƒ์ด ์œ„์น˜์ธ์ž์— ๊ธฐ๋ฐ˜ํ•œ ์ •์„์ธ๋ฐ ํ‚ค์›Œ๋“œ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์น˜ ์ธ์ž์˜ ๋ฒ•์น™์„ ์œ„๋ฐฐํ•ด์„œ ์ธ์ž๋กœ ๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 

def lunch(juice, dessert, main_dish):
    return {'main_dish': main_dish, 'juice':juice, 'dessert':dessert}

print(lunch(dessert='ice Cream', juice='grape juice', main_dish='fish'))
>>
{'main_dish': 'fish', 'juice': 'grape juice', 'dessert': 'ice Cream'}

๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ’ ์ง€์ •ํ•˜๊ธฐ

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ Python์€ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

def lunch(juice, dessert, main_dish = 'steak'):
    return {'main_dish': main_dish, 'juice':juice, 'dessert':dessert}

print(lunch('orange', 'ice Cream'))
>>>
{'main_dish': 'steak', 'juice': 'orange', 'dessert': 'ice Cream'}

์›๋ž˜ lunch()๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 3๊ฐœ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜์ง€๋งŒ print(lunch())์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 2๊ฐœ๋งŒ ์ฃผ๋Š” ์ƒํ™ฉ์ด ๋˜์—ˆ๋‹ค.

 

๊ทธ๋ ‡์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ def lunch(juice, dessert, main_dish = 'steak') ๋•Œ๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋งž์ง€ ์•Š์•„๋„ ์ •์ƒ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด ์žˆ๋Š”๋ฐ, ๊ธฐ๋ณธ ์ธ์ž๊ฐ’์€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๊ณ„์‚ฐ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ •์˜๋  ๋•Œ ๊ณ„์‚ฐ๋œ๋‹ค.
๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ํŠœํ”Œ ํƒ€์ž…์˜ ์‹œํ€€์Šค๋งŒ ๊ธฐ๋ณธ ์ธ์ž๋กœ์จ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

์œ„์น˜ ์ธ์ž ๋ชจ์œผ๊ธฐ : *

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— *์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ์œ„์น˜ํ•œ ์ธ์ž ๋ณ€์ˆ˜๋“ค์„ ํŠœํ”Œ๋กœ ๋ฌถ๋Š”๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์•ž์—*๋ฅผ ๋ถ™ํ˜€์ค€๋‹ค.

def print_args(*some):
    print('Some tuple in : ', some)

print(print_args('efg','abc'))
>>>
Some tuple in :  ('asdf', 'asdf')

์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ๊ฐ€ ์˜ค๋˜ ํ•˜๋‚˜์˜ ํŠœํ”Œ ์•ˆ์— ์ €์žฅ๋˜๊ฒŒ ๋˜๋ฉฐ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฌด์ ์œผ๋กœ ๋ฐ›๊ณ  ์ถ”๊ฐ€์ ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ๋•Œ๋Š”? ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

def print_args(var1, var2, *other_var):
    print('var1: ', var1, ' var2: ', var2)
    print('other var is : ', other_var)

print(print_args('efg','abc', 'var3', 'kim', 'temp'))
>>>
var1:  efg  var2:  abc
other var is :  ('var3', 'kim', 'temp')

์ด๋Ÿฐ ์‹์œผ๋กœ *๊ฐ€ ๋ถ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ ์ธ์ž ๊ฐ’๋“ค์€ ๋ชจ๋‘ ํ•œ ํŠœํ”Œ์— ์ €์žฅ๋œ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ 3๊ฐ€์ง€ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์ž๋ฉด

 


ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ 3๊ฐ€์ง€ ๋ฐฉ์‹

  1. func1(v1, v2, v3) : ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ  ์ „๋‹ฌ
  2. func2(*args) : ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ „๋‹ฌ.
  3. func3(**kwargs) :

func1(v1, v2, v3)

์œ„์น˜ ์ธ์ž ์ง€์ •์ด๋ผ๊ณ  ํ•จ(๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ƒ์‘ํ•˜๋Š” ๋ณ€์ˆ˜์— ๋ณต์‚ฌ)
๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด์™€์˜ ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ๋น„์Šทํ•จ
์ž๋ฃŒํ˜•์ด ์—†๋Š” python์˜ ํŠน์ง•์œผ๋กœ ๋ณ€์ˆ˜ ์ด๋ฆ„๋งŒ ์ฃผ๋ฉด ๋จ.

์ถ”๊ฐ€์ ์œผ๋กœ func1(v1, v2, v3 = 0) ์ด๋Ÿฐ์‹์œผ๋กœ ์„ ์–ธํ•  ๋•Œ v3๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์Œ

func2(*args)

์œ„์น˜ ์ธ์ž ๋ชจ์œผ๊ธฐ๋ผ๊ณ  ํ•จ
๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

  • *args ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํŠœํ”Œ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ.
  • ์ •ํ•ด์ง€์ง€ ์•Š์€ ๋‹ค์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠœํ”Œ ํ˜•์‹์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

func3(**kwargs)

ํ‚ค์›Œ๋“œ ์ธ์ž ๋ชจ์œผ๊ธฐ๋ผ๊ณ  ํ•จ
ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•  ๋•Œ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•จ

  • key-value ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ

๋Œ“๊ธ€