# **kwargs(keyword argument) : 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="홍", email="gilldong@itwill.com")
# 문자열은 문자열 표현식으로 작성
info = {"first_name":"길동", "last_name":"홍", "email":"gilldong@itwill.com"}
info
dic_f(info) # 오류발생
dic_f(**info) # 딕션러리 자료형으로 표현하기
# 사칙연산
def f1(arg1, arg2):
return arg1 + arg2 # 함수안에서 return 문을 만나는 순간 종료된다
return arg1 * arg2 # 무의미한 return문
f1(10,20)
def f1(arg1, arg2):
return arg1 + arg2, arg1 * arg2 # 튜플 형태로 계산 가능
f1(10,20)
divmod(13,2)
def f2(arg1, arg2):
return arg1 // arg2, arg1 % arg2
f2(13,2)
def f3(arg1, arg2):
if arg2 == 0:
# ps/sql return 문 종료
return # 값이 없는 return문은 함수를 종료하는 의미이다.
else:
return arg1 / arg2
# 나눗셈 에서 0 을 계산은 불가
10/0
f3(10, 2)
f3(10, 0)
# 위치지정방식, 이름지정방식 표현
def f4(arg1, arg2, arg3="M"): # arg3="M" 으로 기본값 표현
print("이름 : ",arg1)
print("나이 : ",arg2)
if arg3 == "M":
print("성별 : 남자")
else:
print("성별 : 여자")
f4("홍길동", 20) # 실제매개변수 : 형식매개변수에 위치적으로 대응되게 입력된다
f4("홍제인", 25, "F") # PS/SQL 위치지정방식
f4(arg2=25, arg3="F", arg1="홍제인") # 이름지정방식, 위치무방하다
f4("홍제인", arg2=25, arg3="F") # 위치지정, 이름지정방식
# 이름지정방식 뒤에는 무조건 이름지정방식만 사용
f4(arg1="홍제인", 25, "F") # 오류방식, PL/SQL 과 동일한 오류
# 전역변수(global variable) : 프로그램 종료될 때까지 어디서든지 사용할 수 있는 변수
# 지역변수(local variable) : 함수안에서만 사용되는 변수
g_x = 10
def f5(arg):
print("형식매개변수값 : ",arg)
print("전역변수값 : ",g_x)
f5(20)
g_x = 10 # 전역변수
def f6(arg):
g_x = 100 # 지역변수, 우선순위
print("형식매개변수값 : ",arg)
print("지역변수값 : ",g_x)
g_x
f6(30)
g_x = 10 # 전역변수
def f7(arg):
l_x = 100 # 지역변수, 우선순위
print("형식매개변수값 : ",arg)
print("지역변수값 : ",l_x)
g_x
# 오류발생
l_x # 함수내에 선언되어 이쓴 지역변수는 함수 바깥쪽에서 사용할 수 없다.
f7(30)
# 함수내에서 전역변수를 수정하고 싶을때, 함수내에서 'global 변수명' 지정
g_x = 10 # 전역변수(global 변수)
def f8(arg):
global g_x # 함수안에서 전연변수를 사용한다고 지정하면 함수내에서 전역변수의 값을 수정가능하다
print("형식매개변수값 : ",arg)
print("수정 전 전역변수값 : ",g_x)
g_x = 200 # local 변수처럼 수정
print("수정 후 전역변수값 : ",g_x)
f8(500)
print(g_x)
# 이전의 값을 누적하고 싶을때
def add(arg): # 누적합
total = 0
total += arg
return total
add(2)
add(8)
# 이전의 값을 갖고 누적합 구하기
g_total = 0 # 글로벌변수 선언
def add(arg):
global g_total
g_total += arg
return g_total
add(2)
add(8)
# 사용설명서 같음, 수행하지 말아야 할 곳
if __name__ == "_main_": # "_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)
# stats.py 파일 생성후
■ 모듈 사용 (관리의 편리성)
# PL/SLQ 에서는 package
c:\\mypython\\stats.py #모듈명
# list 자료형
import sys
sys.path
sys.path.append("C:\\mypython")
sys.path
sys.path.remove("C:\\mypython")
import stats
stats.sum(1,2,3,4,5)
stats.mean(1,2,3,4,5)
stats.variance(1,2,3,4,5)
stats.stddev(1,2,3,4,5)
dir()
# del stats
dir()
from stats import *
dir()
sum(1,2,3,4,5)
mean(1,2,3,4,5)
variance(1,2,3,4,5)
stddev(1,2,3,4,5)
■ 날짜
import datetime
# 현재 년월일, date
datetime.date.today()
# PL/SQL timestamp 형식
datetime.datetime.now()
datetime.date.today().year
datetime.date.today().month
datetime.date.today().day
x = datetime.date.today()
x
x.year
x.month
x.day
y = datetime.datetime.now()
y
y.year
y.month
y.day
y.hour
y.minute
y.second
y.microsecond # 속성
y.date() # method
y.time()
y.weekday() # 0 = 월요일 ~ 6=일요일
# 숫자 -> 문자형, indexing
'월화수목금토일'[y.weekday()]+'요일'
# 특정한 날의 요일
def toweekday():
import datetime
return '월화수목금토일'[datetime.datetime.now().weekday()]+'요일'
# PL/SQL -> to_char(sysdate, day)
toweekday()
■ strftime : 날짜를 문자로 추출하는 함수
# date -> char
import datetime
d = datetime.datetime.now()
d
d.strftime("%x") # 현 날짜 : 월/일/년
d.strftime("%X") # 현 시간 : 시:분:초
d.strftime("%Y") # 현재 년도 4자리
d.strftime("%y") # 현재 년도 2자리
d.strftime("%m") # 현재 월
d.strftime("%d") # 현재 일
d.strftime("%e")
d.strftime("%B") # 현재 영문자 월
d.strftime("%b") # 현재 영문자(약어) 월
d.strftime("%H") # 현재 시/24시간
d.strftime("%I") # 현재 시/12시간
d.strftime("%I %p") # AM PM 구분
d.strftime("%p")
d.strftime("%M") # 시간 분
d.strftime("%S") # 현재 초
d.strftime("%A") # 현재 요일(대문자)
d.strftime("%a") # 현재 요일(약어)
d.strftime("%c")
d.strftime("%w") # 현재 숫자 요일, 0:일 ~ 6:토
d.strftime("%j") # 누적날짜
d.strftime("%U") # 누적주(일요일시작)
d.strftime("%W") # 누적주(월요일시작)
d.strftime("%z")
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
import datetime
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).strftime("%w")
# 날짜 - 날짜 = 일수
datetime.date(2023,11,16) - datetime.date(2023,10,5)
(datetime.date(2023,11,16) - datetime.date(2023,10,5)).days
# datetime.timedelta(days=일수)
# 날짜 + 일수 = 날짜
datetime.date(2023,11,16) + datetime.timedelta(days=100)
# 날짜 - 일수 = 날짜
datetime.date(2023,11,16) + datetime.timedelta(days=-100)
datetime.date(2023,11,16) - datetime.timedelta(days=100)
# 날짜 시간 + 시간(h) = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(hours=3)
# 날짜 시간 + 분(m) = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(minutes=30)
# 날짜 시간 + 초(s) = 날짜 시간
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)
# 날짜 시간 + 주(week) = 날짜 시간
datetime.datetime(2023,11,16,15,30,30) + datetime.timedelta(weeks=5)
# 1970년 1월 1일 0시 0분 0초를 기준으로 지난 시간을 초단위로 리턴해주는 기능
# 데이터 처리하는 시간을 확인할 때 이용.
import time
time.time()
time.localtime()
time.localtime().tm_year
time.localtime().tm_mon
time.localtime().tm_mday
time.localtime().tm_hour
time.localtime().tm_min
time.localtime().tm_sec
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()
# time.sleep(시간) : 대기시간을 주고 싶을때
for i in range(10):
print(i)
time.sleep(1) # 대기시간
# 끝나는 시간
end = time.time()
start
end
print('time elasped : ', end - start)
import calendar
print(calendar.calendar(2023))
print(calendar.calendar(2024))
calendar.prcal(2024)
calendar.prmonth(2024, 3)
calendar.weekday(2023, 11, 16) # 요일, 0:월 ~ 6:일
calendar.prmonth(2023, 11)
calendar.monthrange(2023, 11) # 시작요일, 마지막 일자
calendar.prmonth(2023, 12)
calendar.monthrange(2023, 12)
calendar.monthrange(2023, 12)[0] # 시작요일
calendar.monthrange(2023, 12)[1] # 마지막 일자
■ 파일 읽고, 쓰기
# file 생성
file = open("C:/data/test.txt", "w") # "w" : 쓰기모드로 파일을 열겠습니다.
# 기존 파일이 있다면 덮어쓰기로 파일 열어주니, 주의하자
file
for i in range(1, 11):
txt = "{} 오늘 하루도 열심히 공부하자!!\n".format(i)
file.write(txt)
file.close()
# file 생성
file = open("C:/data/test.txt", "a")
# "a" : append 모드로 파일을 열겠습니다.
# 기존 파일이 있으면 해당 내용을 제일 뒤에 추가
file
for i in range(21, 31):
txt = "{} 오늘 하루도 열심히 공부하자!!\n".format(i)
file.write(txt)
file.close()
# 읽기모드
file = open("C:/data/test.txt", "r") # "r" : 읽기모드로 파일을 열겠습니다.
file.readline() # 한줄씩 읽어들인다.
file.close()
# 읽기모드, 출력하기
file = open("C:/data/test.txt", "r") # "r" : 읽기모드로 파일을 열겠습니다.
while True :
data = file.readline()
if not data:
break
print(data, end='')
file.close()
# 읽기모드, list 담아 출력하기
new =[]
file = open("C:/data/test.txt", "r") # "r" : 읽기모드로 파일을 열겠습니다.
while True :
data = file.readline()
if not data:
break
new.append(data.rstrip())
file.close()
new
# readlines()
file = open("C:/data/test.txt", "r") # "r" : 읽기모드로 파일을 열겠습니다.
data = file.readlines() # 모든 행을 한번에 읽어 들인다.
file.close()
data
file = open("C:/data/test.txt", "r") # "r" : 읽기모드로 파일을 열겠습니다.
data = file.readlines() # 모든 행을 한번에 읽어 들인다.
file.close()
data
new = []
for i in data:
new.append(i.rstrip())
new
file = open("C:/data/test.txt", "r")
data = file.read() # 모든 행을 하나의 문자열로 읽어들인다.
file.close()
len(data)
data.replace('\n', ' ')
'Language > Python' 카테고리의 다른 글
231120 Python_isin(), 같다, 같지않다, or(|), and(&), null(결측치) (0) | 2023.11.20 |
---|---|
231117 Python_with문, csv, lambda 함수, pandas, Series, DataFrame, 정렬 (1) | 2023.11.20 |
231115 Python 함수 (1) | 2023.11.20 |
231115 Python_for문, range() (1) | 2023.11.20 |
231114 Python_자료형, 튜플(tuple), dictionary, 집합(set), bool(참,거짓), 조건제어문(if), 반복문(for, while) (1) | 2023.11.20 |