🧐 🤔 그거 어떻게 쓰더라 🙄 😙

파이썬 함수

2022. 7. 31. Evergood Kim이가 씀
def func(a, b, c='C'):
    print(a,b,c)

func(1,2,3)   # 1 2 3
func(1,2)     # 1 2 C
func(1, b='비', c='씨')  # 1 비 씨
l = [1,2,3]
func(*l)      # 1 2 3
def add(x,y):
    return x+y

print(add(2,3))  # 5

함수

파이썬의 함수

함수호출연산을 적용시킬 수 있는 콜러블형 객체 <class 'function'> 괄호() 붙여서 실행시킬 수 있다는 뜻.

파이썬의 실행 단위인 코드블럭의 일종

함수 정의

def 함수이름( 매개변수 0개이상 ) : 
    함수바디

함수 바디는 함수 정의 때 실행되지 않고 호출 때마다 실행된다.

이름이 같은 함수를 정의하면 에러는 안 나고 그냥 나중 것으로 덮어써진다. 변수도 새 값으로 걍 덮어써지잖아

매개변수

기본 매개변수

def func(a,b,c) 여타 언어들에서 하듯 매개변수들을 나열한다.

def func(a,b,c):
    print(a,b,c)

func(1,2,3)     # 1 2 3
func(1,2  )     # 에러: c에 해당하는 인자가 없다
func(1,2,3,4)   # 에러: 필요 이상의 인자 수

위치전용 매개변수, 키워드전용 매개변수

def func(a,/,b,*,c) 매개변수 목록 중에 /나 *를 넣는다. (둘 중 하나만도 됨)

(위치전용, /, 기본, *, 키워드전용) 순서 지켜서

# a: / 앞에 있으므로 위치로만 인자가 넣어진다.
# b: 위치 방식, 키워드 방식 둘 다 되는, 기본 형태의 매개변수
# c: * 뒤에 있으므로 키워드로만 인자가 넣어진다.
def func(a, /, b, *, c):
    print(a,b,c)

func(   1,   2,   3 )  # 에러: c는 키워드로만 인자가 넣어진다
func(   1,   2, c=3 )
func(   1, b=2, c=3 )
func( a=1, b=2, c=3 )  # 에러: a는 위치로만 인자가 넣어진다

가변 위치 매개변수

def func(*a) 앞선 매개변수들이 인자 하나씩 먹고 남은 위치인자들(키워드전용 인자 나오기 전까지의 모든 인자)를 모두 모아서 튜플 형태로 받는다.

def func(*Q):
    for x in Q:
        print(x, end=' ')

func(1,2,3)  # 1 2 3

위 문단에서 * 뒤에 키워드전용들이 나오듯; 이 *매개변수 뒤에도 키워드전용들만 나온다.

*얘 가 위치인자들 다 먹었으니까 그 뒤의 위치 매개변수가 먹을 게 안 남음.

가변 키워드 매개변수

def func(**a) 대응되는 이름의 매개변수가 없는, 나머지 키워드인자들을 모두 모아서 딕셔너리 형태로 받는다.

이 **매개변수 뒤에는 더이상 매개변수가 못 나온다.

def func(a, c, **W):  # a, c가 아닌 키워드인자들은 모두 W에
    print(W)          # **W로 받은 거만 출력하면

func(a='에', b='비', c='씨', d='디')  # {'b': '비', 'd': '디'} (a,c 빼고 다 나옴)

매개변수 기본값

def func( a=기본값 ) 매개변수에 기본값을 지정한다. 인자를 넣지 않을 경우; 에러 없이, 인자 대신 기본값이 쓰인다.

def func(a, b, c='C'):  # c의 기본값 'C'
    print(a,b,c)

func(1,2,3)  # 1 2 3
func(1,2  )  # 1 2 C
func(1    )  # 에러: b에 인자도 기본값도 없어서

(기본값 없는 매개변수들, 기본값 있는 매개변수들) 순서대로 쓴다

def func(a, b='B', c): pass # 에러

기본값은 함수가 정의될 때 한 번만 설정되지만; 그럼에도 함수 호출 때마다 기본값이 다르게 나올 수도 있다. 예를 들어; 기본값이 리스트이면 매개변수의 기본값은 그 리스트를 가리키고, 그 리스트의 요소가 하나 바뀌면 그 다음 함수 호출 때 함수는 그 요소가 바뀐 리스트를 참조한다.

도큐멘테이션문자열(독스트링)

함수 바디 시작하자마자 '''따옴표 세 개 문자열로 이게 뭔지 설명하기'''

어노테이션

함수의 매개변수와 반환형 힌트

파이썬 어노테이션innerLink_84

데코레이터

정의된 함수를 추가가공

파이썬 데코레이터innerLink_108

함수 호출

콜러블객체( 인자 0개이상 )
콜러블객체( 컴프리헨션 1개만 )

컴프리헨션을 넣으면 컴프리헨션이 생성하는 제너레이터의 멤버들이 자동으로 언패킹돼서 인자목록처럼 들어가는 게 아니라 그냥 제너레이터 한 개가 인자로 들어간다. 해당 제너레이터를 인자 중 하나로 넣고싶을 땐 컴프리헨션을 괄호로 감싸서 제너레이터 표현식으로 만든다.

인자

위치 인자

func( 1,2,3 ) 여타 언어들에서처럼; 함수의 매개변수 순서에 맞게; 각 매개변수에 대응하는 인자를 순서대로 나열한다.

def func(a,b,c):
    print(a,b,c)

func(1,2,3)  # 1 2 3
언패킹으로 위치 인자 넣기

func( *l ) 이터러블 객체 이름 앞에 *를 붙여서 인자로 넣는다. 그 위치에 항목들을 나열한 것과 같다.

l = [1,2,3]
func(*l)       # 1 2 3
l = 10, 20
func(*l, 999)  # 10 20 999

키워드 인자

func( a=1 ) 어느 매개변수에 해당하는지 매개변수이름 = 인자 꼴로 표시한다.

식별자를 특별히 적어줬으므로 나열순서는 상관없다. 다만; 위치인자들보단 뒤에 나온다. (위치 인자들, 키워드 인자들) 순서로

def func(a,b,c):
    print(a,b,c)

func(    1 , b='비', c='씨')    # 1 비 씨
func(a='에', b='비', c='씨')    # 에 비 씨
func(c='씨', a='에', b='비')    # 에 비 씨
func(a='에', c='씨',     2 )    # 에러: 키워드 인자가 뒤에, 위치 인자가 앞에 나와야 한다.
func(    2 , a='에', c='씨')    # 에러: 첫째 인자가 a로 해석되는데 키워드인자로 a가 또 지정돼서
언패킹으로 키워드 인자 넣기

func( **dict ) 딕셔너리 객체 이름 앞에 **를 붙여서 인자로 넣는다. 그 객체의 항목들을 각각 추가로 인자로 넣은 것과 같다.

d = {'a': '에', 'b': '비', 'c': '씨'}
func(**d)  # 에 비 씨

반환(return문)

return 표현식, 표현식, 표현식, …
return 표현식
return # None을 반환

흔한 반환문

람다 표현식

한줄로 적는 간단한 익명 함수: 람다innerLink_57
728x90