Python 기초 ~ 심화 문법 2.
튜플 / Tuple
: 리스트와 비슷하지만 불변형, 순서가 존재한다.
a = (1,2,3)
print(a[0]) # 1
javascript의 const와 같은 느낌
a_dict = [('bob','24'),('john','29'),('smith','30')]
딕셔너리 대신 리스트 + 튜플로 딕셔너리와 비슷하게 만들어 사용한다.
집합 / Set
: 리스트 속 중복 요소가 제거된다.
a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]
a_set = set(a)
print(a_set) #{1, 2, 3, 4, 5}
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']
a = set(a)
b = set(b)
print(a & b) # 교집합 // {'사과', '참외'}
print(a | b) # 합집합 // {'멜론', '참외', '청포도', '사과', '딸기', '감', '토마토', '수박'}
print(a - b) # 차집합 // {'감', '수박', '딸기'}
교집합, 합집합, 차집합도 가능
F-string
: 직관적인 문자열 만들기
EX) 이름과 점수 출력
scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]
for s in scores:
name = s['name']
score = str(s['score'])
print(name+'는 '+score+'점 입니다') # 출력 결과를 임의의 문자열로 꾸민다
for s in scores:
name = s['name']
score = str(s['score']) # str() = string, 문자열로 변환
print(f'{name}은 {score}점입니다')
f 뒤 { } 속 숫자인 변수가 들어가도 문자열로 변환되어 출력됨
+) int() = integer , 정수로 변환
str() = string , 문자열로 변환
Try - except문
: 에러가 발생해도 멈추지 않고 반복문을 돌 수 있게 해준다.
people = [
{'name': 'ben', 'age': 27},
{'name': 'bobby'},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for person in people:
if person['age'] < 30:
print (person['name']) # 에러발생, 에러 발생 시점에서 반복문이 중지됨
for person in people:
try:
if person['age'] < 30:
print (person['name'])
except:
name = person['name']
print(f'{name} - 에러입니다')
# ben
# bobby - 에러입니다
# queen
name까지 포함해주면 어느 구간에서 에러가 발생했는지 알 수 있다.
Python 파일 import
: 다른 파일의 함수 불러오기
- main_func.py -
def say_hi():
print('안녕!')
- main_test.py -
from main_func import *
say_hi() # 안녕!
import * 은 해당 파일의 모든 것을 불러온다는 뜻
If문 - 삼항연산자
: 참일 때 값, if , else로 항이 3개라 삼항 연산자이다.
num = 3
1)
if num % 2 == 0:
result = '짝수'
else:
result = '홀수'
# 기존의 if문
2)
result = ('짝수' if num % 2 == 0 else '홀수')
# 삼항연산자, if문 축약형
print(f'{num}은 {result}입니다') # 3은 홀수입니다
For문 축약형
a_list = [1,3,2,5,1,2]
1)
b_list = []
for a in a_list:
b_list.append(a*2)
# 기존의 for문
2)
b_list = [a*2 for a in a_list]
# 축약형
print(b_list) # [2, 6, 4, 10, 2, 4]
Map, lambda, filter 식
- Map
임의의 변수 = map(함수, 임의의 리스트)
print(list(임의의 변수))
리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음 새로운 결과를 리스트에 담는다.
> 반복문을 기반
- Lambda
print((lambda 매개변수 : 표현식 )( 인수 ))
# EX)
print((lambda x,y : x+y )( 1, 2 )) # 3
인수 > 매개변수 > 표현식 순으로 결과가 출력된다.
함수 선언을 생략해준다는 장점이 있다.
- map & Lambda
변수명 = map(lambda 변수명X: ('NEW1' if 변수명X['키 값'] (조건) else 'NEW2'), 리스트명A)
print(list(변수명))
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
]
EX)
result = map(lambda person: ('성인' if person['age'] > 20 else '청소년'), people)
print(list(result) # ['청소년','성인','청소년','청소년']
1) map 함수가
lambda 변수명X : ('NEW1' if 변수명X['키 값'] (조건) else 'NEW2') 를 함수로,
'리스트명A'를 리스트로 받았다.
( map 함수의 ( 함수, 리스트 ) 가 이해가 안된다면 위의 map을 다시 읽어보자. )
2) '리스트명A'에 있는 원소들을 하나씩 lambda의 매개변수인 '변수명X'에 넣은 후,
['키 값']에 맞는 ['밸류 값']인 인수로 치환하여 if문의 조건에 맞춰 반복문을 돌린다.
3) 조건을 충족한 뒤 결과들이 변수에 담겨 출력된다.
EX)
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
1)
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
# 직관적인 if문
2)
def check_adult(person):
return ('성인' if person['age'] > 20 else '청소년')
# 단축한 if문
result = map(check_adult, people)
print(list(result))
# ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']
1과 2는 같은 결과가 출력된다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
2)
def check_adult(person):
return ('성인' if person['age'] > 20 else '청소년')
result = map(check_adult, people)
# 2번과 map
3)
result = map(lambda person: ('성인' if person['age'] > 20 else '청소년'), people)
# map과 lambda식
print(list(result))
# ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']
- Filter & lambda
변수명 = filter(lambda 변수명X: 변수명X (조건), 리스트명A)
print(list(변수명))
map과 비슷하지만 True인 것만 출력한다. ( 참, 거짓을 가림 )
( 비교연산자, 논리연산자를 사용함, filter 앞 다른 함수와 혼용해서 사용 시 다른 연산도 가능 )
함수의 매개변수
: 매개변수 - 함수에 전달된 값을 저장하는 변수
: 인수 - 함수에 전달하는 값
def cal2(a, b=3): # a , b // 매개변수, b처럼 디폴트 값 지정 가능
return a + 2 * b
print(cal2(4)) #10
print(cal2(4, 2)) #8
print(cal2(a=6)) #12
print(cal2(a=1, b=7)) #15 // 인수에 들어간 값이 우선시 된다.
*args
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')
= arguments
매개변수를 지정하지 않고 모두 받는 방법. 관례적으로 args 라고 쓴다.
**kwargs
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob')
get_kwargs(name='john', age='27')
get_kwargs(name='anne', age='30')
= keyword arguments
키 : 밸류의 인수를 여러 개 받는 방법. 관례적으로 kwargs 라고 쓴다.
Class
: 같은 설정의 함수와 결과값을 출력하는 식을 모아두고 사용한다.
EX)
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack
if self.hp < 0:
self.alive = False
def status_check(self):
if self.alive:
print('살아있다')
else:
print('죽었다')
m = Monster() # m = '인스턴스'라고 부른다
m.damage(120)
m2 = Monster()
m2.damage(90)
m.status_check()
m2.status_check()