- 는 개념 정리
- 는 개인적으로 새롭게 알게 된 점
5-3. 함수 고급
- 튜플
- 람다
- 파일 처리
튜플
튜플(tuple)은 몇 가지 점을 제외하고는 리스트(list)와 거의 비슷함.
튜플과 리스트와의 차이
- 리스트는 [] 로 둘러싸지만, 튜플은 ()로 둘러쌈.
- 리스트는 그 값의 생성, 삭제, 수정이 가능하지만, 튜플은 그 값을 바꿀 수 없음.
튜플의 형태
t1 = ()
t2 = (1,)
t3 = (1,2,3)
t4 = 1,2,3
t5 = ('a', 'b', ('ab', 'cd'))
튜플의 특징
- t2 = (1, )처럼 단지 1개의 요소만을 가질 때는 요소 뒤에 콤마(,)를 반드시 붙여야 함.
- t4 = 1,2,3 처럼 괄호() 를 생략해도 무방함.
튜플과 리스트는 비슷한 역할을 하지만, 프로그래밍을 할 때 튜플과 리스트는 구별해서 사용하는 것이 유리함.
- 튜플: 프로그래밍이 실행되는 동안 그 값이 항상 변하지 않기를 바란다거나, 값이 바뀔까 걱정하고 싶지 않다면 튜플 사용
- 리스트: 수시로 그 값을 변화시켜야 할 경우라면 리스트 사용
실제 프로그램에서는 값이 변경되는 형태의 변수가 훨씬 많기 대문에 평균적으로 튜플보다는 리스트를 더 많이 사용함.
1. 리스트와 튜플의 특이한 사용
CODE
[a, b] = [10, 20]
(a, b) = (10, 20)
print(a)
print(b)
print(c)
print(d)
OUTPUT
10
20
10
20
2. 괄호가 없는 튜플
CODE
t1 = 10, 20, 30, 40
print(t1)
a, b, c = 10, 20, 30
print(a)
print(b)
print(c)
OUTPUT
(10,20,30,40)
10
20
30
3. 변수와 값을 교환하는 튜플
CODE
a, b = 10, 20
a, b = b, a
print(a)
print(b)
OUTPUT
20
10
+추가) 튜플이 값이 변경이 안된다는 것에 대한 의문
- list 처럼 값 '수정'은 안됨.
- 그러나, 아예 새롭게 값을 할당하는 것은 됨.
4. 튜플과 함수
CODE
def test():
return (10,20)
a, b = test()
print(a)
print(b)
OUTPUT
10
20
* emunerate()
for i, value in enumerate([1,2,3,4,5]):
print("{}번째 요소는 {}입니다.".format(i, value))
- i, value는 (i, value) 형태의 튜플에서 괄호를 제거한 것.
람다
일반 함수와 람다 함수
- 일반 함수: 함수를 이용하면 필요한 기능의 재사용이 가능함.
- 함수를 정의한 후 필요할 때마다 호출하여 사용
- 람다 함수: 가끔씩은 함수를 만들지 않고, 함수화된 기능만을 불러 사용하고자 할 경우가 있음.
- 프로그램을 단순하게 만들며,
- 1회용으로 함수를 만들고 싶은데, def 를 사용하여 이름을 짓는 것이 번거로울 수 있음.
람다 함수
- 람다, 람다 표현식이라고 불리우는 람다 함수는 이름이 없는 함수
- 익명 함수 (anonymous function)로 부르기도 함.
- 이름이 필요한 경우, 할당하여 사용할 수 있음.
- 주의: 표현식 안에서 새 변수를 선언할 수 없음.
- 반환값은 변수 없이 식 한줄로 표현할 수 있어야 하며, 복잡한 함수가 필요하면 def 함수로 정의하여야 함.
- return 문 필요 없음.
람다 함수는 위와 같은 방식으로 사용하기 보다는
* filter() 함수와 map() 함수에서 사용하는 함수임 *
filter()
- filter() 함수는 순환가능한 요소들을 필터 함수에 넣어, 그 리턴값이 참인 것만 묶어서 반환함.
- 즉, 여러 개의 데이터로부터 일부의 데이터만 추려낼 때 사용. 따라서, 여러 개의 데이터를 담고 있는 list나 tuple을 대상으로 주로 사용하는 함수.
filter(조건 함수, 순회 가능한 데이터)
- filter() 함수는 두 번째 인자로 넘어온 데이터 중에서 첫 번째 인자로 넘어온 조건 함수를 만족하는 데이터만을 반환.
- filter() 함수에서 False가 되는 값은 제외하고, return 값이 참인 값만 반환함.
- adult_func()는 필터함수로 여기서는 19세 이상의 나이만 True로 반환하고, 나머지는 False를 반환함. 따라서 리스트 원소 중 7, 11, 14는 가져오지 않음.
- 앞의 adult_func() 는 필터에서 사용할 1회용 함수로, 람다를 이용하여 단순화하는 것이 더욱 편리함.
- 간결하면서도, 핵심적인 알고리즘에 집중함.
- 한 번 사용한 후 뒤에는 사용 안함.
map()
- 리스트의 요소를 함수에 넣고, 리턴된 값으로 새로운 리스트를 구성해 주는 함수
- 열거 가능한 자료형의 각 요소들에 대해서 mapping 함수를 적용함.
- reversed() 함수와 마찬가지로,
- filter() 함수와 map() 함수는 '이터레이터(iterator)'를 반환하는 '제너레이터(generator)'임.
- list() 함수를 적용해서 강제로 리스트 자료형으로 변환해 출력함.
람다 함수 정리
- 람다 함수를 사용하면, 코드를 더 깔끔하게 작성할 수 있고, 함수가 매개변수로 넣어졌다고 확인하고 어떤 함수인지를 알기 위해 다시 찾아 올라가는 수고를 하지 않아도 됨.
- 매개변수가 여러 개인 람다도 가능!
lambda x, y: x * y
파일 처리
파일과 관련된 처리를 하는 함수는 표준 함수가 기본으로 제공됨.
파일은 크게 텍스트 파일과 바이너리 파일로 나뉘는데, 여기서는 '텍스트 파일'에 관련된 내용만 살펴봄.
- 텍스트 파일
- 바이너리 파일
파일 열고 닫기
- 파일을 열 때는 open() 함수 사용.
- 파일을 닫을 때는 close() 함수 사용.
파일 객체 = open(문자열: 파일 경로, 문자열: 읽기 모드)
모드 | 설명 |
w | write 모드 (새로 쓰기 모드) |
a | append 모드 (뒤에 이어서 쓰기 모드) |
r | read 모드 (읽기 모드) |
with 키워드
open() 함수와 close() 함수를 사용할 때, 파일을 열고, 닫지 않는 실수의 경우가 생김. 이런 실수를 방지하지 위해 with 키워드 기능이 생김.
with open(문자열: 파일경로, 문자열: 모드) as 파일 객체:
문장
- 이렇게 코드를 작성하면, with 구문이 종료될 때, 자동으로 파일이 닫힘.
파일에 텍스트를 쓸 때는 write() 함수를 사용함.
반대로 파일을 읽을 때는 read() 함수를 사용함.
파일 객체.read()
'Python Basic > 혼공파' 카테고리의 다른 글
[혼공파] Chapter 07 모듈 (0) | 2021.01.20 |
---|---|
[혼공파] Chapter 06 예외 처리 (0) | 2021.01.13 |
[혼공파] Chapter 05 ②함수의 활용 (0) | 2021.01.12 |
[혼공파] Chapter 05 함수 ①함수 만들기 (0) | 2021.01.12 |
[혼공파] Chapter 04 반복문 ④문자열, 리스트, 딕셔너리와 관련된 기본 함수 (0) | 2021.01.12 |