일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 마이온컴퍼니
- DFS
- pyhton
- likelion
- 알고리즘
- 마이온
- GNN
- parklab
- 멋쟁이사자처럼
- 프로젝트
- ux·ui디자인
- 그리디
- GIS
- 멋사
- SQL
- seaborn
- intern10
- BFS
- DP
- TiL
- likelionlikelion
- 시각화
- Join
- folium
- 멋쟁이사자처럼멋쟁이사자처럼
- 파이썬
- Plotly
- Python
- 인턴10
- 멋재이사자처럼
- Today
- Total
지금은마라톤중
멋사 AI스쿨 TIL - (5) 본문
2022.01.04
- list.append() : 리스트 데이터에 데이터를 추가
data = [1, 2, 3]
data.append(4)
data
# 출력 : [1, 2, 3, 4]
6. 함수
- 반복적으로 사용되는 코드를 묶어서 사용하는 방법 > 코드의 유지보수가 쉬워짐
- def, return, argument, parameter, docstring, scope, lambda
- 사용법 : 함수선언(코드작성) > 함수호출(코드실행)
1) argument, parameter
: 함수를 호출하는 코드에서 함수를 선언하는 코드로 데이터 전달할 때 사용
- default parameter : 입력이 없을 때 입력되는 고정값이 있는 파라미터
- keyword 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)
# 출력 : [12, 20, 27, 36, 38, 40]
# [6, 7, 17, 23, 25, 40, 45]
* 간단한 예제) argument, parameter
# 함수선언(코드작성)
def plus(n1, n2=10, n3=20): # n1 : parameter, n2=10, n3=20 : default parameter
print(n1 + n2 + n3)
# 함수호출(코드실행)
plus(1, n3=100) # 1 : argument, n3=1000 : keyword argumnet
# 출력 : 26
2) return
-함수를 호출해서 결과 데이터를 변수에 저장할 때
-함수의 코드를 중단할 때
# 리턴이 있는 함수 예시 : str.upper()
data = 'python'
result = data.upper()
print(data, result)
# 출력 : python PYTHON
# 리턴이 없는 함수 예시 : list.sort()
data = [1, 3, 2]
result = data.sort()
print(data, result)
# 출력 : [1, 2, 3] None
# 여러개의 데이터를 리턴
def calc(n1, n2):
return n1 + n2, n1 - n2
plus, minus = calc(3, 1)
plus, minus
# 출력 : (4, 2)
3) docstring
-함수의 설명을 작성
-help() 함수로 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
''' # help(plus)를 쓰면 이 부분이 출력
return n1 + n2
* args, **kwargs
-아규먼트의 갯수에 상관없이 함수를 실행하는 방법
- *args : 여러개의 아규먼트를 튜플 데이터타입으로 받아줌
- **kwargs : 여러개의 키워드 아규먼트를 딕셔너리 데이터타입으로 받아줌
- *args, **kwargs : 아규먼트에서 사용
- 파라미터 사용 : 여러개의 아규먼트 > 컬렉션 데이터타입(tuple, dict)으로 묶어줌
- 아규먼트 사용 : 컬렉션 데이터타입(list, tuple, dict) > 여러개의 아규먼트로 풀어줌
def plus(*args, **kwargs): # 파라미터에 컬렉션 데이터 타입을 받아줌 : 식별자1개, 데이터n개
print(type(args), args)
print(type(kwargs), kwargs)
# return n1 + n2
plus(1, 2, 3, 4, 5, n1=10, n2=30) # 여러개의 아규먼트
# 출력 : <class 'tuple'> (1, 2, 3, 4, 5)
# <class 'dict'> {'n1': 10, 'n2': 30}
# 결과에서 보듯이 args는 키워드가 없는 것, kwargs는 키워드 있는 것것
# 키워드 아규먼트는 키워드가 없는 아규먼트 뒤에 사용
# 디폴트 파라미터는 디폴트 값이 없는 파라미터 뒤에 사용
*args, **kwargs 정리
- parameter
- 여러개의 아규먼트 > 하나의 컬렉션 데이터타입(tuple,dict)으로 묶어서 받아줌
- *args : 키워드가 없는 여러개의 아규먼트를 받음 : tuple
- **kwargs : 키워드가 있는 여러개의 아규먼트를 받음 : dict
- argument
- 묶여있는 컬렉션 데이터타입(list,tuple,dict) > 여러개의 아규먼트로 풀어서 함수호출
- *args : list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 아규먼트로 풀어줌
- **kwargs : dict 데이터타입의 데이터를 여러개의 키워드가 있는 아규먼트로 풀어줌
4) scope
- 함수 밖 : 전역영역 : global
- 함수 안 : 지역영역 : local
# 실수 할만한 코드 3
data = 10 #전역영역 데이터
def change():
data = 20 #지역영역 데이터
change()
print(data) #전역영역 데이터가 출력
# 출력 : 10
-global : 지역영역에서 전역영역의 변수사용 방법
# def 안의 data가 지역영역이지만 globald을 써줌으로써 전영영역에 데이터를 가져와서 사용
data = 30
def change():
global data
change()
print(data)
# 출력 : 30
- 지역영역에서 사용되는 변수(식별자)는 지역영역 없으면, 전역영역의 변수를 가져와서 사용
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()
print(data)
# 출력 : 20
# 3중 구조여도 global 쓰면 전역영역의 데이터를 사용
data = 10
def change1():
data = 20
def change2():
global data
print('local', data)
change2()
change1()
# 출력 : local 10
5) lambda 함수
- 일회성 함수로 간단한 함수(파라미터, 리턴)를 함수 선언 없이 사용 가능 > 메모리절약, 가독성 증대
- 구조 : func = lambda n1, n2 : n1 + n2
* 함수는 데이터 타입이 function인 변수이다.
* function은 코드를 담고 있는 데이터타입이다.
# 변수 3개 선언 : plus, minus, calc : 저장공간 3칸
def multi(n1, n2):
return n1 * n2
def divid(n1, n2):
return n1 / n2
def calc(func, n1, n2): # func:plus
return func(n1, n2)
calc(multi, 4, 5), calc(divid, 18, 6)
# 출력 : (20, 3.0)
⬇️위 코드를 아래 코드와 같이 lambda함수를 이용하면 적은 저장공간을 사용하여 수행이 가능하다.⬇️
# lambda 함수 설명
func = lambda n1, n2: n1 * n2
func(6, 3)
# 저장공간 1칸 사용
def calc(func, n1, n2):
return func(n1, n2)
calc(lambda n1, n2: n1 * n2, 4, 5), calc(lambda n1, n2: n1 / n2, 18, 6)
# 출력 : (20, 3.0)
6) list comprehension : 리스트 컴프리헨션
- 간단한 반복문, 조건문을 사용해서 리스트 데이터를 만들 때 사용하는 문법
- 주로 리스트 데이터를 필터링 하거나 데이터를 변경할 때 사용
- dict comprehension, set comprehension도 있다.
# 0 ~ 9 까지의 데이터에서 홀수만 뽑아서 제곱한 결과를 리스트로 출력
result = []
for number in range(10):
if number % 2:
result.append(number + 10)
result
# 출력 : [11, 13, 15, 17, 19]
⬇️위 코드를 아래 코드와 같이 lambda함수를 이용하면 적은 저장공간을 사용하여 수행이 가능하다.⬇️
result = [number + 10 for number in range(10) if number % 2 ]
result
7) map()
- iterable한 데이터의 모든 value에 특정 함수를 적용한 결과를 리스트로 출력
names1 = ['김 대한(56)', '아 민국(42)', '김 만세(35)']
names2 = ['김 서울(12)', '이 대전(72)', '김 부산(92)']
def ages(*args):
return [data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')' for data in args]
print(list(map(ages, names1, names2)))
# 출력 : [['김 대한(50)', '김 서울(10)'], ['아 민국(40)', '이 대전(70)'], ['김 만세(30)', '김 부산(90)']]
parameter 와 argument 추가공부
- parameter : 매개변수, 함수를 정의 할 때 외부로부터 받아들이는 임의의 값을 의미
- argument : 인수, 함수를 호출할 때 이 때 사용하게 되는 일련의 값들
- keyword argument : 이름을 붙여 전달하는 인자, 인자의 순서를 무시하고 사용가능
가변인자, **kwarg : 여러개의 인자를 받을 수 있는 집합
- default parameter : 기본값이 이미 정의된 매개변수,
네이버 API 활용하여 번역하기
- 사이트 : https://developers.naver.com.
사이트에 접속해서 API key를 부여받고 진행한다.
위의 폼을 작성하면 Client-Id, Client-Secret을 볼 수 있다.
API 가이드를 참고하여 코드를 작성하면 된다.
Client-Id, Client-Secret는 개인정보이니 #으로 대체했다.
import requests, json
# 1. APP 등록 > access token
CLIENT_ID, CLIENT_SECRET = '############', '#############'
text = '파이썬은 짱.'
url = "https://openapi.naver.com/v1/papago/n2mt"
headers = {
"Content-Type" : "application/json",
"X-Naver-Client-Id" : CLIENT_ID,
"X-Naver-Client-Secret" : CLIENT_SECRET
}
data = {'source' : 'ko', 'target' : 'en', 'text' : text}
#text의 한글을 인코딩하기 위해 json.dumps 사용
response = requests.post(url, json.dumps(data), headers=headers)
response
response.text #출력되는 것을 확인
# str > dict
en_text = response.json()['message']['result']['translatedText']
en_text
# 출력된 것을 좀 더 깔끔하게 번역된 것만 보이게 하였다.
# 4. 함수 만들기
# 함수로 만들어 활용하기 쉽게 만들었다.
def translate(text, source = 'ko', target = 'en'):
CLIENT_ID, CLIENT_SECRET = '############', '#############'
url = "https://openapi.naver.com/v1/papago/n2mt"
headers = {
"Content-Type" : "application/json",
"X-Naver-Client-Id" : CLIENT_ID,
"X-Naver-Client-Secret" : CLIENT_SECRET
}
data = {'source' : 'ko', 'target' : 'en', 'text' : text}
response = requests.post(url, json.dumps(data), headers=headers)
return response.json()['message']['result']['translatedText']
text = '파이썬 짱'
en_text = translate(text)
en_text
# 출력 : 'Python is the best.'
Quiz
흠..일단..오늘은 못 풀겠다...ㅜㅜ
출처 :
- https://docs.python.org/3/glossary.html.
- https://enarastudent.tistory.com/3.
- https://int-i.github.io/python/2020-06-04/python-keyword-args/.
'멋쟁이사자처럼 > Python' 카테고리의 다른 글
멋사 AI스쿨 TIL - (7) (0) | 2023.01.06 |
---|---|
멋사 AI스쿨 TIL - (6) (2) | 2023.01.05 |
멋사 AI스쿨 TIL - (4) (1) | 2023.01.03 |
멋사 AI스쿨 TIL - (3) (0) | 2023.01.02 |
멋사 AI스쿨 TIL - (2) (2) | 2022.12.23 |