주로 Python3
가 open-source libraries
와 가장 호환성이 좋다. 그래서 필자는 Python3
을 적극 추천한다.
3.7
이다. 3.8
도 일부 있다.$ python --version
아래의 코드를 통해 확인할 수 있다.
import sys
print(sys.version)
또한 아래의 코드를 통해서 major, minor, micro 버전을 확인할 수 있는데
import sys
sys.version_info
sys.version_info.major
sys.version_info.minor
sys.version_info.micro
>>> sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)
>>> 3
>>> 5
>>> 2
Python Enhancement Proposal == 파이썬 개선 제안서
파이썬 코드를 어떻게 구성할지 알려주는 스타일 가이드
이다.
책에서 일부 설명한 rules가 있다.
PEP 8 에서는 이것 또한 특별한 스타일로 추천하고 있다.
"There should be one-and preferably only one-obivous way to do it"
이때 helper functions 을 통해서 convert한다.
def to_str(bytes_or_str):
if isinstance(bytes_or_str, bytes):
values = bytes_or_str, bytes):
else:
value = bytes_or_str
return value
def to_bytes(bytes_or_str):
if isintance(bytes_or_str, str):
value = bytes_or_str.encoude('utf-8')
else:
value = bytes_or_str
return value
a = 1234,5678
formatted = format(a, ',.2f')
print(formatted)
b = 'my string'
formatted =format(bm '^20s')
print('*', formatted, '*)
>>>
1,234.57
* my string *
key = 'my_var'
formatted = '{:<10} = {:.2f}'.format(key,value)
>>>
my_var = 1.23
red = my_values.get('red', [''])[0] or 0
green = my_values.get('green', [''])[0] or 0
opacity = my_values.get('opacity', [''])[0] or 0
print('Red : %r' % red)
print('Green : %r' % green)
print('Opacity : %r' % opacity)
Red : '5'
Green : 0
Opacity : 0
def get_first_int(values, key, defalut = 0):
found = values.get(key,[''])
if found[0]:
return int(found[0])
return defalut
snack_calories = {
'chips': 140,
'popcorn': 80,
'nuts': 190,
}
items = tuple(snack_calories.items())
print(items)
>>>
(('chips', 140), ('popcorn', 80), ('nuts), 190))
for rank, (name,calories) in enumerate(snacks, 1):
print(f'#{rank}: {name} has {calories} calories')
item 6번과 비슷한 맥락같아보인다.
range문 대신에 enumerate를 활용하자..
from random import randint
random_bit = 0
for i in range(64):
if randint(0, 1):
random_bit |= (1 << i)
print(random_bit)
>>> 13250328546979216565
flavor_list = ['vanilla', 'chocolate', 'pecan', 'strawberry']
for flavor in flavor_list:
print('{} is delicious'.format(flavor))
>>> vanilla is delicious
>>> chocolate is delicious
>>> pecan is delicious
>>> strawberry is delicious
for i in range(len(flavor_list)):
flavor = flavor_list[i]
print(f'{ i + 1}: {flavor}')
>>> 1 : vanilla
>>> 2 : chocolate
>>> 3 : pecan
>>> 4 : strawberry
for i, flavor in enumerate(flavor_list):
print('{index} : {flavor}'.format(
index=i + 1,
flavor=flavor))
>>> 1 : vanilla
>>> 2 : chocolate
>>> 3 : pecan
>>> 4 : strawberry
names = ['Park', 'Lee', 'Kim']
letters = [len(name) for name in names]
파이썬의 루프에는 추가적인 기능이 있는데 루프에서 반복되는 내부 블록 다음에 else블록을 쓸 수 있다
for i in range(3):
print('Loop {}'.format(i))
if i == 1:
break
else:
print('Else block!')
>>> Loop 0
>>> Loop 1
for x in []:
print('Never runs')
else:
print('Not else block!')
>>> Not else block!
while False:
print('Never runs')
else:
print('While else block!')
>>> While else block!
a := b
꼴로 활용되며 "a walrus b"라고 해석한다.이제 아래의 코드를 통해서 어떻게 쓰이는지 .. 확인할 수 있다
def make_lemonade(count):
...
def out_of_stock():
...
count = fresh_fruit.get('lemon',0)
if count:
make_lemonade(count)
else:
out_of_stock()
을
if count := fresh_fuit.get('lemon',0):
make_lemonade(count)
else:
out_of_stock()
bottles = []
while fresh_fruit := pick_fruit():
for fruit, count in fresh_fruit.items():
batch = make_juice(fruitm count)
bottles.extend(batch)