Python_중급
Updated:
아스키 코드
- ord() : 문자의 아스키 코드 값을 가져온다
- chr() : 아스키 코드 값으로 문자를 가져온다
ord('A') # 65
chr(66) # B
isnumeric()
- a 문자가 숫자이면 True 숫자가 아니면 False
a = '1'
a.isnumeric() # True
b = 'a'
b.isnumeric() # False
lambda
- 함수를 만드는 또 다른 방식
- 함수의 이름이 없이 사용 가능
def square(x):
return x * x
# 위 아래는 동일함
square = lambda x: x * x
def _first_letter(string):
return string[0] if string else ''
# 위 아래는 동일함
first_letter = lambda string: string[0] if string else ''
sorted
def get_eng_title(row):
split = row.split(',')
return split[1]
# 위 아래는 동일함
# lambda를 사용해보자
get_eng_title = lambda row: row:split(',')[1]
sorted(movies, key = get_eng_title)
# or
sorted(movies, key = lambda row: row.split(',')[1])
assert()
- () 안의 값이 True이면 그냥 지나감
- () 안의 값이 False이면 정지함
def square1(x):
return x * x
square2 = lambda x: x * x
# 두 값이 같으면 통과, 아니면 에러
assert(square1(3) == square2(3))
함수를 리턴하는 함수
def adder(n):
def helper(x):
return x + n
return helper
add_three = adder(3)
print(add_three(6)) # 9
map()
- map(함수, 리스트)
- 리스트 안의 값들을 각각 함수를 적용해서 리스트로 준다
- map은 리스트를 만들지 않고 map이라는 타입을 가진다
- map의 내용을 사용할때 해당함수를 적용시켜서 보여준다
(효율적이다. 리스트보다 빠르다) - 결과물을 확인할때 list(type가 map인 데이터) ```python def get_eng_title(row): split = row.split(‘,’) return split[1]
eng_tities = [get_eng_title(row) for row in movies]
위와 아래는 같다
eng_titles = map(get_eng_title, movies)
위와 아래는 같다
* lambda를 사용해 함수를 단순화
* 위의 코드와 결과가 같다
```python
eng_titles = map(lambda row: row.split(',')[1], movies)
def get_eng_title(row):
split = row.split(',')
return split[1]
1.
[get_eng_title(row) for row in movies]
2.
map(get_eng_title, movies)
3.
[row.split(',')[1] for row in movies]
4.
map(lambda row: row.split(',')[1], movies)
# 위의 4가지 코드 모두 같은 코드이다
예제
books.csv 파일을 읽어서
책들의 제목을 리스트로 리턴하는 함수
# CSV 모듈을 임포트합니다.
import csv
def get_titles(books_csv):
with open(books_csv) as books:
reader = csv.reader(books, delimiter=',')
get_title = lambda row: row[0]
# get_title이라는 함수를 만들어준다
# row[0]번째를 가져온다
titles = map(get_title,reader)
# 모든 reader데이터에 get_title을 적용시켜준다
return list(titles)
books = 'books.csv'
titles = get_titles(books)
for title in titles:
print(title)
filter()
- filter(함수, 리스트)
- 리스트를 함수에 적용한후 True인 값을 가지는 리스트만 보여준다
- map과 비슷하게 filter 타입을 가진다
- 연산을 뒤로 미룬다
def starts_with_r(word):
return word.startswith('r')
r_words = filter(starts_with_r, words)
# 위와 아래는 같다
starts_with_r = lambda w: w.startswith('r')
words = ['real', 'man', 'rhythm',...]
r_words = filter(starts_with_r, words)
예제
books.csv 파일을 읽어서 페이지 수가 250이 넘는
책들의 제목을 리스트로 리턴하는
get_titles_of_long_books() 함수를 완성
# CSV 모듈을 임포트합니다.
import csv
def get_titles_of_long_books(books_csv):
with open(books_csv) as books:
reader = csv.reader(books, delimiter=',')
is_long = lambda row: int(row[3])>250
get_title = lambda row: row[0]
long_books = filter(is_long, reader)
long_book_titles = map(get_title, long_books)
return list(long_book_titles)
books = 'books.csv'
titles = get_titles_of_long_books(books)
for title in titles:
print(title)
divmod
quotient, remainder = divmod(20, 3)
print(quotient, remainder) # 6 2
Leave a comment