Jupyter Snippet CB2nd 02_py3

Jupyter Snippet CB2nd 02_py3

2.2. Using the latest features of Python 3

my_list = list(range(10))
print(my_list)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(*my_list)
0 1 2 3 4 5 6 7 8 9
print(*my_list, sep=" + ", end=" = %d" % sum(my_list))
0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
first, second, *rest, last = my_list
print(first, second, last)
0 1 9
rest
[2, 3, 4, 5, 6, 7, 8]
from math import pi, cos
α = 2
π = pi
cos(α * π)
1.000
a, b = 1, 2
f"The sum of {a} and {b} is {a + b}"
'The sum of 1 and 2 is 3'
def kinetic_energy(mass: 'kg',
                   velocity: 'm/s') -> 'J':
    """The annotations serve here as documentation."""
    return .5 * mass * velocity ** 2
annotations = kinetic_energy.__annotations__
print(*(f"{key} is in {value}"
        for key, value in annotations.items()),
      sep=", ")
mass is in kg, velocity is in m/s, return is in J
import numpy as np
M = np.array([[0, 1], [1, 0]])
M * M
array([[0, 1],
       [1, 0]])
M @ M
array([[1, 0],
       [0, 1]])
def gen1():
    for i in range(5):
        for j in range(i):
            yield j
def gen2():
    for i in range(5):
        yield from range(i)
list(gen1())
[0, 0, 1, 0, 1, 2, 0, 1, 2, 3]
list(gen2())
[0, 0, 1, 0, 1, 2, 0, 1, 2, 3]
import time

def f1(x):
    time.sleep(1)
    return x
%timeit -n1 -r1 f1(0)
1 s ± 0 ns per loop (mean ± std. dev. of 1 run,
    1 loop each)
%timeit -n1 -r1 f1(0)
1 s ± 0 ns per loop (mean ± std. dev. of 1 run,
    1 loop each)
from functools import lru_cache

@lru_cache(maxsize=32)  # keep the latest 32 calls
def f2(x):
    time.sleep(1)
    return x
%timeit -n1 -r1 f2(0)
1 s ± 0 ns per loop (mean ± std. dev. of 1 run,
    1 loop each)
%timeit -n1 -r1 f2(0)
6.14 µs ± 0 ns per loop (mean ± std. dev. of 1 run,
    1 loop each)
from pathlib import Path
p = Path('.')
sorted(p.glob('*.md'))
[PosixPath('00_intro.md'),
 PosixPath('01_py3.md'),
 PosixPath('02_workflows.md'),
 PosixPath('03_git.md'),
 PosixPath('04_git_advanced.md'),
 PosixPath('05_tips.md'),
 PosixPath('06_high_quality.md'),
 PosixPath('07_test.md'),
 PosixPath('08_debugging.md')]
_[0].read_text()
'# Introduction\n\n...\n'
[d for d in p.iterdir() if d.is_dir()]
[PosixPath('images'),
 PosixPath('.ipynb_checkpoints'),
 PosixPath('__pycache__'),
list((p / 'images').iterdir())
[PosixPath('images/github_new.png'),
 PosixPath('images/folder.png')]
import random as r
import statistics as st
my_list = [r.normalvariate(0, 1)
           for _ in range(100000)]
print(st.mean(my_list),
      st.median(my_list),
      st.stdev(my_list),
      )
0.00073 -0.00052 1.00050