[python] 함수

728x90

파이썬에서 함수는 재사용 가능한 코드 블록으로, 특정 작업을 수행하기 위해 사용됩니다. 함수를 사용하여 코드를 모듈화하고, 중복을 피하며, 코드의 가독성을 높일 수 있습니다. 파이썬의 함수 사용 방법은 다음과 같습니다

 

1. 함수의 사용방법

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수 내용
    # 함수가 수행할 작업
    return 반환값  # 반환값이 없는 경우에는 생략 가능

위의 형식으로 함수를 정의할 수 있습니다. 함수 이름은 사용자가 원하는대로 지정할 수 있으며, 함수의 내용은 def 키워드 다음에 들여쓰기를 해서 작성합니다. 함수의 인자는 괄호 안에 지정되며, 필요한 만큼 인자를 선언할 수 있습니다.

 

아래는 함수를 사용한 몇 가지 예시입니다

2. 매개변수가 없는 함수

def say_hello():
    print("안녕하세요!")

say_hello()  # 함수 호출

3. 매개변수가 있는 함수

word = "yj"

def func1(a):
    print(f"hello {a}")

func1(word) #출력:hello yj

4. 반환값이 있는 함수

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

result = add(3, 5)
print(result)  # 출력: 8

5. 다중 리턴

#다중 리턴
def func3(num):
    value1 = num*10
    value2 = num*20
    value3 = num*30

    return value1,value2,value3
    
x,y,z = func3(2)
print(f"x:{x},y:{y},z:{z}") #출력 x:20,y:40,z:60

6. 여러 자료형으로 출력

 

def func4(num):
    value1 = num*10
    value2 = num*20
    value3 = num*30

    return (value1,value2,value3)

t = func4(10)
print(type(t),t,list(t)) #출력: <class 'tuple'> (100, 200, 300) [100, 200, 300]

def func5(num):
    value1 = num*10
    value2 = num*20
    value3 = num*30

    return [value1,value2,value3]

l = func5(5)

print(type(l),l,set(l)) #출력:<class 'list'> [50, 100, 150] {50, 100, 150}

def func6(num):
    value1 = num*10
    value2 = num*20
    value3 = num*30

    return {
        "v1":value1,
        "v2":value2,
        "v3":value3
    }

d = func6(7)

print(type(d),d) #출력:<class 'dict'> {'v1': 70, 'v2': 140, 'v3': 210}

7. 가변인자 사용

#가변인자 사용
#args(언팩킹)->튜플형태로 보낼때 주로 사용
def func7(*args):
    for i,v in enumerate(args):
        print(f"index:{i}, value:{v}")
    print("----")

func7("qwe")
#출력: index:0, value:qwe

func7("abc","def")
#출력:
# index:0, value:abc
# index:1, value:def

#**kwargs(언팩킹) ->딕셔너리를 보낼 때 주로 사용
def func8(**kwargs):
    print(kwargs)

func8(name1="kim") #출력: {'name1': 'kim'}
func8(name1="kim",name2="young") #출력:{'name1': 'kim', 'name2': 'young'}

#혼합

def func9(args1,args2,*args,**kwargs):
    print(f"args1: {args1}, args2: {args2}, *args: {args}, **kwargs: {kwargs}")


func9(10,20,"abc","def","kkk",age1=20,age2=30,age30=40)
#출력: args1: 10, args2: 20, *args: ('abc', 'def', 'kkk'), **kwargs: {'age1': 20, 'age2': 30, 'age30': 40}

8. 중첩함수

def func10(num): #1번 매개변수 100받음
    def func_in_func(num): # 4번 매개변수 200받음
        print(num) #5번: 200출력
    print("in") #3번 문자열 출력
    func_in_func(num+100) # 2번 #매개변수 100+100=200받음

func10(100)
#출력:
# in
# 200

# func_in_func(200) ->에러발생->내부의 함수는 직접호출할 수 없다

9.람다(lambda)

1) 람다식의 장단점:

장점:

간결성: 람다식은 코드를 간결하게 만들 수 있습니다. 특히 간단한 함수를 정의할 때, 별도의 함수 정의보다 람다를 사용하는 것이 코드를 더 간편하게 만들 수 있습니다.

익명 함수: 람다식은 익명 함수로 사용될 수 있어, 필요한 곳에서 바로 함수를 정의하고 사용할 수 있습니다.

함수형 프로그래밍 지원: 람다식은 함수형 프로그래밍의 개념을 지원하며, 고차 함수(함수를 인자로 받거나 반환하는 함수)를 다룰 때 편리합니다.

단점:

가독성: 람다식을 남용하면 코드의 가독성이 감소할 수 있습니다. 특히 복잡한 로직이나 긴 람다식은 이해하기 어려울 수 있습니다.

디버깅 어려움: 람다식이 복잡한 경우, 디버깅이 어려울 수 있습니다. 함수 이름이 없기 때문에 디버깅 메시지에서 함수의 이름을 확인하기 어려울 수 있습니다.

제약 사항: 람다식은 단일 표현식으로 제한되어 있어, 복잡한 로직을 표현하기 어려울 수 있습니다.

 

2)예시코드

#함수는 객체가 생성됨 ->리소스(메모리)에 저장
#lambda는 heap영역에 저장

#일반함수
def func11(a,b):
    return a*b

v1 = func11(10,20)
print(v1) #출력: 200

#람다
lambda_func = lambda x,y:x*y #lambda 매개변수 : 결과
print(lambda_func(50,50)) #출력: 2500

'PYTHON Programming > Python' 카테고리의 다른 글

[python] 클래스  (0) 2024.05.11
[python] 입출력  (0) 2024.04.23
[python] 컴프리헨션  (0) 2024.04.23
[python] 반복문  (0) 2024.04.23
[python] 제어문  (0) 2024.04.22