리스트와 비슷한 구조의 자료형. 한 번 정해진 값을 외부에서 수정할 수 없다.
tuple_a = (data, data1, data2, ...)
# list와 마찬가지로 인덱스를 통해 접근할 수 있다
tuple_a[0]
tuple_a[1]
tuple_a[2]
...
# 하지만 요소 접근 연산자를 통해 값을 수정하는 것은 불가능하다
tuple_a[2] = 0
>>
Traceback (most recent call last)
TypeError: 'tuple' object does not support item assignment
# 값을 바꾸려면 직접 바꿔야 한다
tuple_a = (data, data1, dota2, ...)
튜플의 요소를 하나만 가지고 선언할 때
tuple_a = (1,
)
반드시 끝에,
를 붙여줘야 한다
RETURN
할 수 있게 해준다튜플의 신기한 점 몇 개를 알아두자.
tuple_test = 10, 20, 30, 40
# 그냥 나열해준 거지만 이게 튜플이 된다
print(tuple_test)
>>
(10, 20, 30, 40)
a, b, c = 10, 20, 30
# 마찬가지로 오른쪽에 나열해놓은 10, 20, 30이 묶여서 (10, 20, 30) 즉, 튜플이 된다
print(a)
print(b)
print(c)
>>
10
20
30
변수의 값도 너무 쉽게 바꿔준다. 로직을 파괴하는 수준.
a, b = 10, 20
a, b = b, a
print("a:",a)
print("b:",b)
>>
a: 20
b: 10
충격적이다.
함수의 RETURN
시에도 쏠쏠하다.
def test():
return (10, 20)
# 이렇게 튜를로 리턴하고 값을 받으면
a, b = test()
print("a:", a)
print("b:", b)
>>
a: 10
b: 20
a = test()
print("a:", a)
a: (10, 20)
나눠 주면 나눠 주는 대로
퍼주면 퍼주는 대로
알아서 잘 먹는 것을 볼 수 있다.
함수의 일종이다. 매개변수로 함수 그 자체를 받는 것이 특징이다.
기능 자체를 매개변수로 하는 것이다.
코드를 보면서 이해하는 게 빠르다.
# call_x_time 함수는, 매개변수로 함수와 횟수를 받는다
def call_x_times(func, 횟수):
# 횟수 만큼 반복문을 시행하는데
for i in range(횟수):
# 그 내용은 매개변수로 받은 함수의 실행이다
func()
def hello():
print("hello world!")
# hello() 함수의 기능을 3회 반복
call_x_times(hello, 3)
>>
hello world!
hello world!
hello world!
위와 같이 사용한다.
객체와 객체를 적절하게 연결해주는 역할을 하는 것 같다.
filter()
함수filter()
는 '리스트의 요소'를 함수에 넣고, 리턴된 값이 True
인 것들로 새로운 리스트를 구성해준다내장 함수 == 표준 함수 == Built-in 함수: Python 설치 시 기본적으로 내장된 함수
무슨 말인지 잘 모르겠다. 코드로 본다.
# 매개변수의 값이 3보다 작으면 리턴하는 함수
def under_3(item):
return item < 3
# 리스트
list_a = [1, 2, 3, 4, 5]
# filter()함수에서 under_3 함수와 list_a 데이터를 매개변수로 받음
output_filter = filter(under_3, list_a)
# list_a의 요소 하나하나를 under_3()함수에 넣고 돌린 후 그 리턴값들을 다시 리스트로 반환
print(output_filter)
list(output_filter)
>>
<filter object at 0x107c4ada0>
[1, 2]
filter()
의 두 번째 매개함수에 List
가 아니라 Tuple
을 넣을 수도 있다filter()
에서 첫 번째 매개변수로 받는 함수에서 처리 가능한 자료형이라면 처리해 준다map()
함수map()
은 '리스트의 요소'를 함수에 넣고 리턴된 값이 True
인 것들으로 새로운 리스트를 구성해준다# 매개변수를 받아서 제곱하여 반환하는 함수
def power(item):
return item * item
# 리스트
list_a = [1, 2, 3, 4, 5]
# map()함수는 리스트를 power()함수에 넣고 돌린다
output_a = map(power, list_a)
# power()함수에서 반환하는 값들 중 True인 것들로 새로운 리스트를 만들어 반환한다
print(output_a)
list(output_a)
>>
<map object at 0x10768da50>
Out[27]:
[1, 4, 9, 16, 25]
filter()
와 마찬가지로 Tuple
자료형을 넣어도 동일한 결과를 얻을 수 있다람다 함수를 약간 싸가지 없게(?) 사용하는 방법도 있다.
아래와 같다.
'인라인 람다'라고 부른다.
list_input = [1, 2, 3, 4, 5]
# 따로 람다 함수를 정의하지 않고 함수의 내부에 정의
# map()함수의 첫 번째 파라미터에 람다 함수 자체를 넣었다
# 두 번째 파라미터에서 들어오는 리스트의 요소요소를 바로 앞에 넣겠다는 뜻
output = map(lambda number: number * number, list_input)
print(output)
list(output)
>>
<map object at 0x10768ea40>
Out[30]:
[1, 4, 9, 16, 25]
두 함수 모두 <함수이름 object at 주소>형태의 객체를 만들어내는 것을 볼 수 있다.
얘를 제너레이터
라고 부른다.
iterator | generator |
---|---|
return | yield |
한꺼번에 반환 | 반환 후 호출 위치 다시 호출되어 반환 반복 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
이터레이터 | |||||||
제너레이터 | 제너레이터 | 제너레이터 | 제너레이터 | 제너레이터 | 제너레이터 | 제너레이터 | 제너레이터 |
next()
를 사용해 차례대로 데이터를 꺼내는 것은 동일하다다음은 radom()
함수의 응용부터 계속