1. 튜플 tuple
📁 리스트와 비슷한 자료형이나 한번 결정된 요소를 바꿀 수 없다는 것이 다르다.
➡️ 이미 저장된 값 이외에는 추가, 수정, 삭제가 불가능
📁 리스트와 마찬가지로 각 요소를 구분하기 위한 인덱스가 부여되고 슬라이싱도 지원
📁 튜플은 소괄호() 나 tuple() 함수를 이용해서 생성
📁 값들을 콤마(,)로 분리하여 전달하면 자동으로 튜플이 생성
t1 = (1,2,3)
print(t1) # (1,2,3)
# 괄호 없이 사용 가능
t2 = 1,2,3
print(t2) #(1,2,3)
def sample():
return (1,2)
print(sample()) #(1, 2)
# 값이 2개 반환된 것이 아니라 튜플을 자동으로 적용해서 반환함
# 리스트를 튜플로 변경
t3 = tuple([100, 3.14, 'hello'])
print(t3) # (100, 3.14, 'hello')
# 값을 1개만 보관하는 튜플을 생성할 경우에는 값과 콤마(,)를 반드시 함께 작성
t4 = (100)
print(t4) # 100 / 값으로 인식
print(type(t4)) # <class 'int'>
t5 = (100, )
print(t5) # (100, ) / 튜플로 인식
print(type(t5)) # <class 'tuple'>
# 값을 swap 교환
a = 10
b = 20
print(a, b) # 10 20
a, b = b, a # (a, b) = (b, a)
print(a, b) # 20 10
a, b = 100, '홍길동'
print(a) # 100
print(b) # 홍길동
2. 람다 lambda
📁 함수를 짧게 쓸 수 있는 파이썬의 문법
1) 콜백 함수 callback function
⚡️ 함수의 매개변수에 사용하는 함수
# 매개변수로 받은 함수를 10번 호출하는 함수
def call_10_times(func):
for i in range(10):
func()
# 간단한 출력하는 함수
def print_hello():
print("안녕하세요")
# 조합하기
call_10_times(print_hello)
# -> print_hello() 함수를 10번 실행
2) filter() 함수와 map() 함수
⚡️ 함수를 매개변수로 사용하는 대표적인 표준함수
⚡️ map() 함수는 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 구성
⚡️ filter() 함수는 리스트의 요소를 함수에 넣고 리턴된 값이 True인 것으로, 새로운 리스트를 구성
# map()
map(함수, 리스트)
# filter()
filter(함수, 리스트)
def power(item):
return item * item
def under_3(item):
return item < 3
list_input_a = [1, 2, 3, 4, 5]
# map() 사용
output_a = map(power, list_input_a)
print(output_a) # <map object at 0x104c228f0>
print(list(output_a)) # [1, 4, 9, 16, 25]
# filter() 사용
output_b = filter(under_3, list_input_a)
print(output_b) # <filter object at 0x104c22800>
print(list(output_b)) # [1, 2]
👾 <map object> 와 <filter object> 를 제너레이터라고 부른다.
3) 람다의 개념
⚡️ 간단한 함수를 쉽게 선언하는 방법을 뜻함
# 기본형식
lambda 매개변수: 리턴값
list_input_a = [1, 2, 3, 4, 5]
# map() 함수
output_a = map(lambda x: x * x, list_input_a)
print(output_a) # <map object at 0x102d12860>
print(list(output_a)) # [1, 4, 9, 16, 25]
# filter() 함수
output_b = filter(lambda x: x < 3, list_input_a)
print(output_b) # <filter object at 0x102d61810>
print(list(output_b)) # [1, 2]
3. 제너레이터 generator
📁 이터레이터를 직접 만들 때 사용하는 코드
📁 함수 내부에 yield 키워드를 사용하면 해당 함수는 제너레이터 함수가 된다.
📁 일반 함수와 달리 함수를 호출해도 함수 내부의 코드가 실행되지 않는다.
def test():
print("함수가 호출되었습니다")
yield "test"
print("A 지점 통과") # A 지점 통과
test()
print("B 지점 통과") # B 지점 통과
test()
print(test()) # <generator object test at 0x104ceda10>
📌 위 예제에서 test()함수는 출력되지 않고, 제너레이터를 리턴한다.
📌 제너레이터 객체는 next() 함수를 사용해 함수 내부 코드를 실행한다.
➡️ 이때 yield 키워드 부분까지만 실행하며, next() 함수의 리턴값으로 yield 키워드 뒤에 입력한 값이 출력된다
def test():
print("A 지점 통과")
yield 1
print("B 지점 통과")
yield 2
print("C 지점 통과")
output = test()
# next() 함수 호출
print("D 지점 통과")
a = next(output)
print(a)
print("E 지점 통과")
b = next(output)
print(b)
print("F 지점 통과")
c = next(output)
print(c)
next(output)
📌 next() 함수를 호출할 때마다 함수 내부의 내용이 진행
📌 next() 함수를 호출한 이후 yield 키워드를 만나지 못하고 함수가 끝나면 StopIteration 이라는 예외가 발생
[ 내용참고 : 책 '혼자 공부하는 파이썬' ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 외부 모듈(external module), 라이브러리와 프레임워크, 데코레이터 (0) | 2024.03.03 |
---|---|
[Python] 모듈(module), math, random, datetime, time (0) | 2024.03.03 |
[Python] 재귀함수, 피보나치 수열, 메모화, 리스트 평탄화 (0) | 2024.03.02 |
[Python] 함수(function), 인수와 매개변수, 리턴(return) (0) | 2024.03.02 |
[Python] 내장 함수 (built-in function) - 문자/숫자/시퀀스, 리스트 내포, 이터레이터 (iterator) (0) | 2024.03.02 |