def fn(num):
if num % 2 == 0:
return 'Y'
class A:
def fn(self):
print('A')
print('Hello') # Hello
유형 | 설명 | 세부 유형 |
---|---|---|
기본 자료형 (Primitive Data Type) | 직접 자료를 표현하는 자료형 | 숫자형(Number) 논리형(Logical) |
컬렉션 자료형 (Collection Data Type) | 다수의 데이터를 효과적으로 처리 | 문자열형(String) 리스트형(List) 튜플형(Tuple) 딕셔너리형(Dictionary) 세트형(Set) |
유형 | 설명 | 예시 |
---|---|---|
문자열형(String) | - 문자 한 개 또는 여러 개 저장하고자 할 때 사용 | s = "Test" |
리스트형(List) | - 크기가 가변적으로 변하는 선형리스트의 성질을 가짐 - 읽기, 쓰기 모두 가능 | I=[1, 2, 3] |
튜플형(Tuple) | - 초기에 선언된 값에서 값을 생성, 삭제, 수정할 수 없는 형태 - 읽기 전용으로 속도가 빠름 | t=(1, 2, 3) |
유형 | 설명 | 예시 |
---|---|---|
세트형(Set) | - 중복된 원소를 허용하지 않는 집합의 성질을 가짐 | s={1, 2, 3} |
딕셔너리형(Dictionary) | - 키, 값으로 구성된 객체를 저장하는 구조 | d={'s':1, 'j':2, 'b':3} |
→ 파이썬의 세트형은 자바의 Set 클래스(HashSet)과, 파이썬의 리스트형은 자바의 List 클래스(ArrayList, LinkedList)와, 파이썬의 딕셔너리형은 자바의 Map 클래스(HashMap)와 비슷
시퀀스 자료형 종류
ⓐ 문자열형(String) ⭐
print("Hello")
print("Hello", "World") # Hello World ← (,)로 구분되면 띄어쓰기
print("\"Hello\"") # "Hello"
print("Hello"*3) # HelloHelloHello
파이썬 문자열은 포맷스트링을 이용하여 문자열을 출력할 수 있음
a = "Hello"
print("%s" % a) # Hello
b = "%s" % " world"
print(a+b) # Hello world
c = 123
print("%s %d" % (a, c)) # Hello 123
→ 컬렉션 자료형 변수를 그냥 출력했을 때는 괄호 표시 O, 문자열 변수를 출력했을 때는 괄호 표시 X
문자열에서 in
연산자를 이용하여 찾고자 하는 문자열이 존재하면 True
, 없으면 False
문자열 관련 함수
함수 | 설명 |
---|---|
upper() | 문자열을 대문자로 변환 |
lower() | 문자열을 소문자로 변환 |
isalnum() | 문자열이 알파벳 또는 숫자로만 구성되어 있는지 |
isalpha() | 문자열이 알파벳으로만 구성되어 있는지 |
isdecimal() | 문자열이 정수인지 |
isdigit() | 문자열이 숫자인지 |
isspace() | 문자열이 공백으로만 구성되어 있는지 |
split() | 문자열을 매개변수로 전달된 문자(구분자)로 나누어 리스트로 변환 |
str = "1,2,3".split(",")
print(str) # ['1', '2', '3']
ⓑ 리스트형(list) ⭐⭐
[,] 를 이용하여 리스트형 선언
리스트명=[요소1, 요소2, ···]
리스트형 메서드
메서드 | 설명 |
---|---|
append(x) | 리스트 마지막 요소 뒤에 값 x를 추가 |
clear() | 리스트의 모든 항목을 삭제 |
copy() | 리스트를 복사 |
count(x) | 리스트에서 x 항목의 개수를 알려줌 |
extend(i) | 리스트 마지막에 컬렉션 자료형 i를 추가 |
index(x) | 값 x와 같은 값을 가지고 있는 인덱스 번호를 알려줌 |
insert(i, x) | 리스트의 i 번지 위치에 값 x를 삽입 |
pop() | 마지막 항목을 삭제하고 값을 꺼내옴 |
remove(x) | 리스트에서 해당하는 값(중복이면 가장 앞) x를 제거 |
reverse() | 리스트의 위치를 전부 역순으로 바꿔줌 |
sort() | 리스트의 항목들을 정렬 |
리스트를 2차원으로 만들 수 있음
a = [[1, 2], [3, 4], [5, 6]]
print(a) # [[1, 2], [3, 4], [5, 6]]
print(a[0]) # [1, 2]
print(a[1][0]) # 3
b = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
print(b[0]) # [1, 2, 3]
ⓒ 튜플형
튜플명=(요소1, 요소2, ···)
t = ('s', 'j', 'b')
print(t) # ('s', 'j', 'b')
시퀀스 자료형 요소 접근 방벙 - 인덱싱(Indexing)
시퀀스 자료형은 여러 값으로 이루어져 있는데 인덱스를 이용해서 중간값에 접근할 수 있음
첫 번째 요소 | 두 번째 요소 | ··· | 뒤에서 두 번째 요소 | 뒤에서 첫 번째 요소 |
---|---|---|---|---|
0 | 1 | ··· | (n-2) | (n-1) |
-n | -(n-1) | ··· | -2 | -1 |
인덱싱은 문자열, 리스트 같은 자료구조에서 사용
문자열 인덱싱은 문자열에 부여된 번호로 원하는 문자를 가리킬 때 사용
문자열 앞에서부터 시작하면 인덱스는 0부터 시작하고, 뒤에서부터 시작하면 -1 부터 시작
인덱싱으로 접근하면 출력 결과에 괄호가 없음
시퀀스 자료형 요소 접근 방벙 - 슬라이싱(Slicing)
슬라이싱은 시퀀스 자료형에서 여러 개의 데이터에 동시에 접근하는 기법
시퀀스변수명[시작 : 종료 : 스텝]
형태 | 설명 |
---|---|
시작 | - 슬라이싱을 시작할 인덱스 - 생략할 경우 '시퀀스변수명[ : 종료]' 또는 '시퀀스변수명[ : 종료 : 스텝]' 형태가 됨 - 생략할 경우 처음부터 슬라이싱 |
종료 | - 슬라이싱을 종료할 인덱스 - 종료 인덱스에 있는 인덱스 전까지만 슬라이싱 - 생략할 경우 '시퀀스변수명[ 시작 : ]' 또는 '시퀀스변수명[ 시작 : : 스텝]' 형태가 됨 - 생략할 경우 마지막까지 슬라이싱 |
스텝 | - 몇 개씩 끊어서 슬라이싱을 할지 결정하는 값 - 생략할 경우 '시퀀스변수명[ 시작 : 종료 ]' 또는 '시퀀스변수명[ 시작 : 종료 : ]' 형태가 됨 - 생략할 경우 1이 기본값 |
ⓐ 문자열 슬라이싱
print("Information"[1:]) # nformation
print("Information"[2:4]) # fo
print("Information"[:3]) # inf
→ 문자열 슬라이싱을 제외한 다은 시퀀스 자료형은 출력 결과에 괄호가 표시됨
ⓑ 리스트 슬라이싱
a = [4, 2, 7, 3, 5]
print(a[0 : 4 : 2] # [4, 7]
ⓒ 튜플 슬라이싱
t = ('s', 'j', 'b')
print(t[1:]) # ('j', 'b')
세트형
ⓐ 세트(Set)형 개념
세트명 = set([요소1, 요소2, ···])
세트명 = {요소1, 요소2, ···}
ⓑ 세트형 메서드
메서드 | 설명 |
---|---|
add(값) | 값을 1개 추가 |
update([값1, 값2, ···]) | 여러 개의 값을 한꺼번에 추가 |
remove(값) | 특정 값을 제거하는 메서드 |
딕셔너리(Dictionary)
ⓐ 딕셔너리형 개념
ⓑ 딕셔너리형 요소 생성
딕셔너리명={키1:값1, 키2:값2, ···}
ⓒ 딕셔너리형 요소 변경
딕셔너리명[키]=값
ⓓ 딕셔너리형 요소 삭제
del 딕셔너리명[키]
자료형을 확인하는 함수
기본 자료형(Primitive Data Type)
세부 유형 | 출력 |
---|---|
정수형(Integer) | <class 'int'> |
실수형(Floating Point) | <class 'float'> |
논리형(Logical) | <class 'bool'> |
컬렉션 자료형(Collction Data Type)
세부 유형 | 출력 |
---|---|
문자열형(String) | <class 'str'> |
리스트형(List) | <class 'list'> |
튜플형(Tuple) | <class 'tuple'> |
딕셔너리형(Dictionary) | <class 'dict'> |
세트형(Set) | <class 'set'> |
print(문자열)
: 출력 후에 개행print(문자열, end='')
: 출력 후에 개행을 하지 않음print(변수명)
eval
함수를 써서 숫자를 변환해 주어야 함변수명 = input()
변수명 = eval(변수명)
s = input() # 1
s = eval(s)
print(s) # 1
a, b = 10, 20
print(a) # 10
print(b) # 20
a, b = b, a
print(a) # 20
print(b) # 10
→ 파이썬 연산자는 C언어와 거의 동일하지만 ++, --는 지원하지 않음
print(3 / 2) # 1.5
print(3 // 2) # 1 ← 몫 계산
print(3 ** 2) # 9
print(3 % 2) # 1
① 일반 for 문
for 변수 in range(시작, 종료, 스텝) :
명령문
② for each 문
for 변수 in 시퀀스자료형 :
명령문
li = [1, 2, 3, 4, 5]
for a in li :
print(a) # 1\n2\n3\n4\n5\n
li = [[1, 2], [3, 4, 5]]
for a in li :
for b in a :
print(b, end='') # 12345
① 사용자 정의 함수(User-Defined Function)
def 함수명(변수명, ···) :
명령어
return 반환값
② 디폴트 매개변수
def 함수명(매개변수=디폴트값) :
명령문
① 람다 함수
② 람다 함수 문법
lambda 매개변수 : 표현식
(lambda n, m : n + m)(2, 3) # 5 (왜 출력이 되는거지?)
sum = lambda n, m : n + m
print(sum(2, 3)) # 5
def f(n) :
return lambda a:a*m
k = f(3)
print(k(10)) # 30
람다 함수는 파이썬 map 함수, filter 함수와 같이 사용 가능
함수 | 형태 | 설명 |
---|---|---|
map | map(함수, 리스트) | - 첫 번째 매개변수에는 함수, 두 번째 매개변수에는 리스트를 전달 - 리스트 요소를 함수에 전달하여 반복을 수행하는 함수 |
filter | filter(함수, 리스트) | - 첫 번째 매개변수에는 함수, 두 번째 매개변수에는 리스트를 전달 - 리스트 요소를 함수에 전달하여 조건이 참인 값을 리턴하는 함수 |
파이썬 map을 이용한 람다 함수
a = [1, 2, 3, 4, 5]
m = list(map(lambda num : num + 100, a))
print(m) # [101, 102, 103, 104, 105]
a = [1, 2, 3, 4, 5]
m = list(filter(lambda num : num > 2, a))
print(m) # [3, 4, 5]
① 예외 처리
try :
명령문
except :
예외 발생시 동작할 명령문
→ except 다음에 예외가 발생하는 경우 동작할 코드 작성
try :
명령문
except 발생예외명:
예외 발생시 동작할 명령문
finally :
명령문
→ except에서 특정 예외만 처리하기 위함
→ finally는 try가 실행되고 마지막에 반드시 실행될 명령문
try :
명령문
except 발생예외명1:
예외 발생시 동작할 명령문1
except 발생예외명2:
예외 발생시 동작할 명령문2
else :
명령문
→ else는 예외가 발생되지 않았을 경우에 실행될 명령문
a, b = 2, 0
try :
print(a/b)
except IndexError as e :
print('[exception]', e)
except ZeroDivisionError as e :
print('[exception]', e) # [exception] division by zero
② raise
명령문
raise
명령문
raise 예외처리명
명령문
raise 예외처리명("메시지")
a, b = 2, 0
try :
print(a/b)
raise
except ZeroDivisionError as e :
print('에러') # 에러
class 클래스명:
def 메서드명(self, 변수명, ···):
명령어
return 반환값
class Test:
def fn(self):
print(5)
self.변수명
self.함수명(매개변수)
class Test:
def setS(self, a):
self.a = a
def getS(self):
return self.a
a = Test()
a.setS(5)
print(a.getS()) # 5
__init__
이라는 메서드 명을 사용하고, 첫 번째 매개변수로 self
를 작성하며, 반환 값이 없음class 클래스명:
def __init__(self, 매개변수):
명령어
클래스변수=클래스(매개변수)
__del__
이라는 메서드명을 사용하고, 첫 번째 매개변수에 self
를 작성하며, 반환 값이 없음class 클래스명:
def __del__(self):
명령어
del 클래스변수
class Test:
def __init__(self):
print("생성자")
def __del__(self):
print("소멸자")
def fn(self):
print("일반함수")
t = Test() # 생성자
t.fn() # 일반함수
del t # 소멸자
private
, public
등의 접근 제어자 키워드가 존재하지 않고 작명법(Naming)으로 접근 제어를 해야 함종류 | 규칙 | 설명 |
---|---|---|
public | - 밑줄이 접두사에 없어야 함 | - 외부의 모든 클래스에서 접근이 가능한 접근 제어자 |
protected | - 한 개즤 밑줄 _이 접두사여야 함 | - 같은 패키지 내부에 있는 클래스, 하위 클래스(상속받은 경우)에서 접근이 가능한 접근 제어자 - 자기 자신과 상속받은 하위 클래스 둘 다 접근이 가능한 접근 제어자 |
private | - 두 개의 밑줄 __이 접두사여야 함 | - 같은클래스 내에서만 접근이 가능한 접근 제어자 |
class 부모_클래스명:
···
class 자식_클래스명(부모_클래스명):
···
class 부모_클래스명:
def 메서드명(self, 변수명) :
명령어
class 자식_클래스명(부모_클래스명):
def 메서드명(self, 변수명) : # 부모 클래스와 메서드명, 매개변수가 같아야 함
명령어
class A:
def fn(self) :
print('A')
class B(A):
def fn(self) :
print('B')
a = B()
a.fn() # B
super().메서드명()
class A:
def fn(self) :
print('A')
class B(A):
def fn(self) :
super().fn()
print('B')
a = B()
a.fn() # A\nB\n