Nonamed Develog
[TIL][240717] 파이썬 문법 빈틈을 메꾸자! (2) 본문
오늘은 어제에 이어서 스쿼드 세션에서 다룬 파이썬 문법을 정리하고자 한다. 잘 몰라서 외면했었던 내용이라 잘 정리하고 넘어가기 좋은 기회라 생각했다.
새로 알게 된 점은 무엇인가?
함수
- 전역변수(Global variable): Global scope에 위치한 변수는 바뀌지 않는다면 따로 지정할 필요가 없지만, 바뀌게 된다면 local scope에서도 명확하게 지정해야 한다.
cf) nonlocal: 지역변수가 아님을 선언. 함수 바로 한 단계 바깥쪽에 위치한 변수를 명시할 수 있다.
a = 0
b = 1
def func01():
global a # a += 10처럼 변경되므로 global a를 명시해 줌
a += 10
def func01():
print(a)
'''
하지만 현직에서 global은 사용하지 않는 편이다.
아래 코드가 더 좋은 코드
'''
def func01():
a += 10
return a
map(): 리스트의 요소를 지정된 함수로 처리해 주는 함수
cf) filter(): map과 비슷하게 작동되고 filter(odd, numbers)로 쓰이고 list로 감싸줘야 한다.
a = [1.2, 2.5, 3.7, 4.6]
for i in range(len(a)):
a[i] = int(a[i])
a = list(map(int, a))
# [1, 2, 3, 4]
# [1, 2, 3, 4]
여기서 map()를 list로 형 변화한 것이다. list()로 감싸지 않으면 'map object at xxxxx'라는 메시지를 출력한다. 이는 map 형태로 출력이 되었다는 의미이고 우리가 원하는 list 형식으로 만들기 위해 list()로 감싸줘야 한다.
lambda 함수(aka 독극물2): 무명함수(익명함수)라고 하며 일반적으로 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 사용된다.
# lambda 인자 : 표현식
# 3각형 면적
# 1
def triangle(b, h):
return 0.5 * b * h
# 2
triangle = lambda b, h: 0.5 * b * h
- map() 함수, filter() 함수, sorted() 함수, reduce() 함수와 같이 사용하여 코드를 간결하게 작성할 수 있다.
mylist = [1, 2, 3, 4, 5] # 각 요소에 2를 곱해보자!
mylist2 = list(map(lambda x: x * 2, mylist))
print(mylist2)
# [2, 4, 6, 8, 10]
mylist2 = list(filter(lambda x: x % 2 == 1, mylist))
print(mylist2)
# [1, 3, 5]
mylist = ['apple', 'banana', 'cherry']
mylist2 = sorted(mylist, key=lambda x: len(x))
print(mylist2)
# ['apple', 'cherry', 'banana']
from functools import reduce
mylist = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x * y, mylist)
print(result)
# 120
패킹(packing) - *args & **kwargs
*args: 함수에서 여러 개의 매개변수를 쓰기 위해 사용한다.
def numbers(num, *args):
print(num, args)
numbers('수', '1')
numbers('수', '1', '2', '3', '4')
# 수 ('1',)
# 수 ('1', '2', '3', '4')
*args로 받은 매개변수는 튜플로 출력이 된다. 여기서 *args와 num의 위치를 변경한다면 *args의 범위를 알 수 없어서 오류가 나온다. *args는 범위가 명확하게 위치시켜야 한다.
**kwargs: 키워드 = 특정값 형태로 함수를 호출할 수 있다.(딕셔너리로 출력)
def numbers(num, *kwargs):
print(num, kwargs)
numbers('수', 하나 = '1', 둘 = '2', 셋 = '3', 넷 = '4')
# 수 {'하나': '1', '둘': '2', '셋': '3', '넷': '4'}
*args + **kwargs: 둘을 같이 사용하려면 범위를 명확하게 하기 위해 *가 **보다 무조건 앞에 있어야 한다.
def numbers(num, *args, **kwargs):
print(num, args, kwargs)
numbers('수', '열', '백', '천', 하나 = '1', 둘 = '2', 셋 = '3', 넷 = '4')
# 수 ('열', '백', '천') {'하나': '1', '둘': '2', '셋': '3', '넷': '4'}
언패킹(unpacking):
- 패킹은 여러 매개변수를 하나로 만들어서 사용했지만 언패킹은 여러 매개변수를 포함하는 하나의 객체를 여러 개로 풀어주는 방법이다.
- 패킹은 매개변수 앞에 *를 사용했다면 언패킹은 인수 앞에 *을 사용한다.
def sum(a, b, c):
return a + b + c
n = [1, 2, 3]
print(sum(*n))
# 6
n은 리스트이지만 *을 넣어서 언패킹이 되어 sum() 함수가 작동되었다.
무엇을 느꼈고 내일은 무엇을 할까?
오늘 세션에서 파이썬 문법 말고도 알고리즘에 대해서 살짝 다뤘는데, 내일은 그 부분을 중점으로 공부하여 정리해보려 한다.
'WHAT I LEARN > TIL' 카테고리의 다른 글
[TIL][240719] 파이썬 문법 빈틈을 메꾸자 (4) (2) | 2024.07.20 |
---|---|
[TIL][240718] 파이썬 문법 빈틈을 메꾸자 (3) (0) | 2024.07.18 |
[TIL][240716] 파이썬 문법 빈틈을 메꾸자! (0) | 2024.07.16 |
[TIL][240715] ASCII(아스키코드), string 모듈 (0) | 2024.07.15 |
[TIL][240712] 컴퓨팅 사고(Computational Thinking), 슈도 코드(pseudo code) (0) | 2024.07.13 |