|
1960 | 1960 | </code></pre></div></div>
|
1961 | 1961 |
|
1962 | 1962 |
|
1963 |
| -<div><h2 id="curses"><a href="#curses" name="curses">#</a>Curses</h2><div><h4 id="runsabasicfileexplorerintheterminal">Runs a basic file explorer in the terminal:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">from</span> curses <span class="hljs-keyword">import</span> wrapper, ascii, A_REVERSE, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ENTER |
| 1963 | +<div><h2 id="curses"><a href="#curses" name="curses">#</a>Curses</h2><div><h4 id="runsabasicfileexplorerintheterminal">Runs a basic file explorer in the terminal:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">from</span> curses <span class="hljs-keyword">import</span> wrapper, ascii, A_REVERSE, KEY_DOWN, KEY_UP, KEY_LEFT, KEY_RIGHT, KEY_ENTER |
1964 | 1964 | <span class="hljs-keyword">from</span> os <span class="hljs-keyword">import</span> listdir, path, chdir
|
1965 | 1965 |
|
1966 | 1966 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">(screen)</span>:</span>
|
1967 | 1967 | ch, first, selected, paths = <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, listdir()
|
1968 | 1968 | <span class="hljs-keyword">while</span> ch != ascii.ESC:
|
1969 | 1969 | height, _ = screen.getmaxyx()
|
1970 |
| - screen.clear() |
| 1970 | + screen.erase() |
1971 | 1971 | <span class="hljs-keyword">for</span> y, filename <span class="hljs-keyword">in</span> enumerate(paths[first : first+height]):
|
1972 | 1972 | screen.addstr(y, <span class="hljs-number">0</span>, filename, A_REVERSE * (selected == first + y))
|
1973 | 1973 | ch = screen.getch()
|
|
2034 | 2034 | version = table.find(<span class="hljs-string">'th'</span>, text=<span class="hljs-string">'Stable release'</span>).next_sibling.strings.__next__()
|
2035 | 2035 | logo_url = table.find(<span class="hljs-string">'img'</span>)[<span class="hljs-string">'src'</span>]
|
2036 | 2036 | logo = requests.get(<span class="hljs-string">f'https:<span class="hljs-subst">{logo_url}</span>'</span>).content
|
2037 |
| - <span class="hljs-keyword">with</span> open(<span class="hljs-string">'test.png'</span>, <span class="hljs-string">'wb'</span>) <span class="hljs-keyword">as</span> file: |
| 2037 | + <span class="hljs-keyword">with</span> open(os.path.basename(logo_url), <span class="hljs-string">'wb'</span>) <span class="hljs-keyword">as</span> file: |
2038 | 2038 | file.write(logo)
|
2039 | 2039 | print(python_url, version)
|
2040 | 2040 | <span class="hljs-keyword">except</span> requests.exceptions.ConnectionError:
|
|
2101 | 2101 | <div><h3 id="profilingbyline">Profiling by Line</h3><pre><code class="python language-python hljs"><span class="hljs-comment"># $ pip3 install line_profiler memory_profiler</span>
|
2102 | 2102 | <span class="hljs-meta">@profile</span>
|
2103 | 2103 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>
|
2104 |
| - a = [*range(<span class="hljs-number">10000</span>)] |
2105 |
| - b = {*range(<span class="hljs-number">10000</span>)} |
| 2104 | + l = list(range(<span class="hljs-number">10000</span>)) |
| 2105 | + s = set(range(<span class="hljs-number">10000</span>)) |
2106 | 2106 | main()
|
2107 | 2107 | </code></pre></div>
|
2108 | 2108 |
|
|
2111 | 2111 | =======================================================
|
2112 | 2112 | 1 @profile
|
2113 | 2113 | 2 def main():
|
2114 |
| - 3 1 955.0 955.0 43.7 a = [*range(10000)] |
2115 |
| - 4 1 1231.0 1231.0 56.3 b = {*range(10000)} |
| 2114 | + 3 1 955.0 955.0 43.7 l = list(range(10000)) |
| 2115 | + 4 1 1231.0 1231.0 56.3 s = set(range(10000)) |
2116 | 2116 | </code></pre>
|
2117 | 2117 | <pre><code class="text language-text">$ python3 -m memory_profiler test.py
|
2118 | 2118 | Line # Mem usage Increment Line Contents
|
2119 | 2119 | =======================================================
|
2120 | 2120 | 1 37.668 MiB 37.668 MiB @profile
|
2121 | 2121 | 2 def main():
|
2122 |
| - 3 38.012 MiB 0.344 MiB a = [*range(10000)] |
2123 |
| - 4 38.477 MiB 0.465 MiB b = {*range(10000)} |
| 2122 | + 3 38.012 MiB 0.344 MiB l = list(range(10000)) |
| 2123 | + 4 38.477 MiB 0.465 MiB s = set(range(10000)) |
2124 | 2124 | </code></pre>
|
2125 | 2125 | <div><h3 id="callgraph">Call Graph</h3><div><h4 id="generatesapngimageofthecallgraphwithhighlightedbottlenecks">Generates a PNG image of the call graph with highlighted bottlenecks:</h4><pre><code class="python language-python hljs"><span class="hljs-comment"># $ pip3 install pycallgraph2</span>
|
2126 | 2126 | <span class="hljs-keyword">from</span> pycallgraph2 <span class="hljs-keyword">import</span> output, PyCallGraph
|
|
2274 | 2274 | y = sum(range(velocity))
|
2275 | 2275 | frame = Image.new(<span class="hljs-string">'L'</span>, (WIDTH, WIDTH))
|
2276 | 2276 | draw = ImageDraw.Draw(frame)
|
2277 |
| - draw.ellipse((WIDTH/<span class="hljs-number">2</span>-R, y, WIDTH/<span class="hljs-number">2</span>+R, y+R*<span class="hljs-number">2</span>), fill=<span class="hljs-string">'white'</span>) |
| 2277 | + draw.ellipse(((WIDTH / <span class="hljs-number">2</span>) - R, y, (WIDTH / <span class="hljs-number">2</span>) + R, y + (R * <span class="hljs-number">2</span>)), fill=<span class="hljs-string">'white'</span>) |
2278 | 2278 | frames.append(frame)
|
2279 | 2279 | frames += reversed(frames[<span class="hljs-number">1</span>:<span class="hljs-number">-1</span>])
|
2280 | 2280 | imageio.mimsave(<span class="hljs-string">'test.gif'</span>, frames, duration=<span class="hljs-number">0.03</span>)
|
|
2332 | 2332 | a_float = max(<span class="hljs-number">-1</span>, min(<span class="hljs-number">1</span> - <span class="hljs-number">2e-16</span>, a_float))
|
2333 | 2333 | a_float += sampwidth == <span class="hljs-number">1</span>
|
2334 | 2334 | a_float *= pow(<span class="hljs-number">2</span>, sampwidth * <span class="hljs-number">8</span> - <span class="hljs-number">1</span>)
|
2335 |
| - <span class="hljs-keyword">return</span> int(a_float).to_bytes(sampwidth, <span class="hljs-string">'little'</span>, signed=sampwidth!=<span class="hljs-number">1</span>) |
| 2335 | + <span class="hljs-keyword">return</span> int(a_float).to_bytes(sampwidth, <span class="hljs-string">'little'</span>, signed=sampwidth!=<span class="hljs-number">1</span>) |
2336 | 2336 | <span class="hljs-keyword">with</span> wave.open(filename, <span class="hljs-string">'wb'</span>) <span class="hljs-keyword">as</span> file:
|
2337 | 2337 | file.setnchannels(nchannels)
|
2338 | 2338 | file.setsampwidth(sampwidth)
|
|
2392 | 2392 | rect = pg.Rect(<span class="hljs-number">240</span>, <span class="hljs-number">240</span>, <span class="hljs-number">20</span>, <span class="hljs-number">20</span>)
|
2393 | 2393 | <span class="hljs-keyword">while</span> all(event.type != pg.QUIT <span class="hljs-keyword">for</span> event <span class="hljs-keyword">in</span> pg.event.get()):
|
2394 | 2394 | deltas = {pg.K_UP: (<span class="hljs-number">0</span>, <span class="hljs-number">-1</span>), pg.K_RIGHT: (<span class="hljs-number">1</span>, <span class="hljs-number">0</span>), pg.K_DOWN: (<span class="hljs-number">0</span>, <span class="hljs-number">1</span>), pg.K_LEFT: (<span class="hljs-number">-1</span>, <span class="hljs-number">0</span>)}
|
2395 |
| - <span class="hljs-keyword">for</span> key_code, is_pressed <span class="hljs-keyword">in</span> enumerate(pg.key.get_pressed()): |
2396 |
| - rect = rect.move(deltas[key_code]) <span class="hljs-keyword">if</span> key_code <span class="hljs-keyword">in</span> deltas <span class="hljs-keyword">and</span> is_pressed <span class="hljs-keyword">else</span> rect |
| 2395 | + <span class="hljs-keyword">for</span> ch, is_pressed <span class="hljs-keyword">in</span> enumerate(pg.key.get_pressed()): |
| 2396 | + rect = rect.move(deltas[ch]) <span class="hljs-keyword">if</span> ch <span class="hljs-keyword">in</span> deltas <span class="hljs-keyword">and</span> is_pressed <span class="hljs-keyword">else</span> rect |
2397 | 2397 | screen.fill((<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>))
|
2398 | 2398 | pg.draw.rect(screen, (<span class="hljs-number">255</span>, <span class="hljs-number">255</span>, <span class="hljs-number">255</span>), rect)
|
2399 | 2399 | pg.display.flip()
|
|
2472 | 2472 | clock = pg.time.Clock()
|
2473 | 2473 | <span class="hljs-keyword">while</span> all(event.type != pg.QUIT <span class="hljs-keyword">for</span> event <span class="hljs-keyword">in</span> pg.event.get()):
|
2474 | 2474 | keys = {pg.K_UP: D.n, pg.K_RIGHT: D.e, pg.K_DOWN: D.s, pg.K_LEFT: D.w}
|
2475 |
| - pressed = {keys.get(i) <span class="hljs-keyword">for</span> i, on <span class="hljs-keyword">in</span> enumerate(pg.key.get_pressed()) <span class="hljs-keyword">if</span> on} |
| 2475 | + pressed = {keys.get(ch) <span class="hljs-keyword">for</span> ch, is_prsd <span class="hljs-keyword">in</span> enumerate(pg.key.get_pressed()) <span class="hljs-keyword">if</span> is_prsd} |
2476 | 2476 | update_speed(mario, tiles, pressed)
|
2477 | 2477 | update_position(mario, tiles)
|
2478 | 2478 | draw(screen, images, mario, tiles, pressed)
|
|
2606 | 2606 | <DF> = <DF>.sort_values(column_key/s) <span class="hljs-comment"># Sorts rows by the passed column/s.</span>
|
2607 | 2607 | </code></pre>
|
2608 | 2608 | <div><h4 id="mergejoinconcat">Merge, Join, Concat:</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>l = DataFrame([[<span class="hljs-number">1</span>, <span class="hljs-number">2</span>], [<span class="hljs-number">3</span>, <span class="hljs-number">4</span>]], index=[<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>], columns=[<span class="hljs-string">'x'</span>, <span class="hljs-string">'y'</span>])
|
2609 |
| - x y |
2610 |
| -a <span class="hljs-number">1</span> <span class="hljs-number">2</span> |
2611 |
| -b <span class="hljs-number">3</span> <span class="hljs-number">4</span> |
| 2609 | + x y |
| 2610 | +a <span class="hljs-number">1</span> <span class="hljs-number">2</span> |
| 2611 | +b <span class="hljs-number">3</span> <span class="hljs-number">4</span> |
2612 | 2612 | <span class="hljs-meta">>>> </span>r = DataFrame([[<span class="hljs-number">4</span>, <span class="hljs-number">5</span>], [<span class="hljs-number">6</span>, <span class="hljs-number">7</span>]], index=[<span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>], columns=[<span class="hljs-string">'y'</span>, <span class="hljs-string">'z'</span>])
|
2613 | 2613 | y z
|
2614 | 2614 | b <span class="hljs-number">4</span> <span class="hljs-number">5</span>
|
|
2651 | 2651 | </code></pre></div>
|
2652 | 2652 |
|
2653 | 2653 | <ul>
|
2654 |
| -<li><strong>All operations operate on columns by default. Use <code class="python hljs"><span class="hljs-string">'axis=1'</span></code> parameter to process the rows instead.</strong> </li> |
| 2654 | +<li><strong>All operations operate on columns by default. Use <code class="python hljs"><span class="hljs-string">'axis=1'</span></code> parameter to process the rows instead.</strong></li> |
2655 | 2655 | </ul>
|
2656 | 2656 | <pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>df = DataFrame([[<span class="hljs-number">1</span>, <span class="hljs-number">2</span>], [<span class="hljs-number">3</span>, <span class="hljs-number">4</span>]], index=[<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>], columns=[<span class="hljs-string">'x'</span>, <span class="hljs-string">'y'</span>])
|
2657 | 2657 | x y
|
|
2704 | 2704 | <DF> = <GB>.get_group(group_key/s) <span class="hljs-comment"># Selects a group by value of grouping column.</span>
|
2705 | 2705 | </code></pre>
|
2706 | 2706 | <div><h4 id="aggregatetransformmap-2">Aggregate, Transform, Map:</h4><pre><code class="python language-python hljs"><DF> = <GB>.sum/max/mean/idxmax/all() <span class="hljs-comment"># Or: <GB>.apply/agg(<agg_func>)</span>
|
2707 |
| -<DF> = <GB>.rank/diff/cumsum/ffill() <span class="hljs-comment"># Or: <GB>.aggregate(<trans_func>) </span> |
| 2707 | +<DF> = <GB>.rank/diff/cumsum/ffill() <span class="hljs-comment"># Or: <GB>.aggregate(<trans_func>)</span> |
2708 | 2708 | <DF> = <GB>.fillna(<el>) <span class="hljs-comment"># Or: <GB>.transform(<map_func>)</span>
|
2709 | 2709 | </code></pre></div>
|
2710 | 2710 |
|
|
2742 | 2742 | <Figure>.write_html/json/image(<span class="hljs-string">'<path>'</span>) <span class="hljs-comment"># Also: <Figure>.show()</span>
|
2743 | 2743 | </code></pre></div>
|
2744 | 2744 |
|
2745 |
| -<div><h4 id="coviddeathsbycontinent">Covid deaths by continent:</h4><p></p><div id="2a950764-39fc-416d-97fe-0a6226a3095f" class="plotly-graph-div" style="height:340px; width:100%;"></div><pre><code class="python language-python hljs">covid = pd.read_csv(<span class="hljs-string">'https://covid.ourworldindata.org/data/owid-covid-data.csv'</span>, |
| 2745 | +<div><h4 id="coviddeathsbycontinent">Covid deaths by continent:</h4><p></p><div id="2a950764-39fc-416d-97fe-0a6226a3095f" class="plotly-graph-div" style="height:340px; width:100%;"></div><pre><code class="python language-python hljs">covid = pd.read_csv(<span class="hljs-string">'https://covid.ourworldindata.org/data/owid-covid-data.csv'</span>, |
2746 | 2746 | usecols=[<span class="hljs-string">'iso_code'</span>, <span class="hljs-string">'date'</span>, <span class="hljs-string">'total_deaths'</span>, <span class="hljs-string">'population'</span>])
|
2747 | 2747 | continents = pd.read_csv(<span class="hljs-string">'https://gist.githubusercontent.com/stevewithington/20a69c0b6d2ff'</span>
|
2748 | 2748 | <span class="hljs-string">'846ea5d35e5fc47f26c/raw/country-and-continent-codes-list-csv.csv'</span>,
|
|
0 commit comments