함수

최조니·2022년 3월 26일
0

Python

목록 보기
9/12

함수

  • 위치 매개변수
    - 가장 기본적인 인자값 전달방식
    - 함수에서 정의한 위치대로 인자값이 passing into

    Ex.

    ```
    def cal(num1, num2):
    	result = num1 + num2
    	return result
    print(cal(3, 5)) 
    ```

  • 기본 매개변수
    - 변수값을 입력하지 않으면 기본 값이 활성화됨
    - 매개변수에 아무것도 입력하지 않아도 무조건 자동으로 들어가는 값
    - 기본매개변수는 반드시 일반매개변수 뒤에 나와야 함

    Ex.

    ```
    def cal(end, start=0):
    	total = 0
        for i in range(start, end):
        	total += i
        return total
    print(cal(5, 1)) # start = 1
    print(cal(5))    # start = 0
    ```

  • 키워드 매개변수
    - 매개변수에 직접 변수명을 명시하여 값을 넘겨줌
    - 인자값의 순서, 위치에 상관없이 직접 매개변수를 지정해서 전달
    - 주의 : 함수 호출 시 매개변수명을 정확히 알아야 함

    Ex.

    ```
    def cal(end, start=0):
    	total = 0
        for i in range(start, end):
        	total += i
        return total
    print(cal(5, 1)) # start = 1
    print(cal(5))    # start = 0
    ```

  • 가변 매개변수 (1)
    - 인자 값이 몇개인지 모르는 상황에서 사용
    - 변수명 앞에 *를 붙임
    - 가변매개변수는 인자값을 튜플형태로 받음
    - 가변매개변수 뒤에 일반매개변수가 올 수 없음 (일반매개변수가 먼저)
    - 가변매개변수는 하나만 사용해야 함

    Ex.

    ```
    def cal(*args):
    	total = 0
        for i in args:
        	total += i
        return total
    print(cal(3, 4, 5, 6)) # 18
    ```

  • 가변 매개변수 (2)
    - *이 2개붙는 경우
    - 딕셔너리형 매개변수

    Ex.

    ```
    def cal(**args):
    	print(args)
    info = {'name':'James', 'age':44, 'address':'NY'}
    print(**info) # {'name': 'Jame', 'age': 44, 'address': 'NY'}
    ```

    Ex. 일반매개변수와 가변매개변수를 함께 사용 (1)

    ```
    def cal(name, *args):
    	print(name, ':', args)
    cal('James', 3, 4, 5) 		# James : (3, 4, 5)
    cal(3, 4, 5, 'James')		# 3 : (4, 5, 'James')
    ```

    Ex.일반매개변수와 가변매개변수를 함께 사용 (2)

    ```
    def cal(name, **args):
    	print(name, ':', args)
    info = {'a':1, 'b':2, 'c':3}
    print('James', **info) # James : {'a': 1, 'b': 2, 'c': 3}
    ```

  • lambda 함수
    - lambda 매개변수 : 리턴값
    - 익명함수 / 한줄로 작성

    Ex.

    ```
    power = lambda x : x * x
    under_3 = lambda x : x < 3
    multi = lambda x, y : x * y
    a = lambda x, y, z : x + y - z
    b = lambda x, y : x * y if x > 0 else y
    c = lambda x : x * 10 if x < 2 else(x ** 2 if x < 4 else x + 10)
    # ------------------------------------------
    print(power(2))		# 4
    print(under_3(2))	# True
    print(multi(5, 9))	# 45
    print(a(1, 2, 4))	# -1
    print(a(y=1, z=2, x=4))	# 3 : 키워드 매개변수도 가능
    print(b(-2, 4))		# 4 : 람다함수 안에 조건문을 걸어줄 수 있음
    print(c(5))			# 15 : elif문도 비슷하게 작성 가능
    ```

  • map, filter, zip 함수
    - map(함수, 리스트) : 리스트 값을 함수패턴으로 매핑
    - filter(함수, 리스트) : 함수 조건에 만족하는 리스트 요소만 리턴
    - zip(list1, list2) : 여러 샘플 데이터들 중에서 같은 인덱스끼리 그룹을 만들어주는 기능
    - enumerate

    Ex. map & filter

    ```
    def power(value):
    	return value * value
    def under_3(value):
    	return value < 3
    # ----------------------------------------
    list_input = [1, 2, 3, 4, 5]
    # ------------------ map ------------------
    result_map = map(power, list_input)
    print(list(result_map))
    # ---------------- filter ----------------
    result_map2 = filter(under_3, list_input)
    print(list(result_map2))
    ```

    ㄴ> 출력값

    ```
    [1, 4, 9, 16, 25]
    [1, 2]
    ```    

    Ex. map에 lambda 함수를 mapping

    ```
    list_input = [1, 2, 3, 4, 5]
    result = map(lambda x : x * 2, list_input)
    print(list(result))
    ```

    ㄴ> 출력값

    ```
    [2, 4, 6, 8, 10]
    ```    

    Ex. map에 multi parameter 넘겨주기

    ```
    sample = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    sample2 = [2, 13, 4, 56, 7]
    print(list(map(lambda x, y : x + y, sample, sample2)))
    ```

    ㄴ> 출력값

    ```
    [3, 15, 7, 60, 12]
    ```  

    Ex. zip

    ```
    pro_number = [111, 222, 333]
    pro_maker = ["laptop", "smartphone", "smartTV"]
    pro_price = [200, 80, 560, 3344444]
    # -------------------------------------------------
    print(list(zip(pro_number, pro_maker, pro_price)))
    ```

    ㄴ> 출력값

    ```
    [(111, 'laptop', 200), (222, 'smartphone', 80), (333, 'smartTV', 560)]
    ```

    Ex. zip : 딕셔너리 만들기

    ```
    ssn = [7788, 1234, 6790]
    name = ['강호동', '민경훈', '이상민']
    my_dic = {}
    for s, n in zip(ssn, name):
    	my_dic[s] = n    
    print(my_dic)
    ```

    ㄴ> 출력값

    ```
    {7788: '강호동', 1234: '민경훈', 6790: '이상민'}
    ```

    Ex. enumerate

    ```
    for i, v in enumerate([1, 2, 3, 4, 5]):
    	print(i, " : " , v)    # i : index    
    ```

    ㄴ> 출력값

    ```
    0  :  1
    1  :  2
    2  :  3
    3  :  4
    4  :  5
    ```
profile
Hello zoni-World ! (◍ᐡ₃ᐡ◍)

0개의 댓글