Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Nonamed Develog

[TIL][240717] 파이썬 문법 빈틈을 메꾸자! (2) 본문

WHAT I LEARN/TIL

[TIL][240717] 파이썬 문법 빈틈을 메꾸자! (2)

노네임드개발자 2024. 7. 17. 21:02

오늘은 어제에 이어서 스쿼드 세션에서 다룬 파이썬 문법을 정리하고자 한다. 잘 몰라서 외면했었던 내용이라 잘 정리하고 넘어가기 좋은 기회라 생각했다.

새로 알게 된 점은 무엇인가?

함수

- 전역변수(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() 함수가 작동되었다.


무엇을 느꼈고 내일은 무엇을 할까?

오늘 세션에서 파이썬 문법 말고도 알고리즘에 대해서 살짝 다뤘는데, 내일은 그 부분을 중점으로 공부하여 정리해보려 한다.