반응형
01. 변수
# 주석 ?? -> 코드에 설명을 달고 싶을 때 앞에 # 을 붙이면 된다. 프로그램에 영향이 없음
# 주석 처리 방법 : ctrl + /
print("*************************************ex1*************************************")
# 변수? -> 숫자, 텍스트 등을 저장 할 수 있는 방.
# x 라는 방(변수) 에 1이라는 숫자를 저장, 저장할 때는 "=" 를 사용
x = 1
# x 라는 변수에 저장된 내용을 출력
print(x)
print("\n*************************************ex2*************************************")
# 문자열은 큰따옴표 안에 넣는다.
# x 라는 변수에 원래 1이 저장되어 있는데 "변수 테스트1" 을 저장하면 1은 사라지고 "변수 테스트1" 이 저장됨
x = "변수 테스트1"
print(x)
print("\n*************************************ex3*************************************")
# 변수명은 마음대로 지어낼 수 있음
y_test = "변수 테스트2"
print(y_test)
print("\n*************************************ex4*************************************")
# 두 개 모두 출력 가능
print(x,y_test)
print("\n*************************************ex5*************************************")
# 변수에 있는 숫자들을 합산 할 수 있음
x=1
y=2
z=x+y
print(z)
print("\n*************************************ex6*************************************")
# 문자열과 문자열을 더하면? (123 은 숫자지만 큰따옴표 안에 들어가 있어서 문자열로 인식)
x="test"
y="123"
print(x+y)
02. 함수
print("\n*************************************ex1*************************************")
# 함수란 ??
# def는 define의 앞글자를 따서 만든거다.
# 함수명은 자유롭게 기능에 맞춰 지어내면 된다.
# 함수 내에서는 tab 키로 한 칸 띄우고 입력해야한다.
# 함수 이름은 중복되면 안된다.
def print_test():
print("test!!!!")
# 함수를 호출할 때는 함수 이름과 "()" 를 붙여서 사용하면 된다.
# 함수는 호출되기 전까지는 구동 하지 않는다.
print("함수 호출 전")
print_test()
print("함수 호출 후")
print("\n*************************************ex2*************************************")
# 매개변수(parameter)
def print_test2(x):
print(x)
print_test2("test!!!")
print_test2("test2!!")
print("\n*************************************ex3*************************************")
# 함수를 사용하는 이유? 코드가 중복되는 것을 방지하기 위해서
# ex) 1과 2를 더한 결과, 3과 4를 더한 결과, 5와 6을 더한 결과를 출력하는 프로그램을 만드시오.
x=1
y=2
z=x+y
print(z)
x=3
y=4
z=x+y
print(z)
x=5
y=6
z=x+y
print(z)
print("\n*************************************ex4*************************************")
# 위 코드를 함수로 간소화시키면???
def print_test3(x,y):
z=x+y
print(z)
print_test3(1,2)
print_test3(3,4)
print_test3(5,6)
print("\n*************************************ex5*************************************")
# return ??
def print_test4(x,y):
return x+y
z=print_test4(1,3)
print(z)
print("\n*************************************ex6*************************************")
# 지역변수 vs 전역 변수
# 함수 내에서 선언된 변수를 지역변수, 함수 밖에서 선언된 변수는 전역변수
# 지역 변수는 함수가 호출되었을 때에만 저장되어 있다. 즉, 함수를 빠져나오는 순간 저장된 값은 사라진다.
def ex6():
ex6_x=2
print("지역변수 : ", ex6_x)
ex6_x=1
ex6()
print("전역변수 :", ex6_x)
print("\n*************************************ex6_1*************************************")
def ex7():
z=1
print(z)
z=3
ex7()
print(z)
03. 자료형
# 자료형
# 정수: int
# 실수: float
# 문자열: str
# (참, 거짓): bool
print("\n*************************************ex1*************************************")
print("1: ", type(1))
print("1.1: ", type(1.1))
print("abc: ", type("abc"))
print("True: ", type(True))
print("False: ", type(False))
04. 조건문
print("\n*************************************ex1*************************************")
# [ 비교연산자 ]
# x < y x가 y보다 작다
# x > y x가 y보다 크다
# x == y x와 y가 같다
# x != y x와 y가 같지 않다
# x >= y x가 y보다 크거나 같다
# x <= y x가 y보다 작거나 같다
# [if ~ else 조건문]
a=1
b=2
if a==b:
print("같다.")
else:
print("다르다")
print("\n*************************************ex2*************************************")
# [ if ~ elif ~ else 조건문 ]
a=1
b=2
if a>b:
print("a가 크다")
elif a<b:
print("b가 크다")
else:
print("a와 b는 같다.")
print("\n*************************************ex3*************************************")
#[ bool 자료형 ]
# True : 참
a=True
# False : 거짓
b=False
# and , or , not 연산자
# x or y: x와 y 둘중에 하나만 참이어도 참
# x and y: x와 y 모두 참이어야 참
# not x : x가 거짓이면 참이다
print("True and False:", a and b)
print("True or False:", a or b)
print("True and True:", a and a)
print("True or True:", a or a)
print("False and False:", b and b)
print("False or False:", b or b)
print("not True:", not a)
print("not False:", not b)
print("\n*************************************ex4*************************************")
# 컴퓨터에서 1은 True, 0은 False로 해석 가능
a=1
b=0
print("1 and 0:", a and b)
print("1 or 0:", a or b)
print("1 and 1:", a and a)
print("1 or 1:", a or a)
print("0 and 0:", b and b)
print("0 or 0:", b or b)
print("not 1:", not a)
print("not 0:", not b)
05. class
print("\n*************************************ex1*************************************")
# class : 붕어빵 틀
class human():
# 메서드(method) : 클래스 내부에 정의 된 함수(그냥 함수랑 같다고 생각!)
def dancing(self):
# self : - 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용
# - 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것
print("self: ", self)
print("type(self): ", type(self))
def singing(self, param):
# param : 지역변수 (함수 내에서만 사용 가능)
# self.param : instance 변수 (클래스 내의 다른 함수에서도 사용 가능)
self.param=param
print("self.param: ", self.param)
def working(self):
# instance 변수는 지역 변수와 달리 다른 메소드에서도 사용 가능
print("self.param2: ", self.param)
# 파이썬은 들여쓰기가 되지 않은 Level0의 코드를 가장 먼저 실행시킨다.
# 클래스든, 메서드든 호출 되기 전에는 실행 되지 않는다.
# 객체: 객체란 변수들과 그와 관련된 메서드들이 모여서 이룬 하나의 꾸러미(붕어빵)
# 객체, 인스턴스의 차이? : 객체는 실체, 인스턴스는 클래스와의 관계에 집중한 용어이다.
# 즉, 클래스로 만든 객체를 인스턴스라고도 한다.
# jake는 객체다, 그리고 jake 객체는 hunam이라는 클래스의 인스턴스이다.
# "jake는 인스턴스" : X
# "jake는 객체" : O
# "jake는 human의 객체" : X
# "jake는 human의 인스턴스" : O
jake = human()
merry = human()
jake.dancing()
jake.singing("jake에게 파라미터를 넘겨주자!")
print("jake.param: ", jake.param)
jake.working()
merry.singing("merry에게 파라미터를 넘겨주자!")
print("merry.param: ", merry.param)
print("\n*************************************ex2*************************************")
# [계산기 프로그램 만들기 예제]
# class : 붕어빵 틀
# 즉, calc는 붕어빵 틀
class calc():
# 메서드(method) : 클래스 내부에 정의 된 함수
def setting_param(self,a,b):
# self.a : instance 변수
self.a, self.b= a, b
def add(self):
return self.a + self.b
def sub(self):
return self.a / self.b
def mul(self):
return self.a * self.b
def mod(self):
return self.a / self.b
# A, B 는 팥이 아직 안 들어간 같은 붕어빵
# ctrl을 누른 상태로 함수, 변수 클릭 하면 선언부로 이동
A = calc()
B = calc()
# A 붕어빵에는 1,2 라는 팥을 넣음
A.setting_param(1,2)
# B 붕어빵에는 3,4 라는 팥을 넣음
B.setting_param(3,4)
# A라는 인스턴스의 add 메소드를 호출하고 return(반환) 되는 self.a+self.b 결과가 answer라는 변수 안에 저장 된다.
answer = A.add()
print("answer : ", answer)
# 위에서는 A.add() 의 결과를 answer에 담고 answer를 출력했지만, 변수에 담지 않아도 바로 return 결과를 출력 할 수 있다.
print("A.add() : ", A.add())
# 똑같이 add() 메소드를 호출 했지만, 3,4 라는 다른 팥을 위에서 넣었기 때문에 다른 결과가 출력 된다.
print("B.add() : ", B.add())
print("\n*************************************ex3*************************************")
class calc():
# [생성자]
# 생성자(Constructor): 객체가 생성될 때 자동으로 호출되는 메서드.
# 파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가 된다.
# __init__ 메서드의 init 앞뒤로 붙은 __는 언더스코어(_) 두 개를 붙여 쓴 것이다.
def __init__(self, a, b):
self.a, self.b= a, b
def add(self):
return self.a + self.b
def sub(self):
return self.a / self.b
def mul(self):
return self.a * self.b
def mod(self):
return self.a / self.b
# ex2와 비교 시 간결한 코드
A = calc(1,2)
B = calc(3,4)
answer = A.add()
print("answer : ", answer)
print("A.add() : ", A.add())
print("B.add() : ", B.add())
06. 모듈
# import ? -> 미리 만들어 놓은 소스코드를 가져와서 쓰고 싶을 때 사용.
# 라이브러리 ? -> 미리 누군가 만들어 놓은 코드
# 구글에다가 검색해서 새로운 기능을 추가하는 경우 : A라는 기능을 쓰기 위해서는 어떤 라이브러리가 필요하지?? -> 암기 할 필요가 전혀없고, 불가능이다. 그냥 검색해서 복사 붙여 넣기.
print("\n*************************************ex1*************************************")
# 제곱근 구하기
# math 라는 라이브러리에 뭐가 있는지 궁금하면? ctrl + 클릭 -> 누군가 미리 수학과 관련된 함수들을 math라는 라이브러리에 만들어 두었다.
# 제곱근을 구하는 방법은 sqrt라는 함수를 이용하면 된다.
import math
# math라는 라이브러리에서 sqrt 라는 함수를 선택한 것.
a=math.sqrt(9)
print(a)
print("\n*************************************ex2*************************************")
# 제곱근 구하기2
# math라이브러리에는 수많은 함수들이 미리 정의가 되어있는데 그 중에 sqrt라는 함수만 사용하고 싶은 경우
from math import sqrt
# sqrt 앞에 math. 을 쓰지 않아도 바로 사용 가능
a=sqrt(9)
print(a)
07. list
print("\n*************************************ex1*************************************")
# 리스트(list)? : 값을 나열해서 저장하는 것
# 원소 : 리스트에 저장 된 각각의 값들
# 인덱스(index, 색인) : 위치 값
# 여기서 주의할 점은 리스트의 인덱스는 항상 0부터 시작한다는 점입니다. 즉, 리스트 a의 첫 번째 요소는 a[0]
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = 1
# a의 자료형은 list
print("type(a): ", type(a))
print("type(b): ", type(b))
# a 리스트 전체 출력
print("a: ", a)
# a의 0번째 인덱스의 요소(값)는 1
print("a[0]: ", a[0])
print("a[4]:", a[4])
# len은 a라는 리스트의 길이를 알려주는 내장 함수
print("len(a): ", len(a))
# a[-1] 처럼 인덱스가 -1인 경우는 리스트의 마지막 요소가 출력
print("a[-1]:", a[-1])
print("a[0]+a[1] =" , a[0]+a[1])
print("\n*************************************ex2*************************************")
a = ["안녕", "하세요", "저는", "홍길동", "입니다"]
print("a: ", a)
print("type(a): ", type(a))
print("a[0]: ", a[0])
print("a[4]:", a[4])
print("len(a): ", len(a))
print("a[-1]:", a[-1])
print("a[0]+a[1] =" , a[0]+a[1])
08. for문
# for 문이란 ? 반복문이다.
print("\n*************************************ex1*************************************")
# 0~9까지 출력하는 프로그램을 작성하라.
# range : 범위 설정! 여기서는 10번 for문을 돌아라는 뜻
for i in range(10):
print(i)
# 2~9까지 출력하는 프로그램을 작성하라.
print("\n*************************************ex2*************************************")
for i in range(2, 10):
print(i)
print("\n*************************************ex3*************************************")
# 2중 for 문
for first in range(2):
print("first: ", first)
for second in range(3):
print("second:", second)
print("\n*************************************ex4*************************************")
# 아래 리스트 a에 담긴 모든 원소(요소,element)를 출력하는 프로그램을 만드시오.
a=[1,2,3,4,5]
print(a[0])
print(a[1])
print(a[2])
print(a[3])
print(a[4])
print("\n*************************************ex5*************************************")
# 위 프로그램을 for문으로 수정하여 같은 결과를 출력하는 프로그램을 만드시오.
for i in range(len(a)):
print(a[i])
print("\n*************************************ex6*************************************")
# 위 프로그램을 더욱 간략하게 수정
for i in a:
print(i)
print("\n*************************************ex7*************************************")
a = ["안녕", "하세요", "저는", "홍길동", "입니다"]
for i in a:
print(i)
09. dataframe
print("\n*************************************ex1*************************************")
# dataframe ? => 행렬을 저장
from get_item import get_item
# get_item 클래스에 대한 인스턴스인 item 객체를 만든다
item=get_item()
print(item.code_df_kospi)
print("\n*************************************ex2*************************************")
print("type: ", type(item.code_df_kospi))
print("\n*************************************ex3*************************************")
print("len: ", len(item.code_df_kospi))
print("\n*************************************ex4*************************************")
# iloc : 행, 열 단위로 dafaframe 안에 있는 데이터에 접근
# 아래는 0행 0열과 0행 1열을 출력
print(item.code_df_kospi.iloc[0,0], item.code_df_kospi.iloc[0,1])
# 아래는 123행 0열과 123행 1열을 출력
print(item.code_df_kospi.iloc[123,0], item.code_df_kospi.iloc[123,1])
print("\n*************************************ex5*************************************")
# iloc와 동일하게 dataframe에 행, 열로 접근하는데 열의 경우 라벨명으로 접근.
# 아래는 0행 'code_name' 열과 0행 'code'열을 출력
print(item.code_df_kospi.loc[0,'code_name'], item.code_df_kospi.loc[0,'code'])
# 아래는 123행 'code_name' 열과 123행 'code'열을 출력
print(item.code_df_kospi.loc[123,'code_name'], item.code_df_kospi.loc[123,'code'])
10. while, continue, break
print("\n*************************************ex1*************************************")
# while 1:
# print(1)
# while True:
# print(1)
print("\n*************************************ex2*************************************")
for i in range(10):
print("i!!", i)
print("\n*************************************ex3*************************************")
for i in range(10):
if i==2:
continue
print("i!!", i)
print("\n*************************************ex4*************************************")
for i in range(10):
if i == 2:
continue
elif i==7:
break
print("i!!", i)
11. map, partial
print("\n*************************************ex1*************************************")
# map
def double(var):
return var * 2
var = list(map(double, [1, 2, 3]))
print(var)
print("\n*************************************ex2*************************************")
# partial
from functools import partial
def sum(a, b):
print(a+b*2)
f = partial(sum, b=10)
f(1)
12. multiprocessing
import multiprocessing
import time
def double(val):
time.sleep(1)
print(val)
return val * 2
def single_process(num_list):
# 시작시간
start_time = time.time()
results = []
for num in num_list:
results.append(double(num))
print(results)
print(f"Single: {time.time() - start_time} seconds")
def multi_process(num_list):
start_time = time.time()
# 멀티 쓰레딩 Pool 사용
# 코어수의 두배를 하는게 가장 빠르다는데
print("multiprocessing.cpu_count() :", multiprocessing.cpu_count())
with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
results = pool.map(double, num_list)
print(results)
print(f"multi: {time.time() - start_time} seconds")
if __name__ == '__main__':
num_list = [i for i in range(10)]
single_process(num_list)
multi_process(num_list)
반응형
LIST
'Programming' 카테고리의 다른 글
[Python][Library] 1 Numpy - tutorial (0) | 2022.01.02 |
---|---|
[Python][Library] 1 Numpy - 배열과 벡터 (0) | 2022.01.02 |
[Python][문법] 개념 정리 (0) | 2021.12.26 |
[Python][개념] 파이썬 사용 이유 및 특징, 활용처 (0) | 2021.12.25 |
[Python][Library] 3. matplotlib - 그래프 패키지 (0) | 2021.12.25 |