함수

JYJ·2022년 3월 9일
0

Python

목록 보기
7/14

파라미터와 아규먼트


  • 파라미터 : 함수를 선얼할때 호출하는 부분에서 보내주는 데이터를 받는 변수

  • 아규먼트 : 함수를 호출할때 함수에 보내주는 데이터


✔ 디폴트 파라미터로 num2 = 10을 설정하고 아무숫자를 입력하지 않으면 num2는 10으로 인식한다.

def plus(num1, num2=10):
    print(num1+num2)
    
plus(7)  # 아규먼트
plus(7, 7)



return


  • 함수에서 return이 실행되면 결과를 저장한다.

  • 함수에서 return이 실행되면 함수의 코드 실행이 종료된다.


✔ 함수의 return 기능

def echo(ppp):
    if ppp == 'quit':
        return 123
    print(777)

print(echo('quit'))
echo('hello')



*args, **kwargs


  • 함수의 파라미터 순서 : 일반변수, *변수, **변수

  • *변수 : 여러개가 아규먼트로 들어올 때, 함수 내부에서는 해당 변수를 '튜플'로 처리한다. (여러개의 인자를 함수로 받고자 할 때 사용)

  • **변수 : 키워드='' 로 입력할 경우에 그것을 각각 키와 값으로 가져오는 '딕셔너리'로 처리한다. ('키워드' = '특정값' 으로 사용)


✔ 기본형태

def plus(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)
    return sum(args)
    
plus(1,2,3,4,5, num1=6, num2=7)



docstring


  • 함수의 설명 작성

  • shift + tab 으로 확인 ( xxx?, xxx??, help(xxx) 으로도 확인 가능)


✔ docstring 설명을 여러줄로 쓸때

def echo(msg):
    """
    echo func return its input argument
    The operation is:
        1. print msg parameter
        2. return msg parameter
    param : msg : str
    return : str
    """
    print(msg)
    return msg



scope(범위)


  • 함수 안에서 선언되는 변수와 밖에서 선언되는 변수의 범위는 다르다.

  • global(전역), local(지역) : 함수 안에서 실행되는 변수가 local(지역)이고, 바깥에서 실행되는 변수가 global(전역) 변수이다.


✔ 일반적으로 지역변수는 전역변수에 영향을 줄 수 없다.

x = 11   # 전역변수
def f():
    x = 99  # 지역변수
    
f()
print(x)   # 전역변수(11) 출력됨


✔ global 명령어를 사용하면 지역변수가 전역변수에 영향을 줄 수 있다.

x = 11
def f():
    global x  # 함수f의 지역변수를 전역변수로 쓰겠다는 것
    x = 99
    
f()
print(x)  # global로 인해 함수f에서 지역변수의 값이 전역변수로 적용되어 99가 출력됨

✔ global 명령어를 사용하면 지역변수가 전역변수에 영향을 줄 수 있다.

x = 11
def f():
    x = 77
    
    def g():
        x = 88
        
        def h():
            global x  # 함수h의 지역변수를 전역변수로 쓰겠다는 것
            x = 99
            
        h()
    g()
f()
print(x)  # global로 인해 함수h에서 지역변수의 값이 전역변수로 적용되어 99가 출력됨

✔ nonlocal 명령어를 사용하여 지역변수가 아님을 선언하고 한단계 바깥에 위치한 변수와 묶어준다. (함수를 하나만 정의하고 전역변수에 묶는건 안됨)

x = 20 

def g():
    x = 80

    def h():
        nonlocal x  # 바로 전단계인 함수g에 적용시킨다는 말
        x = 99

    h()  # 함수h가 실행되어 nonlocal이 적용됨
    print(x)  # 99 출력
g()  
print(x)  # 20 출력 (nonlocal은 g와 h사이의 관계에서 끝난것임)


inner function


  • 함수가 지역영역에서 선언된 것 ( 함수 안에서 함수가 선언된 것 )

  • callback function : 함수를 아규먼트 파라미터로 설정해서 사용


✔ 함수 안에서 선언된 함수는 전역영역에서 사용이 불가능 하다

def outer(a, b):
    
    def inner(c, d):
        return c + d
    
    return inner(a, b)
    
print(outer(1,2))  # 3 출력
print(inner(2,3))  # 에러발생

✔ 지역영역에서 선언된 함수를 전역영역에서 쓰게 하고 싶을 때

def outer(a, b):
    
    def inner(c, d):
        return c + d
    
    return inner

outer(999, 2)(3, 4)  # 7 출력

✔ callback function

def calc(func, a, b):
    
    a **= 2
    b **= 2
    return func(a, b)
    
def plus(x, y):
    return x + y
    
calc(plus, 1, 2)  # 5 출력


람다함수


  • 간략한 함수를 한줄의 코드로 작성, 함수를 선언해서 사용할 필요 없이 함수를 일회성으로 사용할 때 사용한다. ( 삼항연산과 비슷한 개념 )

✔ :의 앞부분이 파라미터 부분이고 :의 뒷부분이 리턴되는 부분이다

def calc(func, a, b):
   
    a **= 2
    b **= 2
    return func(a, b)
    
calc(lambda a, b: a * b , 3 , 4)  # 144(9*16)출력


map


  • 순서가 있는 데이터 집합에서 모든 값에 함수를 적용시킨 결과를 출력해주는 함수이다.

✔ map 적용

def odd_even(num):
    return "odd" if num % 2 else "even"
    
ls = [1, 2, 3, 4]

list(map(odd_even, ls))  # ls에 odd_even을 모두 적용시키고 결과는 list로 출력



filter


  • 리스트 데이터에서 특정 조건에 맞는 value만 남기는 함수이다.

✔ filter 적용

ls = range(10)
list(filter(lambda data: True if data % 2 else False , ls))  # 홀수만 리스트로 출력



reduce


  • 리스트 데이터를 처음부터 순서대로 특정 함수를 시행하여 결과를 누적시켜주는 함수

✔ reduce는 functools에서 import해와야 한다

from functools import reduce
ls = [3, 1, 2, 4, 5]
reduce(lambda x, y : x + y, ls)  # 15 출력


decorator


  • 함수에서 코드를 바꾸지 않고 기능을 추가하거나 수정하고 싶을 때 사용하는 문법이다.
 def a():
     code_1
     code_2
     code_3
     
 def b():
     code_1
     code_4
     code_3
  • a함수와 b함수의 코드1, 코드3이 겹치는데 이렇게 여러 함수들 안의 코드들이 겹치는게 있을 때 a함수에는 코드2만 쓰고 b함수에는 코드4만 써도 모든 코드가 다 돌아가게 할수 있다.


profile
Study note

0개의 댓글