[TIL] 파이썬 기초 (함수/파파고 API)
by Holly Yoon1. 함수
- 로또를 출력하는 함수를 만들어보자. 숫자 범위, 갯수를 argument를 설정해서 함수를 호출하게 한다.
- parameter가 없으면 default값은 1~45, 6개로 한다.
# display_lotto를 호출할때 파라미터가 없으면 1 ~ 45까지 6개의 숫자를 출력
def display_lotto(count=6,end=45): # count : parameter
lotto = []
while True:
random_number = random.randint(1, end)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= count:
break
lotto.sort()
print(lotto)
display_lotto() # 1 ~ 45까지 6개의 숫자
display_lotto(end=50, count=10) # 1 ~ 50까지 10개의 숫자
- return값이 존재하는 함수도 없는 함수도 있다. (*sort()함수는 리턴값이 없음)
- 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
2. *args, **kwargs
- argument의 갯수와 상관없이 함수를 실행하는 방법
- *args는 튜플 타입으로 **kwargs는 딕셔너리 타입으로 받아준다.
def plus(*args, **kwargs): # 파라미터에 컬렉션 데이터 타입을 받아줌 : 식별자1개, 데이터n개
print(type(args), args)
print(type(kwargs), kwargs)
return sum(args) + sum(kwargs.values())
plus(1, 2, 3, 4, 5, n1=10, n2=30)
#결과값
<class 'tuple'> (1, 2, 3, 4, 5) # 키없는 argument
<class 'dict'> {'n1': 10, 'n2': 30} # 키있는 argument
55
- *args, **kwargs를 argument에서 사용하게 되면, 컬렉션 데이터 타입은 여러개의 argument로 풀어준다.
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개, 데이터타입 : 정수
data = {'num1': 10, 'num2': 20}
echo(data) # echo({'num1': 10, 'num2': 20}) > 아규먼트 1개, 데이터타입 : 딕셔너리
echo(**data) # echo(num1=10, num2=20) > 키워드 아규먼트 2개, 데이터타입 : 정수
- 적용 예시) parameter에 **kwargs를 사용하고, argument도 dic 타입이라면?
# 데이터베이스 접속 함수
def connect(**kwargs):
print('connect :', kwargs['host'], kwargs['user'], kwargs['pw'])
data = {'host': '1.2.3.6', 'user': 'python', 'pw': '1234'}
connect(**data)
>> connect : 1.2.3.6 python 1234
3. lambda함수
- 파라미터, 리턴으로 구성된 일회성 함수로, 별도의 함수 선언없이도 사용 가능하다.
- 메모리를 절약하고 가독성이 증대된다.
def calc(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)
4. list comprehension
- 간단한 반복문, 조건문을 사용해서 리스트 데이터를 만들 때, 사용하는 문법
- 주로 리스트 데이터를 필터링 하거나 데이터를 변경할 때 사용한다.
reports = ['사업보고서(2020)', '감사보고서(2021)', '[기재정정]사업보고서(2020)']
# 2020년도 보고서 목록을 리스트로 출력
reports_2020 = [report[:-6] for report in reports if report[-5:-1] == '2020']
reports_2020
>>> ['사업보고서', '[기재정정]사업보고서']
reports_2020 = {report[:-6]: report[-5:-1] for report in reports if report[-5:-1] == '2020'}
reports_2020
>>> {'사업보고서': '2020', '[기재정정]사업보고서': '2020'}
# kim씨 성을 가진 이름을 연령대로 데이터를 바꿔서 리스트로 출력
names = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
def ages(data):
return data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')'
names_kim = [
ages(name)
for name in names
if name.split(' ')[0] == 'kim'
]
names_kim
5. map(func, *iterables)
- iterable한 데이터의 모든 value에 특정 함수를 적용한 결과를 리스트로 출력한다.
- pandas에선 apply메소드가 비슷한 기능을 수행
names = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
def ages(data):
return data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')'
list(map(ages, names))
>>>['kim python(20)', 'lee notebook(30)', 'kim macbook(40)']
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]
print(list(map(ages, names1, names2)))
>>>[['kim python(20)', 'kim py(30)'], ['lee notebook(30)', 'lee note(50)'], ['kim macbook(40)', 'kim book(80)']]
[ ]
6.(과제) map함수를 직접 만들어보자
# Quiz. map 함수 직접 구현
names1 = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
names2 = ['kim py(33)', 'lee note(52)', 'kim book(87)']
def map_func(func, *args):
result=[]
for i in zip(*args) :
result.append(func(*i))
return result
#연령대로 바꿔주는 함수 str -> str으로 나온다
def ages(data):
return data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')'
map_func(ages, names1)
>>>['kim python(20)', 'lee notebook(30)', 'kim macbook(40)']
7.파파고 API사용하기
- App을 등록해서 access token을 얻는다. client id, client secret
- 번역하고 싶은 원본 텍스트(ko) -> 번역 후 텍스트(en)를 지정해준다.
- 응답값의 text를 받는다.
- 파일로 저장시킨다.
- 위의 과정을 함수로 만들어보자.
def translate(text, source='ko', target='en'): #default ko->en
CLIENT_ID, CLIENT_SECRE = '입력하기', '입력하기'
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':source, 'target':target, 'text':text}
response = requests.post(url, json.dumps(data), headers=headers)
return response.json()['message']['result']['translatedText']
***
- 강사님이 코딩 공부하는 팁을 알려주셨다.
- 최신버전의 쉬운 책을 구매하기. (일주일 안에 보고 실습할 수 있다. 업데이트가 반영되어있는 책을 살 것)
- 근데, 시중엔 입문책밖에 없어서 이것만 공부해선 경쟁력이 없다.
- 공식사이트의 documentation, user guide를 읽고 사용법을 익히기. 한국어로 개괄적인 내용을 공부했기 때문에 쉽게 이해할 수 있다.
'TIL' 카테고리의 다른 글
[TIL] Pandas 시작하기 (0) | 2023.01.10 |
---|---|
[TIL] 파이썬 기초 수업 끝 - (0) | 2023.01.06 |
[TIL] 파이썬 기초 - 클래스, 상속, 상관분석 (0) | 2023.01.05 |
[TIL] 파이썬 기초 (반복문, 조건문, 조건부확률) (0) | 2023.01.03 |
[TIL] 파이썬 기초 수업 시작 (변수, datatype) (0) | 2023.01.02 |
블로그의 정보
Study Log by Holly
Holly Yoon