๐Ÿ–ฅ๏ธ[Python] 6. ํ•จ์ˆ˜ (function)

thisk336ยท2023๋…„ 5์›” 15์ผ
0

Python

๋ชฉ๋ก ๋ณด๊ธฐ
8/17
post-thumbnail

Function์ด๋ž€?

์ˆ˜ํ•™์ ์ธ ์˜๋ฏธ์˜ ํ•จ์ˆ˜์™€ ๊ฐœ๋…์€ ๋น„์Šทํ•˜์ง€๋งŒ ์—ญํ• ์ด ๋‹ค๋ฅด๋‹ค.

  • input์ด ๋“ค์–ด์™€์„œ output์ด ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‚˜์˜จ๋‹ค๋Š” ๊ฐœ๋…์€ ๊ฐ™์ง€๋งŒ, ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ •ํ™•ํ•˜๊ฒŒ ํ•จ์ˆ˜๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ ๋ฌถ์Œ์ด๋‹ค.
  • def ํ•จ์ˆ˜์ด๋ฆ„(param1, param2, ... ):
    (statement1)
    (statement2)
    return
  • ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ ๋•Œ๋ฌธ์ด๋‹ค.

    ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. Reusability๋ผ๊ณ  ํ•˜๋ฉฐ, ๋˜‘๊ฐ™์€ ๊ตฌ์กฐ์˜ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ๋˜‘๊ฐ™์€ ๊ตฌ์กฐ์˜ ์ฝ”๋“œ๋Š” ๋ณดํ†ต ํ•œ ๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ฌถ์ด๊ฒŒ ๋˜๋ฉฐ, ์ด ๊ธฐ๋Šฅ ๋‹จ์œ„๋ฅผ ์ฝ”๋“œ๋กœ ๋ฌถ์–ด์„œ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ ๋‹ค.

def add(a,b) :
    return a + b
    
def sub(a, b) :
    return a-b

def mul(a, b) :
    return a * b

def div(a, b) :
    return a / b

ํ•จ์ˆ˜์˜ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ

1. ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ -> ํ•จ์ˆ˜ parameter์™€ return์ด ๋ชจ๋‘ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ.

def test(a, b):
    return a + b

2. ํ•จ์ˆ˜ parameter๋Š” ์—†๊ณ  return์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ.

def test():
    return "Test"

3. ํ•จ์ˆ˜ parameter๋Š” ์žˆ๋Š”๋ฐ return์ด ์—†๋Š” ๊ฒฝ์šฐ.

def test(a, b):
    print(f"a: {a}, b: {b}")

4. ํ•จ์ˆ˜ parameter๋„ ์—†๊ณ  return๋„ ์—†๋Š” ๊ฒฝ์šฐ.

def test():
    print("Hello World")

Q. ๋งŒ์•ฝ์— ํ•จ์ˆ˜์˜ ์ž…๋ ฅ parameter์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋ฅผ๋• ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

 # *(asterisk)๋ฅผ ์•ž์— ๋ถ™์ด๋Š” ๊ฒƒ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ parameter๋ฅผ ๋ฐ›์•„์„œ tuple๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ค€๋‹ค.
def add_many(*args): # arguments๋ฅผ ๋ชจ๋‘ ๋ฐ›์•„์„œ ๋‹ค ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ.
    total = 0
    for arg in args :
        total = total + arg
    return total # ๋ˆ„์ ํ•ฉ(cumulative sum)

ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์•Œ์•„๋ณด์ž.

  • ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋“ค์—๊ฒŒ๋Š” ํšจ๋ ฅ ๋ฒ”์œ„์™€ ์ˆ˜๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

function call์„ ํ•  ๋•Œ ์ฃผ์˜์‚ฌํ•ญ
โ‘  mutable data type์„ Parameter๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•ด์•ผํ•œ๋‹ค!
โ‘ก immutable data type์€ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

L = [1, 2, 3, 4, 5]
L2 = [1, 2, 3, 4, 5, 6]
L3 = [1, 2, 3, 4, 5, 6, 7, 8, 10, -11, -63, 17]

def find_median(L) :
    L.sort()
    if (len(L) % 2) == 0 : # ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ง์ˆ˜ ๊ฐœ ์ผ ๋•Œ
        n1 = L[int(len(L)/2)-1]
        n2 = L[int(len(L)/2)]
        n = (n1 + n2) / 2
    else : # ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ™€์ˆ˜ ๊ฐœ ์ผ ๋•Œ
        n = L[int(len(L)/2)]
    return n

# ์ด ๋•Œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ๋˜๋ฉด ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. 
# ๋”ฐ๋ผ์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

# ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• : ๋ณต์‚ฌ๋ณธ์„ ํ•จ์ˆ˜์— ๋„˜๊ฒจ์ฃผ๊ธฐ
L3_copy = L3.copy()
find_median(L3_copy)

# ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• : ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ธฐ
def find_median(L) :
    # L.sort()
    L = sorted(L) # ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ L์— ๋ณต์‚ฌ
    if (len(L) % 2) == 0 : # ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ง์ˆ˜ ๊ฐœ ์ผ ๋•Œ
        n1 = L[int(len(L)/2)-1]
        n2 = L[int(len(L)/2)]
        n = (n1 + n2) / 2
    else : # ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ™€์ˆ˜ ๊ฐœ ์ผ ๋•Œ
        n = L[int(len(L)/2)]
    return n

find_median(L3)

0๊ฐœ์˜ ๋Œ“๊ธ€