함수
- 반복적으로 사용되는 코드를 묶어서 사용하는 방법 > 코드의 유지보수가 쉬워짐
- def, return, argument, parameter, docstring, scope, lambda
def
- 함수 선언
parameter : 매개변수, 함수를 선언할때 나열되는 변수
argument : 전달인자, 함수를 호출할 때 전달되는 실제 값
import random
# 함수선언
def display_lotto(count): # count : parameter
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= count:
break
lotto.sort()
print(lotto)
# 함수실행
# 로또번호출력 : 6개
display_lotto(6) # 6 : argument
# 로또번호출력 : 7개
display_lotto(7)
>> [1, 6, 10, 15, 17, 35]
[7, 11, 12, 17, 26, 37, 40]
return
return이 있는 함수 예시
1. str.upper() : 함수를 호출해서 결과 데이터를 변수에 저장할 때
data ='python'
result = data.upper()
print(data, result)
>> python PYTHON
2. 함수의 코드를 중단할 때
def echo(msg, count=3):
for idx in range(count):
if idx >= 5:
return
print(msg)
print('Done')
echo('python', 7)
>> python
python
python
python
python
return이 없는 함수 예시 : list.sort()
data = [1, 3, 2]
result = data.sort()
print(data, result)
>> [1, 2, 3] None
여러개의 데이터를 return 하는 경우
1. 결과 값이 모두 필요할 때
def calc(n1, n2):
result = [n1 + n2, n1 - n2]
return result
result = calc(3, 1)
plus = result[0]
minus = result[1]
plus, minus
>> (4, 2)
2. 결과 값중 특정 값만 필요 할 때
def calc(n1, n2):
return n1 + n2, n1 - n2
plus, minus = calc(3, 1)
plus, minus
plus, _ = calc(3, 1)
plus
>> 4
docstring
- 함수의 설명을 작성한다 : 함수선언코드 바로 아래 멀티라인 문자열로 작성
- help() 함수로 docstring 출력
def plus(n1, n2):
'''
This functuin is to plus two numbers.
parameters
----------
n1 : int, float : first number
n2 : int, float : second number
return
------
n1 + n2 : int, float
'''
return n1 + n2
*args, **kwargs
1. 파라미터
- 여러개의 아규먼트 > 하나의 컬렉션 데이터타입(tuple, dict)로 묶어서 받아줌
- *args : 키워드가 없는 여러개의 아규먼트를 받음 : tuple
- **kwargs: 키워드가 있는 여러개의 아규먼트를 받음 : dict
def echo(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
2. 아규먼트
- 묶여있는 컬렉션 데이터타입(list, tuple, dict) 를 여러개의 아규먼트로 풀어서 함수를 호출
- *args : list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 아규먼트로 풀어줌
- **kwargs : dict 데이터타입의 데이터를 여러개의 키워드가 있는 아규먼트로 풀어줌
data = [1, 2, 3]
echo(data) # echo([1, 2, 3]) > 아규먼트 1개, 데이터타입 : 리스트
echo(*data) # echo(1, 2, 3) > 아규먼트 3개, 데이터타입 : 정수
>>
<class 'tuple'> ([1, 2, 3],)
<class 'dict'> {}
<class 'tuple'> (1, 2, 3)
<class 'dict'> {}
data = {'num1': 10, 'num2': 20}
echo(data) # echo({'num1': 10, 'num2': 20}) > 아규먼트 1개, 데이터타입 : 딕셔너리
echo(**data) # echo(num1=10, num2=20) > 키워드 아규먼트 2개, 데이터타입 : 정수
>>
<class 'tuple'> ({'num1': 10, 'num2': 20},)
<class 'dict'> {}
<class 'tuple'> ()
<class 'dict'> {'num1': 10, 'num2': 20}
scope
- 함수 밖 : 전역영역 : global
- 함수 안 : 지역영역 : local
실수하기 쉬운 코드
지역변수는 호출한 함수의 실해이 종료되는 즉시 사라져서 사용할 수 없다!
data = 10
def change():
data = 20
change()
data
>> 10
global()
: 지역영역에서 전역영역의 변수를 사용하는 방법
data = 10
def change():
global data
data = 20
change()
data
>>20
지역영역에서 사용되는 변수가 지역영역에 없다면 전역영역의 변수를 가져와서 사용한다
data = 10
def change():
print('local', data)
change()
print('global', data)
>>
local 10
global 10
return
: 전역영역에서 지역영역의 변수를 사용하는 방법
data = 10
def change():
data = 20
return data
data = change()
data
>> 20
lambda 함수
- 일회성 함수로 간단한 함수(파라미터,리턴)을 함수 선언 없이 사용 가능 > 메모리 절약, 가독성 증대
# 변수 3개 선언 : plus, minus, calc : 저장공간 3칸
def plus(n1, n2):
return n1 + n2
def minus(n1, n2):
return n1 - n2
def calc(func, n1, n2):
return func(n1, n2)
calc(plus, 1, 2), calc(minus, 1, 2)
>> (3, -1)
위의 코드를 lambda 함수 이용하여 간단하게 변경
# 저장공간 1칸 사용
def cacl(func, n1, n2):
return func(n1,n2)
calc(lambda n1, n2: n1 + n2, 1, 2), calc(lambda n1, n2: n1 - n2, 1, 2)
>> (3, -1)
list comprehension
- 간단한 반복문, 조건문 사용해서 리스트 데이터를 만들 때 사용하는 문법
- 주로 리스트 데이터를 필터링 하거나 데이터를 변경할 때 사용
# 0 ~ 9 까지의 데이터에서 홀수만 뽑아서 제곱한 결과를 리스트로 출력
result = []
for number in range(10):
if number % 2:
result.append(number ** 2)
result
>> [1, 9, 25, 49, 81]
위의 코드를 list comprehension 사용하여 간단하게 변경
result = [number ** 2 for number in range(10) if number % 2]
result
>> [1, 9, 25, 49, 81]
map()
- literable한 데이터의 모든 value에 특정 함수를 적용한 결과를 리스트로 출력한다.
names1 = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
names2 = ['kim py(33)', 'lee note(52)', 'kim book(87)']
def ages(*args):
return [data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')' for data in args]
list(map(ages, names1, names2))
>> [['kim python(20)', 'kim py(30)'],
['lee notebook(30)', 'lee note(50)'],
['kim macbook(40)', 'kim book(80)']]
'Python' 카테고리의 다른 글
[Python] 기초 문법 - 클래스(1) (0) | 2023.01.05 |
---|---|
[Python] 네이버 파파고 번역 API 사용하기 (0) | 2023.01.04 |
[Python] 기초 문법 - 연산자, 조건문, 반복문 (0) | 2023.01.03 |
[Python] 기초 문법 - 변수 선언, 데이터 타입 (0) | 2023.01.02 |
[Python] 다양한 모듈 사용해보기2 : json, googletrans, smtplib (day 3) (0) | 2022.12.23 |