chapter05. 함수 (2)

728x90

 

1. 튜플

- 리스트와 비슷하지만 튜플은 한번 결정된 요소를 바꿀 수 없다.

- 요소를 하나만 가지는 리스트를 튜플로 만들게 되면 쉼표를 넣어 (1, )과 같이 선언하게된다.

tuple_1 = (1,2,3,4)

print(tuple_1[0])
print(tuple_1[2])

 

- 튜플에 괄호를 생략해도 튜플로 인식할 수 있는 경우 괄호를 생략해도 된다. 괄호 없이 여러 값을 할당 할 수 있다.

tuple_1 = 1, 2, 3, 4
print(tuple_1)
print()

a, b, c, d = 1, 2, 3, 4
print(a)
print(b)

 

- 튜플 변수의 값 교환하기

a, b, = 10, 20

#값을 교환
b, a = b, a
print(b)
print(a)

 

- 여러개의 값 리턴하기

def test():
    return(10, 20)

a, b = test()

print(a)
print(b)

 

- 튜플을 리턴하는 함수

for i, value in enumerate([1,2,3,4,5]):
    print("{}번째 요소는 {}입니다".format(i, value))

 

- 몫과 나머지를 구하는 divmod() 함수도 튜플을 리턴할 수 있다.

a, b = 200, 90

x, y = divmod(a, b)
print(x)
print(y)

 

2. 람다

 

- 함수의 매개변수로 함수 전달하기

def call_10(func):
    for i in range(10):
        func()


#출력하기
def print_call():
    print("하이")


#조합하기
call_10(print_call)

 

- filter() 함수와 map() 함수는 파이썬이 표준으로 제공하는 내장함수(표준함수)이다

def power(item):
    return item*item

def under_3(item):
    return item<3


list_input_a = [1,2,3,4]

output_a = map(power, list_input_a)
print(output_a)
print(list(output_a))

print()

output_b = filter(under_3,list_input_a)
print(output_b)
print(list(output_b))

결과로 나오는 <map object> 와 <filter object>를 제너레이터라고 부른다.

위 식을 람다로 바꾸면 아래와 같이 된다.

power = lambda x: x*x
under_3 = lambda x: x<3

list_input_a = [1,2,3,4]

output_a = map(power, list_input_a)
print(output_a)
print(list(output_a))

print()

output_b = filter(under_3, list_input_a)
print(output_b)
print(list(output_b))

위 함수를 더 깔끔하게 아래와 같이 적용 할 수 있다.

list_input_a = [1,2,3,4]


output_a = map(lambda x: x*x, list_input_a)
print(output_a)
print(list(output_a))

print()

output_b = filter(lambda x: x<3, list_input_a)
print(output_b)
print(list(output_b))

 

 

3. 파일처리

- 텍스트 파일과 바이너리파일로 나뉘는데 여기서는 텍스트파일만 다룬다.

#파일열기
파일객체 = open(문자열:파일경로, 문자열:읽기모드)
# w : 새로쓰기모드 / a : 뒤에서 이어서 쓰기 모드 / r : 읽기모드


#파일 닫기
파일 객체.close()

#텍스트 읽기
파일 객체.read()

#파일을 닫지 않는 실수를 방지하기위한 with 키워드
with open(문자열:파일경로, 문자열:모드) as 파일객체:
    문장

 

file= open("파이썬예제.txt", "w")

file.write("hello")

file.close()
with open("파이썬예제.txt", "w") as file:
    file.write(하이)
    
    
 with open("파이썬예제.txt", "r") as file:
    contents=file.read()
 
 print(contents)

 

- scv, xml, json 등으로 텍스트 읽기

import random

hanguls = list("가나다라마바사아")

with open("파이썬.text", "w") as file:
    for i in range(1000):
        name = random.choice(hanguls) + random.choice(hanguls)
        weight = random.randrange(40, 100)
        height = random.randrange(140, 200)

        file.write("{}, {}, {}, \n".format(name, weight, height))

 

4. 제너레이터

- 이터레이터를 직접만들때 사용할 수 있다. 함수 내부에 yield 키워드를 사용하면 해당 함수는 제너레이터 함수가 되며 함수를 호출해도 함수 내부 코드가 실행되지 않는다.

def test():
    print("함수출력")
    yield "test"


print("A지점 통과")
test()

print("b지점 통과")
test()
print(test())

test()의 print("함수출력") 이 출력되지 않는다.

제너레이터는 next() 함수를 사용해 내부 코드를 실행 할 수 있다

def test():
    print("A지점 통과")
    yield 1
    print("b지점 통과")
    yield 2
    print("c지점 통과")

output = test()

print("d지점 통과")
a = next(output)
print(a)
print("e지점 통과")
b = next(output)
print(b)

next(output)

 

- 콜백함수를 람다로 바꾸기

books = [{
    "제목":"제목1",
    "가격":10000
}, {
    "제목":"제목2",
    "가격":12000    
}]

print(min(books, key=lambda book:book["가격"]))
print()
print(max(books, key=lambda book:book["가격"]))

 

728x90

'스터디 > 혼자공부하는파이썬' 카테고리의 다른 글

chapter07. 모듈(1)  (0) 2024.04.23
chapter06. 예외처리  (0) 2024.04.20
chapter05. 함수 (1)  (0) 2024.04.17
chapter04. 반복문  (0) 2024.04.15
chapter03. 조건문  (0) 2024.04.15