1. 정적타이핑(static typing)과 동적 타이핑(dynamic typing)
1) 정적타이핑: 변수의 타입이 프로그래밍 시에 결정
ex) 자바, C, C++
2) 동적타이핑: 변수의 타입이 수행하면서 결정, 이후 다른 타입의 값이 들어오면 타입이 바뀜.
ex) 파이썬
2. print()
1) 괄호 속에 프린트하고자 하는 내용을 콤마로 구분해서 나열하면 됨.
2) print()는 기본적으로 줄을 바꿈. (∵end라는 변수를 숨겨놓고 기본 값을 '\n'로 해두었기 때문.)
>>>age=21
>>>print('I am', age, 'years old.')
I am 21 years old.
>>>print("I like", end=" ")
>>>print("POTATOES")
I like POTATOES
3) sep: 원소 사이를 구분하는 변수
>>>print('Got', 'air', 'in', 'my', 'lungs', 'Im', 'so', 'lucky', sep='*')
Got*air*in*my*lungs*Im*so*lucky
3. 자료형
1) 타입 캐스팅(type casting): 타입을 지정하는 것
>>>x=4
>>>y=17.5
>>> a=(int)(x+Y)
>>>print('a is', a)
a is 21
2) 연산자
사칙연산(+,-,*,/), 나머지(%), 몫(//), 지수(**)
3) 문자열
'...'
"..."
''' ... '''
4. 반복과 분기
1) for문
sum = 0
for i in range(1, N+1):
sum += A[i]
2) while 문
sum=0; i=3
while i <= N:
sum += A[i]
i += i
3) range()
>>>for i in range(10, 2, -2):
>>>print(i, end=' ')
10 8 6 4
5. 불변 타입과 가변 타입
1) 불변 타입(immutable)
한 번 값이 할당되면 그 자리에서 절대로 값을 변경하지 않는다. 바뀐 값을 다른 자리에 저장하고 그 자리를 a가 레퍼런스하는 방식
ex) 숫자, 문자열, 튜플, 딕셔너리의 키
2) 가변 타입(mutalbe)
레퍼런스하는 자리는 변함이 없고 그 자리에서 값 자체를 바꾸는 방식
ex) 리스트, 딕셔너리의 값
6. 리스트[], 튜플(), 딕셔너리, 집합{}
리스트
>>> a=[1, 3, 5, 7]
>>>print(a)
1 3 5 7
>>>for x in a
>>>print(x, end = '*')
1* 3* 5* 7*
튜플
>>>t=(1, 3, 5, 7)
>>>print(t)
1 3 5 7
>>>for x in t
>>>pirnt(x, end='*')
1* 3* 5* 7*
딕셔너리
>>>d={1:10, 3:20, 5:30, 10:40}
>>>d[3] = 222
>>>d[50] = 55
>>>for i in d:
>>> print(i, ':', d[i], end=',')
1 : 10, 3 : 222, 5 : 30, 10: 40, 50: 55,
집합
>>> a= {1, 3, 5, 7}
>>> a.add(3)
>>> a.add(10)
>>> print(a)
{1, 3, 5, 7, 10}
7. 복사호출, 참조호출, 할당호출
1) 인자(argument): 함수를 호출할 때 넘기는 것
2) 파라미터(parameter): 호출받은 함수에서 넘어온 인자를 받는 변수
3) 복사호출(Call-by-Value): 변수의 값을 넘긴다. (∴함수를 호출할 때 인자로 보낸 변수는 그 값을 복사해서 사용하므로 원래 호출했던 곳에서는 내용이 변하지 않는다.)
ex) 자바, C...
4) 참조호출(Call-by-Reference): 변수의 레퍼런스(식별자, 포인터 또는 주소)를 넘긴다.
5) 함수의 파라미터가 불변 타입이면 값을 보갓하고, 가변 타입이면 레퍼런스를 복사하는 등 파이썬의 함수 호출 방식은 두 방법을 혼용하고 있다.
8. 클래스
1) 객체를 만드는 주형 또는 틀
2) 생성자(Constructor)와 메서드(Method)로 구성됨
3) 메서드: 클래스 안에서 정의된 함수
4) 생성자: 해당 클래스의 객체가 하나 만들어질 때 자동으로 수행되어 객체를 초기화하는 역할, 메서드들 중 어느 위치에 있어도 상관없지만 '초기화' 역할을 하므로 관행적으로 맨 앞에 두는 메서드임.
5) 클래스의 객체 전체에서 사용되는 변수는 주로 __init__()에서 정의, 해당 클래스란 뜻을 가진 self를 앞세움.
6) self가 붙은 변수는 해당 객체 전체에서 사용될 수 있다.
class Sample:
counter2 = 0
def __init__(self):
self.counter = 0
def numEven(self, n):
for k in range(n):
if k % 2 == 0:
self.counter += 1
Sample.counter2 += 1
s1 = Sample()
s2 = Sample()
s1.numEven(15)
s2.numEven(15)
print(s1.counter, s2.counter2)
#수행 결과: 8 16
=> counter2는 모든 객체를 통틀어 하나만 존재하고 self.counter는 각 객체마다 하나씩 존재하기 때문!
즉, self.counter는 각 객체의 지역 변수고, self가 명시되지 않은 counter2는 모든 객체를 통틀어 하나밖에 없는 전역 변수
7) 메서드 정의 사이에 속하지 않는 파이썬 문장이 나와도 수행
8) 선언할 때 메서드를 바깥에 공개할 필요가 없으면 접근 지정자를 비공개로 처리하는 것이 좋음. '__'를 붙인다!
9. 순회 가능 클래스
1) 순회 가능(Iterable) 객체: 대상 객체의 원소를 하나하나 순차적으로 훑는 것
2) 모든 순회 가능 클래스는 내부에 순회자를 갖고 있다.
3) 순회자는 두 메서드 __iter__()와 __next__로 구성된다.
4) 순회자의 구조
class M:
def __init__(self):
...
def append(self, i, newItem):
...
def ___iter__(self): #순회자 객체 생성
return Miterator(self)
class Miterator: #순회자
def __init__(self, alist):
self.iterPosition = alist.getNode(0)
def __next__(self):
if self.iterPosition == None:
raise StopIteration
클래스 M의 객체를 순회 가능한 객체로 만들기 위해 클래스 Miteraotr를 따로 정의
순회자를 가동시키기 위해 클래스 M 내부에서 메서드 __iter__()를 수행
그 결과로 클래스 Miterator 객체가 하나 만들어짐.
객체에서 원소가 필요할 때마다 순환자의 메서드 __next__()를 호출
10. 프로그램 수행
class Heap:
def __init__(...):
...
def isEmpty(...):
...
def inser(...):
...
1) 클래스도 .py 파일에 작성
2) 클래스 Heap과 클래스 Heap에서 정의된 메서드들이 해석된다.
3) 메서드에 속하지 않는 문장은 수행된다.
class Test:
def __init__(...):
...
def isEmpty(...):
...
①print('클래스 내부 테스트')
def insert(...):
②print('메서드 내부 테스트')
③print('클래스 외부 테스트')
① 클래스 test의 어떤 메서드에 속하지 않고 클래스 Test에만 속하므로 Test를 해석하는 과정에서 수행
② 메서드 내부에서 사용되므로 해석하는 과정에서 수행X
③ 들여쓰기가 없으므로 Test에 속하지 않고 클래스 Test와 동등한 레벨, 수행
만약 ①의 위치에서 변수가 선언된다면??
=>객체마다 해당 변수가 만들어지지 않고 모든 Test 객체를 통틀어 하나만 생성됨!!
반면, 클래스 Test의 메서드 안에서 선언된 변수는 객체가 생성될 때마다 해당 객체에 연동되어 생성
📒exercise
class Heap:
def __init__():
...
class Test:
def __init__(...):
self.counter =
...
counter=0
def count(self):
self.counter += 1
Heap.counter += 1
print("(self.counter, Heap.counter) = (", self.counter, ",", Heap.counter,")")
def isEmpty(...):
...
h1 = Test()
h2 = Test()
h1.count()
h2.count()
h2.count()
<실행결과>
(self.counter, Heap.counter) = (1, 1)
(self.counter, Heap.counter) = (1, 2)
(self.counter, Heap.counter) = (2, 3)
③의 위치에서 문제를 발생시키지 않고 Test.py를 수행시킬 떄만 수행되도록 하려면 main()을 사용!!
4) 파이썬에는 __name__이라는 내장 변수가 있다. 파일이 직접 수행되면, '__main__'이라는 문자열을 갖게 되고, 다른 파일에서 이 파일을 사용하는 경우 사용자 파일 이름을 갖게 된다.
5) if __name__=="__main__":
이 파일에서 프로그램의 수행이 시작 되었으면
11. 패키지와 모듈
1) 모듈(Module): .py로 끝나는 파일 각각
2) 패키지(Package): 모듈(들)과 서브패키지(들)로 구성된 폴더
3) 한 모듈에서 다른 모듈에 접근하고자 할 때는 import를 통해 가져와야 한다.
'Major > Computer Science' 카테고리의 다른 글
| [파이썬 자료구조] 05. 리스트 (0) | 2025.04.21 |
|---|---|
| [암호구현및실습] 01. Algorithm and Computation (0) | 2025.04.20 |
| [파이썬 자료구조] 03. 알고리즘의 성능 (0) | 2025.04.18 |
| [파이썬 자료구조] 02. 재귀와 수학적 귀납법 (0) | 2025.04.16 |
| [파이썬 자료구조] 01. 자료구조 개요 (0) | 2025.04.15 |