ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 기초 5. ν•¨μˆ˜μ™€ λžŒλ‹€μ‹
    PYTHON 2020. 8. 30. 23:47

    🎯 파이썬 ν•¨μˆ˜μ™€ λžŒλ‹€μ‹μ„ μ•Œμ•„λ³Έλ‹€.

     

     

     

     

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

    def function_name(parameter):
        # code
    
    function_name()
    def hello(world):
        print("Hello, ", world)
    
    hello("Python!")
    hello(123)

    ν•¨μˆ˜λŠ” μ½”λ“œμ˜ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. μ–΄λ–€ λ™μž‘μ„ ν•˜λŠ”μ§€ μ‰½κ²Œ μ•Œμ•„λ³Ό 수 μžˆλ„λ‘ ν•˜λ‚˜μ˜ κΈ°λŠ₯을 ν•˜λ‚˜μ˜ ν•¨μˆ˜λ‘œ λ§Œλ“œλŠ” 게 μ’‹λ‹€. def ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€. ν•¨μˆ˜ 호좜 μ‹œ 인자둜 λ‚΄μš©μ„ μ „λ‹¬ν•˜λ©΄ ν•¨μˆ˜μ—μ„œ νŒŒλΌλ―Έν„°λ‘œ 인자λ₯Ό λ°›μ•„μ„œ κ·ΈλŒ€λ‘œ μ½”λ“œμ— μ‚¬μš©ν•  수 μžˆλ‹€. ν˜ΈμΆœν˜•νƒœλŠ” ν•¨μˆ˜λͺ…( ) 이닀.

     

     

    리턴이 μžˆλŠ” ν•¨μˆ˜

    def hello_return(world):
        value = "Hello, " + str(world)
        return value
    
    str = hello_return("Niceman")
    
    print(str)

    리턴을 λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ ν•¨μˆ˜λŠ” λ°˜ν™˜ν•˜λŠ” 값이 μ—†μ–΄μ„œ ν•¨μˆ˜ μ‹€ν–‰κ²°κ³Όλ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— 담을 수 μ—†λ‹€. ν•¨μˆ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό 가져와야할 경우, λ°˜ν™˜ν•΄μ•Όν•  값을 λ¦¬ν„΄μœΌλ‘œ λͺ…μ‹œν•˜λ©΄ μ‹€ν–‰κ²°κ³Όλ₯Ό ν˜ΈμΆœν•œ 곳에 전달할 수 μžˆλ‹€.

     

     

    닀쀑리턴

    def func_mul1(x):
        y1 = x * 2
        y2 = x * 4
        y3 = x * 6
        return y1, y2, y3
    
    val1, val2, val3 = func_mul1(3)
    
    print(val1, val2, val3)

    ν•¨μˆ˜μ—μ„œ 리턴값 3κ°œκ°€ λ„˜μ–΄μ˜€κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” λ³€μˆ˜λ„ 3개λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

     

    return (y1, y2, y3)
    return [y1, y2, y3]
    return {'ret1': y1, 'ret2': y2, 'ret3': y3}

    닀쀑리턴을 νŠœν”Œ, 리슀트, λ”•μ…”λ„ˆλ¦¬ νƒ€μž…μœΌλ‘œ ν•˜λ‚˜μ˜ λ³€μˆ˜μ— 받을 수 μžˆλ‹€.

     

     

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

    *args

    def args_func(*args):  # λ§€κ°œλ³€μˆ˜λͺ… 자유둭게 λ³€κ²½ κ°€λŠ₯
        for i, v in enumerate(args):
            print('{}'.format(i), v, end=' ')
    
    args_func('Kim')
    args_func('Kim', 'Park')
    args_func('Kim', 'Park', 'Lee')
    
    print()

    λ§€κ°œλ³€μˆ˜μ— λͺ‡ κ°œκ°€ λ„˜μ–΄μ˜¬μ§€ λͺ¨λ₯Ό λ•Œ, λ§€κ°œλ³€μˆ˜μ— 따라 ν•¨μˆ˜μ˜ μž‘λ™μ„ λ‹€λ₯΄κ²Œ λ§Œλ“€ λ•Œ μ‚¬μš©ν•œλ‹€. νŠœν”Œν˜•νƒœλ‘œ λ„˜μ–΄μ˜€κΈ° λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  수 μžˆλ‹€. νŠœν”Œμ€ μΈλ±μŠ€κ°€ μ—†κΈ° λ•Œλ¬Έμ— enumerate(args)ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 인덱슀λ₯Ό λ§Œλ“€μ–΄μ„œ λ°˜λ³΅λ¬Έμ„ 돌릴 수 μžˆλ‹€.

     

    **kwargs

    def kwargs_func(**kwargs):
        for v in kwargs.keys():
            print('{}'.format(v), kwargs[v], end=' ')
    
    kwargs_func(name1='Kim')
    kwargs_func(name1='Kim', name2='Park')
    kwargs_func(name1='Kim', name2='Park', name3='Lee')
    
    print()

    λ³„ν‘œκ°€ λ‘κ°œ 일 땐 λ”•μ…”λ„ˆλ¦¬λ‘œ λ°›λŠ”λ‹€. ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  땐 λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ λ„˜κ²¨μ€€λ‹€. κ°€λ³€μΈμžλΌ μ—¬λŸ¬ 개λ₯Ό λ„˜κΈΈ 수 있으며 인자λ₯Ό λ„˜κΈ°μ§€ μ•Šμ•„λ„ λœλ‹€.

     

    전체 ν˜Όν•©

    def example(arg_1, arg_2, *args, **kwargs):
        print(arg_1, arg_2, args, kwargs)
    
    example(10, 20, 'park', 'kim', 'lee', age1=33, age2=34, age3=44)

    κΈ°λ³Έ λ§€κ°œλ³€μˆ˜ μžλ¦¬μ—” λ°˜λ“œμ‹œ ν•˜λ‚˜μ”© μ¨μ€˜μ•Ό ν•˜κ³  κ°€λ³€μΈμž μžλ¦¬μ—” μœ μ—°ν•˜κ²Œ 값을 전달할 수 μžˆλ‹€.

     

     

    μ€‘μ²©ν•¨μˆ˜

    def nested_func(num):
        def func_in_func(num):
            print(num)
    
        print("In func")
        func_in_func(num + 100)
    
    nested_func(1)

    nested_func()ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  인자 1을 μ „λ‹¬ν–ˆλ‹€. 호좜된 ν•¨μˆ˜λŠ” 1을 λ°›κ³  κ·Έ μ•ˆμ— μ€‘μ²©λœ ν•¨μˆ˜λ„ 1을 λ°›μ•˜λ‹€. func_in_func()λŠ” 아직 ν˜ΈμΆœλ˜μ§€ μ•Šμ•„μ„œ ν”„λ¦°νŠΈλ¬Έμ΄ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€. λ¨Όμ € λ°”κΉ₯ν•¨μˆ˜μ˜ ν”„λ¦°νŠΈλ¬Έμ΄ μ‹€ν–‰λ˜λ©° κ·Έ 이후에 func_in_func()κ°€ ν˜ΈμΆœλ˜μ–΄μ„œ 1+100을 전달받고 101을 좜λ ₯ν•˜κ²Œ λœλ‹€.

    πŸ’‘ 파이썬 λ°μ½”λ ˆμ΄ν„°, ν΄λ‘œμ €λ₯Ό 더 곡뢀해보기

     

     

    Hint

    def tot_length(word: str, num: int) -> int:
        return len(word) * num
    
    print(tot_length("i love you", 10))  # 100

    νŒŒλΌλ―Έν„°μ˜ μžλ£Œν˜•μ„ μ •ν•΄μ£Όκ³  λ¦¬ν„΄νƒ€μž…λ„ λͺ…μ‹œν•΄μ„œ μ–΄λ–€ 인자λ₯Ό 받아와야할지 힌트λ₯Ό 쀄 수 μžˆλ‹€. λͺ…μ‹œμ μœΌλ‘œ ν•¨μˆ˜μ˜ μž…λ ₯κ°’κ³Ό 좜λ ₯κ°’ νƒ€μž…μ„ μ•Œλ €μ£ΌλŠ” 방법이닀.

     

     

    λžŒλ‹€μ‹

    λ©”λͺ¨λ¦¬ μ ˆμ•½, 가독성 ν–₯상, κ°„κ²°ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€λŠ” μž₯점이 μžˆλ‹€.

    μΌλ°˜ν•¨μˆ˜λŠ” 객체 생성을 ν•˜λ©΄ μž¬μ‚¬μš©ν•  수 있게 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œλ‹€. λžŒλ‹€λŠ” μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ‚¬μš© ν›„ λ©”λͺ¨λ¦¬μ—μ„œ 사라진닀. λ”°λΌμ„œ λ©”λͺ¨λ¦¬λ₯Ό μ’€ 더 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό λ°”λ‘œ μ•Œμ•„λ³Ό 수 μžˆλ„λ‘ λžŒλ‹€λŠ” 읡λͺ…ν•¨μˆ˜κ°€ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•˜λŠ” 게 μ’‹λ‹€.

     

    일반 ν•¨μˆ˜

    def mul_func(num):
        return num * 10
    
    var_func = mul_func
    
    print(mul_func(5))

    μΌλ°˜ν•¨μˆ˜ fucλ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν–ˆλ‹€. var_funcλ₯Ό ν”„λ¦°νŠΈν•΄λ³΄λ©΄ <function mul_10 at 0x00C492B0> μ΄λŸ°μ‹μœΌλ‘œ 좜λ ₯λœλ‹€. 이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šμ•˜μ§€λ§Œ 이미 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ μžˆλ‹€.

     

    λžŒλ‹€ ν•¨μˆ˜

    lambda_func = lambda num: num * 10

    lambda ν‚€μ›Œλ“œ λ°”λ‘œλ’€ μ’Œν•­μ˜ num은 인풋을 가리킀며 μš°ν•­μ˜ num*10은 좜λ ₯을 가리킨닀. λΆˆν•„μš”ν•œ 것은 λ‹€ μ§€μš°κ³  λ§€κ°œλ³€μˆ˜μ™€ 리턴값을 ν•œμ€„λ‘œ λͺ…μ‹œν•œλ‹€.

    def func_final(x, y, func):
        print(x * y * func(10))
    
    func_final(10, 10, lambda_func)
    
    print(func_final(10, 10, lambda x: x * 1000))

    ν•¨μˆ˜λ„ λ§€κ°œλ³€μˆ˜λ‘œ 받을 수 μžˆλ‹€. μ΄λ ‡κ²Œ ν•¨μˆ˜λ₯Ό λ”± ν•œλ²ˆ λ°”λ‘œ μ‹€ν–‰μ‹œν‚€κ³  날리고 싢을 땐 κ°„λ‹¨ν•˜κ²Œ λžŒλ‹€ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•  수 μžˆλ‹€.

     

     

     

    😜 NEXT : 파이썬 ν΄λž˜μŠ€μ™€ 상속 κ³΅λΆ€ν•˜κΈ°

    λ°˜μ‘ν˜•

    λŒ“κΈ€

κ°œλ°œκ³΅λΆ€