일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- python
- 스파르타내일배움캠프
- github
- 라이엇
- greedy
- 장고
- 코딩테스트
- 코딩테스트준비
- java
- SQL
- 내일배움캠프
- programmers
- 스파르타내일배움캠프TIL
- 파이썬
- lol
- 백준
- 그리디
- 알고리즘
- 자바
- API
- 롤
- 그리디알고리즘
- 탐욕알고리즘
- sort
- 리그오브레전드
- Django
- 프로그래머스
- Riot
- git
- drf
- Today
- Total
Lina's Toolbox
파이썬 문법 심화 / 튜플, 집합(Set), f-string, 파일 불러오기, map, filter, lambda, *args, **kwargs 등 본문
파이썬 문법 심화 / 튜플, 집합(Set), f-string, 파일 불러오기, map, filter, lambda, *args, **kwargs 등
Woolina 2024. 7. 8. 13:07
튜플 (tuple)
리스트와 비슷하지만 불변인 자료형(무언가를 더하거나 뺄 수 없다.)
순서는 존재한다.
a = (1,2,3)
print(a[0])
# 예를 들어 이런 작업은 불가함!!
a = (1,2,3)
a[0] = 99
# 주로 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓰임
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)
#교집합 / 합집합 / 차집합
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']
a_set = set(a)
b_set = set(b)
print(a_set & b_set) # 교집합
print(a_set | b_set) # 합집합
print(a_set-b_set) # 차집합
예외처리
try - except 문
에러가 있어도 건너뛰게 할 수 있는 방법 -> 에러가 나더라도 코드가 멈추지 않고 실행 될 수 있다.
어떤 에러가 발생하는 지에 따라서도 다른 처리를 할수 있다.
📌 실무에서
서버콜 할 때 자주 사용한다.
많이 사용하면, 어디서 에러가 났는 지 파악이 힘들어지므로, 실제 프로젝트에서는 남용 ❌
# 딕셔너리에 없는 key로 추출하면 에러가 발생한다.
# bobby는 다음과 같이 age가 없는 상황
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby'},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for person in people:
try: # 이걸 시도해보고
if person['age'] > 20:
print (person['name'])
except: # 에러가 있으면 이걸 대신 실행해!
name = person['name']
print(f'{name} - 에러입니다')
파일 불러오기
코드를 여러개의 파일로 분리할 수 있다.
분리하고 싶은 코드를 복사하여 새로운 파일(ex.main_func.py)을 만든 후 거기에 내용을 붙여넣고,
main_test.py
from main_func import *
say_hi()
*란 해당 파일 전체를 사용하는 것
from main_func import say_hi_to
def say_hi():
print('안녕!')
이와 같이 특정함수만 사용할 수도 있지만,
90% 이상 보통 import *를 사용한다.
한 줄 축약
if문 - 삼항연산자
참일 때 값 if 조건 else 거짓일 때 값
num = 3
if num%2 == 0:
result = "짝수"
else:
result = "홀수"
print(f"{num}은 {result}입니다.")
이 코드를
num = 3
result = "짝수" if num%2 == 0 else "홀수"
print(f"{num}은 {result}입니다.")
이렇게 적는 것!
for 문
a_list = [1, 3, 2, 5, 1, 2]
b_list = []
for a in a_list:
b_list.append(a*2)
print(b_list)
이 코드를
a_list = [1, 3, 2, 5, 1, 2]
b_list = [a*2 for a in a_list]
print(b_list)
이렇게 적을 수 있다.
map
map(function, iterable)
- function: 함수
- iterable: 반복 가능한 객체
두 번째 인자로 들어온 반복 가능한 자료형 (리스트나 튜플)을 첫 번째 인자로 들어온 함수에 하나씩 집어넣어서 함수를 수행하는 함수
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
lambda
이름이 없는 함수. 일반적으로 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 사용
lambda 인자 : 표현식
def add(x, y):
return x + y
add = lambda x, y: x + y
관용적으로 x로 사용
map 함수와의 사용
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
이 코드도
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
이렇게 작성할 수 있다.
filter
리스트의 모든 원소 중 특별한 것만 뽑기
꼭 list()로 감싸준 뒤 출력해야함!
1. lambda와 사용
#20보다 큰 요소만 뽑기
result = filter(lambda x: x['age'] > 20, people)
print(list(result))
# list(result) - list로 묶어주지 않으면 그냥 오브젝트 id로 나온다.
2. 사용자 정의 함수를 사용
def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(is_even, numbers))
print(even_numbers) # 출력: [2, 4, 6, 8, 10]
3. 내장함수를 사용
filter 함수는 None을 첫 번째 인수로 사용할 때, 이터러블에서 False인 값을 제거하는 역할을 할 수 있다.
values = [0, 1, False, 2, '', 3, None, 4, 'five']
filtered_values = list(filter(None, values))
print(filtered_values) # 출력: [1, 2, 3, 4, 'five']
오브젝트
파이썬에서 "오브젝트(object)"는 파이썬 프로그램 내에서 사용할 수 있는 모든 데이터를 의미한다.
파이썬의 모든 데이터는 객체!
여기에는 숫자, 문자열, 리스트, 딕셔너리, 함수, 클래스 인스턴스 등이 포함된다.
객체의 특성 세 가지
- 타입(type): 객체는 특정 데이터 타입을 가집니다. 예를 들어, 정수는 int 타입이고, 문자열은 str 타입입니다.
- 속성(attributes): 객체는 관련된 데이터를 가질 수 있습니다. 예를 들어, 리스트 객체는 특정 인덱스에 접근할 수 있는 속성을 가집니다.
- 메서드(methods): 객체는 해당 객체에 관련된 동작(함수)을 가질 수 있습니다. 예를 들어, 리스트 객체는 append() 메서드를 통해 요소를 추가할 수 있습니다.
함수의 매개변수
* 직접 쓰는 것보단 알고 있으면 내장함수 등을 사용할 때 도큐먼트를 읽는 데 도움이 되는 내용들
# 함수에 인수를 넣을 때, 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있다. 순서 상관 없음!
def cal(a, b):
return a + 2 * b
print(cal(3, 5))
print(cal(5, 3))
print(cal(a=3, b=5))
print(cal(b=5, a=3))
#특정 매개변수에 디폴트 값을 지정해줄 수 있다.
def cal2(a, b=3):
return a + 2 * b
print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))
몇 개의 인자를 받을지 알 수 없을 때 / 위치 인수들을 튜플 형태로 받기 *args
# 입력값의 개수를 지정하지 않고 모두 받는 방법!
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')
💡 args가 아닌 어떤 단어를 넣어도 상관없지만, 관용적으로 arguments의 args를 사용한다.
몇 개의 인자를 받을지 알 수 없을 때 / 키워드 인수들을 딕셔너리 형태로 받기 **kwargs
#키워드 인수를 여러 개 받는 방법!
def example_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
example_function(name="Alice", age=30) # 출력: name: Alice age: 30
example_function(country="USA", hobby="reading") # 출력: country: USA hobby: reading
딕셔너리로 쓸 수 있게 만들어준다!
💡 마찬가지로 다른 단어도 상관 없지만, 관례적으로 keyword arguments의 kwargs
클래스
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.damage(120)
m2 = Monster()
m2.damage(90)
m.status_check()
m2.status_check()