멋사 AI SCOOL 7일차
: Python function
* Keywords
#lambda
#scope
#grobal #local
#def
* Today I Learned
# 로또번호 출력(list)
# - 1 ~ 45의 랜덤한 숫자 6개 출력
# - 숫자 6개가 중복데이터가 없어야 함
# list 선언, random.randint(), while, break, if, not in, >=, len(), list.append()
# 로또번호출력
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= 6:
break
lotto.sort()
print(lotto)
# 파이썬출력
print('python')
# 로또번호출력
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= 6:
break
lotto.sort()
print(lotto)
[7, 16, 20, 32, 34, 37]
python
[5, 9, 17, 29, 40, 42]
이러면 숫자를 7번 뽑고 싶으면 두개 모두 >= 7로 바꿔야 함 -> 귀찮음 -> 함수선언(코드작성)
# 함수선언(코드작성)
def display_lotto():
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= 6:
break
lotto.sort()
print(lotto)
# 로또번호출력
display_lotto()
# 파이썬출력
print('python')
# 로또번호출력
display_lotto()
[13, 14, 21, 34, 42, 45]
python
[13, 15, 19, 26, 35, 36]
간편해짐
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, 10, 16, 18, 25, 34]
[4, 6, 26, 27, 28, 32, 41]
Default Parameter 와 keyword argument
default parameter 내가 지정해놓은 파라미터
keyword argument는 지정해서 전달하는 방법
+) 키워드 인자(keyword 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
111
# 숫자의 범위와 숫자의 갯수를 아규먼트로 설정해서 함수를 호출할수 있도록 함수를 수정
# 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개의 숫자
display_lotto(10, 50)
[2, 3, 15, 31, 36, 39]
[2, 8, 11, 16, 24, 26, 44, 45, 47, 50]
[4, 6, 7, 24, 26, 29, 33, 35, 36, 43]
Return
- 함수를 호출해서 결과 데이터를 변수에 저장할 때, 함수의 코드를 중단할 때
def plus1(n1, n2):
print(n1 + n2)
def plus2(n1, n2):
return n1 + n2
result1 = plus1(1, 2)
result2 = plus2(2, 3)
print(result1, result2)
3
None 5
리턴이 있는 함수와 없는 함수
# 리턴이 있는 함수 예시 : 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
calc는 공부를 더 해보고 정리해야할 것 같음... ㅠ
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
'''
return n1 + n2
*args, **kwargs
아규먼트의 갯수에 상관없이 함수를 실행하는 방법
*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)
<class 'dict'> {'n1': 10, 'n2': 30}
55
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개, 데이터타입 : 정수
<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}
*args, **kwargs
parameter
- 여러개의 아규먼트 > 하나의 컬렉션 데이터타입(tuple,dict)으로 묶어서 받아줌
- *args : 키워드가 없는 여러개의 아규먼트를 받음 : tuple
- **kwargs : 키워드가 있는 여러개의 아규먼트를 받음 : dict
argument
- 묶여있는 컬렉션 데이터타입(list,tuple,dict) > 여러개의 아규먼트로 풀어서 함수호출
- *args : list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 아규먼트로 풀어줌
- **kwargs : dict 데이터타입의 데이터를 여러개의 키워드가 있는 아규먼트로 풀어줌
데이터베이스 접속 함수
scope
- 함수 밖: 전역영역 - global
- 함수 안: 지역영역 - local
data = 10
def change():
data = 20
change()
print(data)
10
global: 지역영역에서 전역영역의 변수사용 방법
data = 10
def change():
global data
data = 20
change()
print(data)
20
lambda
- 일회성 함수로 간단한 함수(파라미터,리턴)를 함수 선언 없이 사용 가능 > 메모리절약, 가독성증대
* Homework
* Reference
* Retrospective
😍 Liked
지금까지 배웠던 파이썬 입문서에서는 이렇게 딥하게 다루지 않았는데 이번에 제대로 배울 수 있었음
📚 Learned
함수 전체적으로 배울 수 있었음
💦 Lacked
전체적으로 이해가 잘 되지 않음...
진도 따라가기 바쁜 느낌
🙏 Longed for
내일 class 배운다고 해서 일단 그것부터 예습하고 주말에 이 부분 복습해야겠음
'AI SCHOOL > TIL' 카테고리의 다른 글
[TIL] 멋사 AI SCOOL DAY 9 - 파이썬 클래스, 모듈, 패키지, 예외 처리 (0) | 2023.01.06 |
---|---|
[TIL] 멋사 AI SCOOL DAY 8 - 파이썬 함수, 상관계수 (0) | 2023.01.05 |
[TIL] 멋사 AI SCOOL DAY 6 - 연산자, 조건문, 반복문 (1) | 2023.01.03 |
[TIL] 멋사 AI SCOOL DAY 5 - 프로그래밍 개요, 변수 선언, 데이터 타입 (0) | 2023.01.02 |
[week 1] 공공 데이터 분석 (2) | 2022.12.23 |