[python]기초문법8
혼자 공부하는 파이썬 37강 - 튜플
다른 리스트와의 기본적인 차이
- 대괄호가 아니라 소괄호로 선언
- 한 번 선언하면 값을 바꿀 수 없음
a = (1, 2, 3, 4)
print(a[0]) #1
print(a[1]) #2
print(a[2]) #3
print(a[3]) #4
a[0] = 100 #TypeError
튜플을 사용하는 경우2. 스왑
a, b = 10, 20
print(a, b) # 10, 20
a, b = b, a
print(a, b) # 20 10
괄호가 없어도 튜플로 인식될 수 있다면 튜플이다
c, d = 30, 40
print(c, d) # 30, 40
for i, a in enumerate( [1, 2, 3, 4, 5] ):
# i, a 는 튜플이다.
튜플을 사용하는 경우3. 튜플을 리턴하는 함수
2개의 값을 리턴해야 할 때 튜플을 사용한다.
a, b = 97, 40
print(divmod(a,b)) # 2, 17
print(type(divmod(a,b))) # class 'tuple'
#divmod(a, b)는 a를 b로 나눈 몫과 나머지를 반환하는 함수
하나의 요소를 갖는 튜플
print(type((273,))) # class 'tuple'
딕셔너리의 키 값으로 튜플이 사용 가능하다
a = {
(0, 0) : 10,
(0, 1) : 20,
(1, 0) : 30,
(1, 1) : 40
}
print( a[ (0, 0) ] ) # 10
혼자 공부하는 파이썬 38강 - 콜백함수와 람다, map()/filter() 함수
- 콜백함수
- 함수에 다른 매개변수로 다른 함수를 전달하여 실행되게 하는 함수
def call_10_times(func):
for i in range(10):
func()
def print_hello():
print("안녕하세요")
call_10_times(print_hello)
콜백함수의 매개변수
def call_10_times(func):
for i in range(10):
func(i)
def print_hello(number):
print("안녕하세요", number)
call_10_times(print_hello)
- 람다
- 콜백함수를 사용하기위해 2개의 함수를 선언해야하는 코드의 낭비를 줄여준다
lambda parameter_list: expression
expression에는 한줄의 코드가 올 수 있고, 자동으로 return 된다
def call_10_times(func):
for i in range(10):
func(i)
def print_hello(number):
print("안녕하세요", number)
call_10_times(lambda number: print("안녕하세요", number))
람다를 사용하는 함수 : map(), filter()
filter() : filter함수의 매개변수를 사용할때는 리턴값이 boolean 이어야 한다.
def 짝수만(number):
return number % 2 == 0
a = list(range(100))
b = filter(짝수만, a)
print(b) # filter Object
사용 방법1.
반복문에 사용 가능하다
def 짝수만(number):
return number % 2 == 0
a = list(range(100))
b = filter(짝수만, a)
print(b) # filter Object
#반복문에 사용
for i in b:
print(i)
사용 방법2.
list로 바로 변환 시킬 수 있다
def 짝수만(number):
return number % 2 == 0
a = list(range(100))
b = filter(짝수만, a)
print(b) # filter Object
#반복문에 사용
for i in b:
print(i)
print(list(b))
람다로 변형
#def 짝수만(number):
#return number % 2 == 0
a = list(range(100))
b = filter(lambda number: number % 2 == 0, a)
람다를 변수에 저장가능하다
짝수만 = lambda number: number % 2 == 0
a = list(range(100))
b = filter(짝수만, a)
- map() 함수
- 한 리스트를 기반으로 새로운 리스트를 만들어준다.
def 제곱(number):
return number * number
a = list(range(100))
print(list(map(제곱,a)))
람다로 변형
#def 제곱(number):
#return number * number
a = list(range(100))
print(list(map(lambda number: number * number,a)))
map()이 어떤 리스트를 기반으로 새로운 리스트를 만들어주는 함수라고했는데,
왜 다시 list()로 감싸줘야하는지 이해는 잘 안된다
리스트 내포와 비교
print([i * i for i in a if i % 2 == 0]) #filter()와 map()을 동시에 적용한 것
리스트 내포를 사용하는 경우, 결과로 리스트가 나온다.
즉 그만큼 리스트가 하나 더 복제되서 메모리를 차지한다는 의미이다.
map(), filter() 함수 등은 제너레이터 함수라서 내부의 데이터가 실제로 메모리에 용량을 차지하는 것들이 아니다.
실제로 호출이 되기 전까지는 가상의 값과 같기때문.
혼자 공부하는 파이썬 39강 - 텍스트 파일 처리 기본
파일을 읽고 쓰는 코드
open() 은 file Object를 생성
file = open("test.txt","w") #"w"는 새 파일 생성, "a"는 존재하는 파일의 뒷부분에 덧붙이는 모드
file.write("hello world !")
file.close() #close()를 하지않으면 이후에 다른 사람이 파일을 열 수 없다.
file = open("test.txt","r")#"r"은 파일을 읽는 모드
print(file.read())
file.close()
- with 구문
- 특정범위에서 파일을 읽고 쓴 후 자동으로 close()를 호출함
with open("test.txt","a") as file:
file.write("hello world !")
Leave a comment