[문제] 여러 숫자를 인수값으로 받아서 합과 평균을 출력하는 aggF함수를 생성하세요. | |
# 가변변수 def aggF(*num): sum = 0 for i in num: sum += i avg = sum / len(num) print('합 :',sum) print('평균 :',avg) |
# 가변변수가 아닐경우 def aggF(num): sum = 0 for i in num: sum += i avg = sum / len(num) print('합 :',sum) print('평균 :',avg) |
<호출> aggF(1,2,3,4,5,6,7,8,9,10) 또는 aggF(*(1,2,3,4,5,6,7,8,9,10)) |
<호출> aggF(1,2,3,4,5,6,7,8,9,10) # 오류 aggF([1,2,3,4,5,6,7,8,9,10]) aggF((1,2,3,4,5,6,7,8,9,10)) |
**kwargs(keyword arguments)
: key - value 형태로 인수값을 받을 때 사용, 딕셔너리형 수행할 때 사용
def dic_f(**args): for k, v in args.items(): print('{} : {}'.format(k,v)) |
<호출> dic_f(first_name='길동',last_name='홍') # dic_f(first_name:'길동',last_name:'홍') # 오류, 여기서는 (:)콜론 사용안됨 dic_f(first_name='길동',last_name='홍',email='aaa@itwill.com') # 딕셔너리 형태로 입력 시 info = {'first_name':'길동','last_name':'홍','email':'aaa@itwill.com'} dic_f(**info) |
def f1(arg1, arg2): return arg1 + arg2 # 함수안에서 return문을 만나는 순간 종료된다. return arg1 * arg2 # 오류가 안나도 미작동 |
f1(10, 20) # 30 |
def f2(arg1, arg2): return arg1 + arg2, arg1 * arg2 # 리턴 2개 이상 |
f2(10, 20) # (30, 200) = divmod(10,2) |
def f3(arg1, arg2): if arg2 == 0: return # 값이 없는 리턴 = 종료 else: return arg1/arg2 |
f3(10, 2) # 5.0 f3(10, 0) # 10/0 = 0이 들어오면 그냥 종료 |
def f4(arg1, arg2, arg3='M'): # 기본값 설정 print('이름 :',arg1) print('나이 :',arg2) if arg3 == 'M': print('성별 :',arg3) else: print('성별 :',arg3) |
f4('홍길동',20) # 실제매개변수는 형식매개변수에 위치적으로 대응되게 입력된다. f4('홍제인',20,'F') f4(arg1='홍제인',arg3='F',arg2= 25) # 이름지정방식, 순서무관 f4('홍제인',arg3='F',arg2= 25) # 위치지정 + 이름지정 가능 f4(arg1='홍제인',25,'F') # 오류, 이름지정 + 위치지정 불가 |
전역변수(Global Variable) : 프로그램 종료될때까지 어디서든지 사용할 수 있는 변수
지역변수(Local Variable) : 함수안에서만 사용되는 변수
g_x = 10 # 전역변수 def f5(arg): print('형식매개변수값 :',arg) print('전역변수값 :',g_x) f5(20) 형식매개변수값 : 20 전역변수값 : 10 |
g_x = 10 # 전역변수 def f6(arg): g_x = 100 # 지역변수 : 전역변수와 이름이 동일하면 로컬 우선 print('형식매개변수값 :',arg) print('지역변수값 :',g_x) f6(30) 형식매개변수값 : 30 지역변수값 : 100 |
g_x = 10 # 전역변수 def f7(arg): l_x = 100 print('형식매개변수값 :',arg) print('지역변수값 :',l_x) g_x l_x # 오류 : 함수 내 선언되어있는 지역변수는 함수 바깥쪽에서 사용할 수 없다. f7(30) 형식매개변수값 : 30 지역변수값 : 100 |
g_x = 10 # 전역변수 def f8(arg): global g_x #함수안에서 전역변수를 사용한다고 지정하면 함수내에서 값 수정 가능 print('형식매개변수값 :',arg) print('수정전 전역변수값 :',g_x) g_x = 200 print('수정후 전역변수값 :',g_x) f8(500) 형식매개변수값 : 500 수정전 전역변수값 : 10 수정후 전역변수값 : 200 |
def add(arg): total = 0 total += arg return total |
g_total = 0 def add(arg): global g_total g_total += arg return g_total |
add(2) # 2 add(8) # 8 : 누적이 안됨 |
add(2) # 2 add(8) # 10 |
[문제] 함수 생성하세요. 합 = 관측값의 합 평균 = 관측값의 합 / 관측값의 수 편차 = 관측값 - 평균 편차제곱합 = 편차**2 + 편차**2 분산 = 편차제곱합 / 관측값의 수 - 1 (자유도) 표준편차 = math.sqrt(분산) |
import math # 표준편차 함수 사용으로 선언 def sum(*arg): # 합계 total = 0 for i in arg: total += i return total def mean(*arg): # 평균 return sum(*arg) / len(arg) def variance(*arg): # 분산 total = 0 avg = mean(*arg) for i in arg: total += (i - avg)**2 # 편차제곱합 return total / (len(arg) - 1) def stddev(*arg): # 표준편차 return math.sqrt(variance(*arg)) # 사용설명서 역할. 모듈에 포함하지만 import로 사용 시 실행안하게 함 if __name__ == '__main__': sum(1,2,3,4,5) # 합 mean(1,2,3,4,5) # 평균 variance(1,2,3,4,5) # 분산 stddev(1,2,3,4,5) # 표준편차 |
↓ 연결
■ 모듈 사용
관련성있는 함수, 변수를 모아둔 곳 = 패키지
메모장 - 파일로 저장 - ***.py
C:\\mypython\\stats.py # 파일명 = 모듈명 |
import sys sys.path # 패치목록 sys.path.append('C:\\mypython') # 패치추가 sys.path.remove('C:\\mypython') # 오등록 삭제 sys.path import stats 또는 from stats import * stats.mean(1,2,3) dir() del stats |
■ 날짜
import datetime
datetime.date.today() # datetime.date(2023, 11, 16)
# date
datetime.datetime.now() # datetime.datetime(2023, 11, 16, 14, 45, 53, 875680)
# timestamp
datetime.date.today().year # 2023
x = datetime.date.today()
x.year
x.month
x.day
y = datetime.datetime.now()
y.year
y.month
y.day
y.hour
y.minute
y.second
y.microsecond # 속성
y.date() # 메소드
y.time()
y.weekday() # 0 월요일 ~ 6 일요일
'월화수목금토일'[y.weekday()] + '요일' # 문자인덱싱
def toweekday(): import datetime return '월화수목금토일'[datetime.datetime.now().weekday()] + '요일' |
toweekday() |
★ strftime : 날짜를 문자로 추출하는 함수
date -> char
d = datetime.datetime.now() # 대소문자 구분
d.strftime('%x') # 월/일/년
d.strftime('%X') # 시:분:초
d.strftime('%y') # 연도 2자리
d.strftime('%Y') # 연도 4자리
d.strftime('%m') # 월
d.strftime('%d') # 일
d.strftime('%B') # 월 영문자
d.strftime('%b') # 월 영문자 약어
d.strftime('%H') # 시
d.strftime('%M') # 분
d.strftime('%S') # 초
d.strftime('%I') # 시간을 12시간으로 환산
d.strftime('%p') # AM, PM
d.strftime('%A') # 요일 영문자
d.strftime('%a') # 요일 영문자 약어
d.strftime('%w') # 0 월요일 ~ 6 일요일
d.strftime('%c') # 'Thu Nov 16 14:54:54 2023'
d.strftime('%j') # 누적날짜
d.strftime('%U') # 누적주(일요일시작)
d.strftime('%W') # 누적주(월요일시작)
# 분기 def month_to_quarter(month): if month in [1,2,3]: return 'Q1' elif month in [4,5,6]: return 'Q2' elif month in [7,8,9]: return 'Q3' elif month in [10,11,12]: return 'Q4' else: return |
month_to_quarter(datetime.datetime.now().month) |
★ strptime : 문자로된 날짜를 날짜로 변환하는 함수
char -> date
datetime.datetime.strptime('2023-10-05 09:30:30','%Y-%m-%d %H:%M:%S')
datetime.datetime(2023,10,5,9,30,30)
d = datetime.date(2023,10,5)
t = datetime.time(9,30,30)
datetime.datetime.combine(d, t)
datetime.datetime.combine(d,t).strftime('%c')
# 날짜 - 날짜 = 일수
datetime.date(2023,11,16) - datetime.date(2023,10,5) # days=42
(datetime.date(2023,11,16) - datetime.date(2023,10,5)).days #42
# 날짜 + 일수 = 날짜
datetime.date(2023,11,16) + datetime.timedelta(days=100) # 2024, 2, 24
# 날짜 - 일수 = 날짜
datetime.date(2023,11,16) - datetime.timedelta(days=100) # 2023, 8, 8
datetime.date(2023,11,16) + datetime.timedelta(days=-100)
# 날짜 시간 + 시간 = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(hours=3)
# 날짜 시간 + 분 = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(minutes=3)
# 날짜 시간 + 초 = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(seconds=300)
# 날짜 시간 + 시,분,초 = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(hours=2,minutes=120,seconds=300)
# 날짜 시간 + 주 = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(weeks=5)
import time
1970-01-01 0:0:0 기준으로 지난 시간을 초단위로 리턴해주는 기능
time.time()
time.localtime()
time.localtime().tm_wday # 0 월요일 ~ 6 일요일
time.localtime().tm_yday # 누적일
time.localtime().tm_isdst # 서머타임이면 1, 아니다 0, 모른다 -1
...
time -> char
time.strftime('%y-%m-%d %h:%M:%S',time.localtime())
char -> time
time.strptime('2023-11-16 16:00:00','%Y-%m-%d %H:%M:%S')
# 작업이 걸리는 시간 start = time.time() for i in range(10): print(i) time.sleep(1) # 대기시간 초단위 end = time.time() print('time slapsed :',end - start) |
import calendar
calendar.calendar(2024)
print(calendar.calendar(2024))
calendar.prcal(2024)
calendar.prmonth(2024,8) # (년도,월)
calendar.weekday(2023,11,16) # 0 월요일 ~ 6 일요일
calendar.monthrange(2023,11) # (2, 30) 시작요일,월 마지막일자
calendar.monthrange(2023,11)[1] # 30 , 튜플에서 종료일만 추출
■ 파일 읽고 쓰기
file = open('C:\\data\\test.txt','w')
또는
file = open('C:/data/test.txt','w')
...작업...
file.close()
# w : 쓰기모드로 파일을 연다.
# 기존에 파일이 있으면 덮어쓰기로 파일을 연다.
file = open('C:/data/test.txt', 'w') for i in range(1,11): txt = '{} 오늘 하루도 열심히 공부하자!!\n'.format(i) file.write(txt) # 파일에 덮어쓰기 file.close() |
# a : append 모드로 파일을 연다.
# 기존 파일이 있으면 제일 뒤에 추가
file = open('C:\\data\\test.txt', 'a') for i in range(21,31): txt = '{} 오늘 하루도 열심히 공부하자!!\n'.format(i) file.write(txt) # 파일에 쓰기 file.close() |
# r : 읽기모드
file = open('C:\\data\\test.txt', 'r') file.readline() # 한줄씩 읽기 file.close() |
file = open('C:\\data\\test.txt', 'r') while True: # 얼마나 있는지 모르니 무제한 반복으로 사용 data = file.readline() if not data: break # 데이터가 없으면(끝나면) 나가기 print(data) # \n 포함되어있을 경우 공백줄이 생김 file.close() |
file = open('C:\\data\\test.txt', 'r') while True: data = file.readline() if not data: break print(data, end='') # \n 공백 제거 file.close() |
new = [] # 리스트에 넣기 file = open('C:\\data\\test.txt', 'r') while True: data = file.readline() if not data: # 데이터에 값이 없으면 종료 break new.append(data.rstrip()) # 오른쪽 끝에 \n 공백 제거 file.close() new |
file = open('C:\\data\\test.txt','r') data = file.readlines() # 모든행을 한번에 읽기 file.close() new = [] for i in data: new.append(i.rstrip()) # 오른쪽 끝에 \n 공백 제거 new |
file = open('C:\\data\\test.txt','r') data = file.read() # 모든행을 하나의 문자열로 읽기 = 가로 연속으로 출력 file.close() len(data) # 420글자 data.replace('\n',"") # 오른쪽 끝에 \n 공백 제거 |
**kwargs(keyword arguments) 딕셔너리형 : (**arg)
return arg1 + arg2, arg1 * arg2 # 리턴 2개 이상 -> 튜플타입
전역변수(Global Variable) : 프로그램 종료될때까지 어디서든지 사용할 수 있는 변수
지역변수(Local Variable) : 함수안에서만 사용되는 변수
global x #함수안에서 전역변수를 사용한다고 지정하면 함수내에서 값 수정 가능
# 사용설명서 역할. 모듈에 포함하지만 import로 사용 시 실행안하게 함
if __name__ == '__main__':
모듈 : 관련성있는 함수, 변수를 모아둔 곳 = 패키지
import datetime 날짜시
strftime : 날짜를 문자로 추출하는 함수
strptime : 문자로된 날짜를 날짜로 변환하는 함수
y.weekday() # 0 월요일 ~ 6 일요일
strftime('%w')
...
import time : 1970-01-01 0:0:0 기준으로 지난 시간을 초단위로 리턴해주는 기능
time.strftime
time.strptime
sleep(1) # 대기시간 초단위
import calendar : 달력
file = open()
file.close()
w : 덮어쓰기
a : append 모드, 맨 뒤에 추가
r : 읽기모드
file.write(txt) # 파일에 덮어쓰기
readline() # 한줄씩 읽기
readlines() # 모든행을 한번에 읽기
read() # 모든행을 하나의 문자열로 읽기 = 가로 연속으로 출력
'PYTHON 3.11' 카테고리의 다른 글
31 PYTHON isin, null, apply, str, 그룹함수, MERGE (1) | 2023.11.20 |
---|---|
30 PYTHON WITH, CSV, Lambda, PANDAS, SERIES, DATAFRAME (0) | 2023.11.17 |
28 PYTHON FOR, List Comprehension, FUNCTION (0) | 2023.11.15 |
27 PYTHON LIST, TUPLE, DICTIONARY, SET, IF, WHILE (1) | 2023.11.14 |
26 PYTHON 설치, 문자열, 문자함수 (1) | 2023.11.13 |