오늘도 점프 투 파이썬..
1월 전에는 끝내봐야지..
1.
파일에 무언가를 쓰고 읽을 때 마지막에 항상 파일객체명.close()를 해주었다.
근데 파일을 열고 닫는 것을 자동으로 처리하는 방법이 있다.
바로 with를 사용하는 것이다.
num.txt는 비어있는 상태다.
with open('num.txt','w',encoding='utf-8') as f:
f.write('하이하이')
위 코드를 실행하면
with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close된다.
2.
대부분의 명령 프롬프트 명령어는 명령 프롬프트 창에서 매개변수를 직접 주어 프로그램을 실행하는 방식을 따른다.
명령 프롬프트 명령어 인수1 인수2 ....
이러한 기능을 파이썬에서도 적용할 수 있다.
파이썬에서는 sys 모듈을 사용하여 매개변수를 직접 줄 수 있다.
sys 모듈은 import를 해줘야 한다.
#sys1.py
import sys
args= sys.argv[1:]
t = []
for i in args:
t.append(int(i))
print(sum(t))
sys 모듈의 argv는 명령 창에서 입력한 인수를 의미한다.
위 코드에서 argv[0] 는 파일 이름 sys1.py가 되고, argv[1]부터는 뒤에 따라오는 인수가 차례로 argv의 요소가 된다.
<4장 연습문제>
#1
def is_odd(a):
if int(a)%2==1:
return "홀수"
elif int(a)%2==0:
return "짝수"
#2
def average():
a = list(map(int,input().split()))
return sum(a)/len(a)
def average(*a):
lst = []
for i in a:
lst.append(i)
return sum(a)/len(a)
#3
input1 = input("첫번째 숫자를 입력하세요:")
input2 = input("두번째 숫자를 입력하세요:")
total = int(input1) + int(input2)
print("두 수의 합은 %s 입니다" % total)
#4
3번
#5
f1 = open("test.txt", 'w')
f1.write("Life is too short")
f1.close()
f2 = open("test.txt", 'r')
print(f2.read())
f2.close()
#6
f = open('test.txt','a',encoding='utf-8')
while True:
data = input()
if data=='':
break
data += '\n'
f.write(data)
f.close()
#7
모르겠음..
파일의 데이터를 꺼내서 replace해준 후, 다시 써주면 됨.
f = open('test.txt','r',encoding='utf-8')
data =f.read()
f.close()
data = data.replace('java','python')
f =open('test.txt','w',encoding='utf-8')
f.write(data)
f.close()
3.
파일을 닫지 않은 상태에서 다시 열면 파일에 저장한 데이터를 읽을 수 없다.
그래서 꼭꼭 파일객체명.close()를 해주거나 with를 사용할 것.
4.
계산기를 이용해 3+4를 계산한 후에 +5를 계산하려고 한다.
그러려면 계산기는 이전에 계산한 결괏값을 기억하고 있어야 한다.
Class가 필요한 이유도 이와 같다.
이런 상황을 가정해보자.
계산기 2개가 필요하다.
1번 계산기에서는 3+4를 계산해야하고
2번 계산기에서는 5+10을 계산해야 한다.
계산기가 1개만 필요하다면
num = 0
def add_num(x):
global num
num+=x
return num
이렇게 되는 코드가
계산기가 2개 필요하면
num1 = 0
num2 = 0
def add_num1(x):
global num1
num1+=x
return num1
def add_num2(x):
global num2
num2+=x
return num2
이렇게 된다.
즉, 똑같은 함수를 변수이름만 바꿔서 두개 만들어줘야한다
그런데 계산기가 더더더 많이 필요한 상황이 온다면 그때마다 함수를 추가해줘야하는걸까?
이때 클래스를 사용하면 된다.
class Calculator:
def __init__(self):
self.result = 0
def add(self, x):
self.result += x
return self.result
cal1 = Calculator() #객체
cal2 = Calculator() #객체
print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(5))
print(cal2.add(10))
3
7
5
15
calculator 클래스로 만든 별개의 계산기 cal1,cal2 (파이썬에서는 이걸 객체라고 부른다)가 각각의 역할을 수행한다.
그리고 계산기 각각의 결괏값 역시 다른 계산기의 결괏값과 상관없이 독립적인 값을 유지한다.
클래스가 늘어나도 그때마다 객체만 생성하면 되기 때문에 함수를 사용하는 경우와 달리 매우 간단해진다.
5. 클래스와 객체
Class란 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계도면이고(ex. 과자 틀)
Object란 클래스로 만든 피조물이다. (ex. 과자 틀을 사용해 만든 과자)
클래스로 만든 객체의 특징은 객체마다 고유한 성격을 가진다는 것이다.
같은 클래스로 만든 객체라도 한 객체에서 일어난 일이 다른 객체에 일어난 일에 전혀 영향을 주지 않는다.
6. 객체와 인스턴스
이거 진짜 궁금했었다.
class Cookie:
pass
a = Cookie()
인스턴스는 클래스로 만든 객체이다.
'인스턴스' 라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다.
*어울리는 표현*
- a는 객체.
- (객체) a는 Cookie의 인스턴스.
7.
클래스는 무작정 만드는 것보다 클래스로 만든 객체를 중심으로 어떤 식으로 동작하게 할 것인지 미리 구상을 한 후에 생각한 것들을 하나씩 해결하면서 완성해나가는 것이 좋다.
class my_class:
pass
a= my_class()
b= my_class()
print(type(a))
print(type(b))
<class '__main__.my_class'>
<class '__main__.my_class'>
a,b는 my_class 클래스의 객체이다.
8.
클래스 안에 구현된 함수는 method 이다.
[점프 투 파이썬]
'Python' 카테고리의 다른 글
220203 학습일기 (0) | 2022.02.06 |
---|---|
220127 학습일기 (0) | 2022.01.27 |
220120 학습일기 (0) | 2022.01.20 |
[sw expert acadmey] 1859. 백만 장자 프로젝트 (0) | 2022.01.19 |
220117 학습일기 (0) | 2022.01.18 |