어제에 이어 파이썬(Python) 기초 문법에 대해 추가로 공부하였다.
1. map, lambda, filter
people = [
{'name': '라쿤', 'age': 20},
{'name': '너구리', 'age': 38},
{'name': '엄준식', 'age': 7},
{'name': '준식이', 'age': 17},
{'name': '진우', 'age': 27},
{'name': '지누', 'age': 52},
{'name': '알밥', 'age': 32},
{'name': '우진', 'age': 25}
]
# 1) map
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
# return ('성인' if person['age'] > 20 else '청소년') 로 줄일 수 있다.
result = map(check_adult, people)
# people을 하나씩 돌면서 해당되는 값을 check_adult에 넣는다.
print(list(result))
# 해당 return값을 list의 형태로 넣는다.
# 2) lambda
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
# 3) filter
result = filter(lambda x: x['age'] > 20, people)
print(list(result))

1) map
map은 리스트의 요소들을 함수의 형태로 처리해주는 함수이다.
해당 people에 들어있는 요소들에 대한 'age' 값을 찾은 다음 조건문(if)에 따라 처리해주고, 조건에 해당되는 값을 check_adult에 넣은 뒤 result = map(check_adult, people)을 통해 하나씩 찾는다.
그리고 찾은 해당 값을 result에 넣은 뒤 list의 형태로 보면 해당 결과를 볼 수 있었다.
2) lambda
lambda는 길어지는 코드에 간결함을 줘 좀 더 편하게 코드를 짤 수 있게 해 준다.
따로 def(함수) 선언을 해주지 않아도 lambda(매개변수:결과)의 형태로 짧게 만들 수 있다.
해당 map에서 다룬 함수의 형태를 lambda를 통해 (lambda x: ('성인' if x['age'] > 20 else '청소년'), people)과 같이 짧게 다루고, 똑같이 출력되는 것을 볼 수 있다.
3) filter
filter는 다수의 데이터로부터 일부의 데이터만 가져올 때 사용한다.
코드에서 보면 알 수 있듯이 lambda를 사용하긴 했지만 해당 조건에 맞는 필요한 데이터들을 뽑아내어 리스트의 형태로 출력해주는 것을 볼 수 있다. filter(lambda x: x['age'] > 20, people)을 통해 age가 20이 안 되는 데이터만 뽑아서 출력하는 것을 볼 수 있다.
2. 함수 심화
# 함수 심화
# 함수의 매개변수
def cal(a,b): # 1) 만약 기본값을 지정해주더라도,
return a+2*b
result = cal(1,3) # 2) 밑에 넣어준 값이 3이므로 넣어준 값으로 지정된다.
print(result)
def what(*args): # 변수 인자를 무한으로 넣을 수 있음
for name in args:
print(f'{name}야, 뭐해?') # f string 사용
what('지누','너구리','엄준식')
# 키워드 인수 여러개 받기 (라이브러리에서 많이 사용)
def keyword(**kwargs): # 딕셔너리의 형태로 넣을 수 있다.
print(kwargs)
keyword(name='엄',age=32, height=175)

다음은 함수를 사용하여 조금 더 나아간 심화 과정이다.
def cal(a,b):를 미리 선언해 주었지만, 밑에 result = cal(1,3)으로 인하여 a에 1을 넣어주고 b에 3을 넣어주고 해당 함수의 값인 1+2*3의 결과를 반환(return) 받아 해당 결과가 출력되는 것을 볼 수 있었다.
def what(*args)에서 *args를 통해 변수 인자를 계속 넣어주고, what에 해당되는 args의 안에 '지누', '너구리', '엄준식'의 문자열을 넣어주었다.
해당 문자열의 수만큼 반복(for)되고, f_string을 사용하여 args에 담긴 문자들을 하나씩 출력해주는 것을 볼 수 있다.
마지막으로 def keyword(**kwargs)에서 **kwargs를 통해 keyword에 해당되는 값들을 딕셔너리의 형태로 넣어준 뒤 출력하는 것을 볼 수 있다.
3. 클래스(Class)
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack # 해당 함수 안에서 클래스 내 hp를 가르킬 수 있음
if self.hp < 0:
self.alive = False
def status_check(self):
if self.alive == True:
print('해당 몬스터는 살아있다.')
else:
print('해당 몬스터는 죽어있다.')
m1 = Monster()
m1.damage(110)
m1.status_check()
m2 = Monster()
m2.damage(80)
m2.status_check()

클래스(Class)는 왜 사용할까?
클래스는 코드가 중복되어 객체가 무한정 작성돼버리면 그 코드에는 오류가 자주 일어날 것이다.
이것을 방지하고자 클래스를 활용하여 중복되는 코드를 줄이고 해당 클래스 내에서 객체를 생성해주기만 하면 되기 때문에 다른 클래스의 객체들 간에 영향을 미치지 않을 수 있기 때문이다.
다음은 클래스의 예제이다.
여러 개의 객체를 지정하면 코드가 길어지고 가독성이 매우 떨어지기 때문에 Monster()를 이용하여 사용할 객체들을 묶어주었다.
그리고 m1 = Monster()와 m2 = Monster()를 이용하여 해당 클래스에 있는 객체들을 사용할 수 있게 되었고, 클래스 내 damage와 status_check 함수를 사용하여 해당 결과를 출력받을 수 있게 되었다.
-
오늘은 어제에 이어 파이썬 기초 문법에 대해 추가로 공부해보았다.
배운 내용의 심화 과정도 있었고, 이것저것 만들어보는 기회도 가져보면서 열심히 공부했다.
이후 공부를 하며 추가적으로 파이썬 게임 만들기라는 개인 프로젝트도 맡아 만들고 있었다.
잠시 만든 파이썬 게임 영상을 올려보고 이것들은 추후에 TIL에서 따로 자세하게 다뤄보고자 한다.
오늘도 열심히 공부하고 계속 발전해나가는 개발자가 되고 싶다.
:D
'TIL 및 WIL > TIL (Today I Learned)' 카테고리의 다른 글
| [TIL] 2022.04.28 (가위바위보 CLI게임, 인스타 UI 클론 코딩1) (1) | 2022.04.28 |
|---|---|
| [TIL] 2022.04.27 (Python 문법 연습, pygame 개인 프로젝트) (2) | 2022.04.27 |
| [TIL] 2022.04.25 (Python 문법 기초1) (0) | 2022.04.25 |
| [TIL] 2022.04.21 (팀 소개 웹 페이지 - 미니 프로젝트2) (0) | 2022.04.21 |
| [TIL] 2022.04.20 (팀 소개 웹 페이지 - 미니 프로젝트1) (1) | 2022.04.20 |