Python

Python 기초 ~ 심화 문법 2.

Sehe_e 2023. 3. 21. 22:26

튜플 / 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()