함수
def, return, argument, parameter, docstring, scope, lambda
반복적으로 사용되는 코드를 묶어서 사용하는 방법
=> 코드의 유지보수가 쉬워진다.
사용법 : 함수선언(코드작성) -> 함수호출(코드실행)
- docstring
함수의 설명을 작성한다.
함수선언코드 바로 아래에 멀티라인 문자열로 작성한다.
help()함수로 docstring 출력이 가능하다.
간단한 덧셈함수의 docstring을 작성해보면...
def plus(n1, n2):
'''
This function is to plus two numbers.
parameters
----------
n1 : int. float : first number
n2 : int, float : second number
return
------
n1 + n2 : int, float
'''
return n1 + n2
help(plus)
맨 밑줄의 help(plus)를 통해 아래와 같이 docstring이 출력된다.
자주쓰는 함수인 print함수의 docstring도 확인할 수 있다.
help(print) # 프린트 함수의 docstring확인
- *args, **kwargs
1. parameter에서 사용
argument의 갯수에 상관없이 함수를 실행하는 방법.
*args : 여러개의 argument를 tuple데이터타입으로 받아준다.
**kwargs : 여러개의 keyword argument를 dictionary데이터타입으로 받아준다.
아래와 같은 코드를 보면...
def plus(*args, **kwargs): #파라미터에 컬렉션 데이터 타입을 받아줌 : 식별자 1개, 데이터 n개
print(type(args), args)
print(type(kwargs), kwargs)
return sum(args) + sum(kwargs.values())
# 키워드 아규먼트는 키워드가 없는 아규먼트 뒤에 사용
plus(1, 2, n1=10, n2=20) # 여러개의 아규먼트
여러개의 argument를 받아주는 것을 볼 수 있고...
*args보다 **kwargs가 뒤에 오는 것을 볼 수 있다!
*args는 튜플형식이고 *kwargs는 딕셔너리형식인 것을 확인할 수 있다.
return 값은 덧셈이기 때문에 다 더한 값인 33이 출력된다.
2. argument에서 사용
묶여 있는 컬릭션 데이터타입(list, tuple, dict)를 여러개의 argument로 풀어서 함수호출.
*args : list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 argument로 풀어줌
*kwargs : dict 데이터타입의 데이터를 여러개의 keyword argument로 풀어줌
다음 코드는 argument에서 *args의 사용을 확인하는 코드이다.
def echo(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
data = [1, 2, 3]
echo(data) # echo([1, 2, 3]) > 아규먼트 : 1개, 데이터타입 : 리스트
echo(*data) # echo(1, 2, 3) > 아규먼트 : 3개, 데이터타입 : 정수
아래처럼 *args를 사용했을때 리스트 형식의 data가 풀린 것을 볼 수 있다.
이번엔 argument에서 **kwargs 사용을 확인해보자!
def echo(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
data = {'num1' : 10, 'num2' : 20}
echo(data) # echo({'num1' : 10, 'num2' : 20}) > 아규먼트 1개, 데이터타입 : 딕셔너리
echo(**data) # echo(num1=10, num2=20) > 키워드 아규먼트 2개, 데이터타입 : 정수
이렇게 dict가 풀려서 dict로 함수를 호출한다.
- scope
함수 밖 : 전역영역(global)
함수 안 : 지역영역(local)
다음과 같은 코드를 보자!
data = 10
def change():
data = 20
change()
print(data)
함수 안에서 data = 20이라고 변수를 선언했지만 출력결과는...
위와 같이 함수 밖 변수 그대로 나왔다.
그 이유는 다음 그림과 같다!
바로 g(globa)영역에서 data = 10이 저장되고, l(local)영역에서 data = 20이 따로 저장되기 때문이다.
이 문제를 해결하려면 global을 사용한다!
global : 지역영역에서 전역영역의 변수사용 방법
아래와 같이 global data를 추가해 주면...
data = 10
def change():
global data
data = 20
change()
print(data)
전역 변수의 변수의 값이 나온다.
아래의 코드와 같이 지역영역에서 사용되는 변수가 지역영역이 없으면...
data = 10
def change():
print('local', data)
change()
print('global', data)
전역영역의 변수를 가져와서 사용한다.
하지만 global을 써주는 것이 덜 헷갈린다!
return : 전역영역에서 지역영역의 변수를 사용하는 방법
data = 10
def change():
data = 20
return data
data = change()
print(data)
아래 코드와 같이 변수를 return해주면...
이렇게 지역영역의 값이 전역영역에서 출력된다!
저는 다음시간에 함수3으로 돌아오겠습니다...
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/012.gif)
'멋쟁이사자처럼 AI스쿨' 카테고리의 다른 글
클래스(파이썬 강의 Day4) (0) | 2023.01.05 |
---|---|
함수3(파이썬 강의 Day3) (0) | 2023.01.04 |
함수1(파이썬 강의 Day3) (0) | 2023.01.04 |
조건부 확률을 통한 데이터분석(파이썬 강의 Day2) (0) | 2023.01.03 |
반복문(파이썬 강의 Day2) (0) | 2023.01.03 |
댓글