mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-23 19:44:25 +01:00
Replace images in notebook
This commit is contained in:
parent
5402122038
commit
4b3818a667
6
irrelevant/wtf.ipynb
vendored
6
irrelevant/wtf.ipynb
vendored
@ -4,7 +4,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<p align=\"center\"><img src=\"/images/logo.png\" alt=\"\"></p>\n",
|
||||
"<p align=\"center\"><img src=\"https://raw.githubusercontent.com/nifadyev/wtfpython/refs/heads/feature/%2374/add-dark-theme-and-alt-support-for-images/images/logo.svg\" alt=\"wtfpython logo.\"></p>\n",
|
||||
"<h1 align=\"center\">What the f*ck Python! \ud83d\ude31</h1>\n",
|
||||
"<p align=\"center\">Exploring and understanding Python through surprising snippets.</p>\n",
|
||||
"\n",
|
||||
@ -355,7 +355,7 @@
|
||||
" * All length 0 and length 1 strings are interned.\n",
|
||||
" * Strings are interned at compile time (`'wtf'` will be interned but `''.join(['w', 't', 'f'])` will not be interned)\n",
|
||||
" * Strings that are not composed of ASCII letters, digits or underscores, are not interned. This explains why `'wtf!'` was not interned due to `!`. CPython implementation of this rule can be found [here](https://github.com/python/cpython/blob/3.6/Objects/codeobject.c#L19)\n",
|
||||
" ![image](/images/string-intern/string_intern.png)\n",
|
||||
" ![String interning process](https://raw.githubusercontent.com/nifadyev/wtfpython/refs/heads/feature/%2374/add-dark-theme-and-alt-support-for-images/images/string-intern/string_interning.svg)\n",
|
||||
"+ When `a` and `b` are set to `\"wtf!\"` in the same line, the Python interpreter creates a new object, then references the second variable at the same time. If you do it on separate lines, it doesn't \"know\" that there's already `\"wtf!\"` as an object (because `\"wtf!\"` is not implicitly interned as per the facts mentioned above). It's a compile-time optimization. This optimization doesn't apply to 3.7.x versions of CPython (check this [issue](https://github.com/satwikkansal/wtfpython/issues/100) for more discussion).\n",
|
||||
"+ A compile unit in an interactive environment like IPython consists of a single statement, whereas it consists of the entire module in case of modules. `a, b = \"wtf!\", \"wtf!\"` is single statement, whereas `a = \"wtf!\"; b = \"wtf!\"` are two statements in a single line. This explains why the identities are different in `a = \"wtf!\"; b = \"wtf!\"`, and also explain why they are same when invoked in `some_file.py`\n",
|
||||
"+ The abrupt change in the output of the fourth snippet is due to a [peephole optimization](https://en.wikipedia.org/wiki/Peephole_optimization) technique known as Constant folding. This means the expression `'a'*20` is replaced by `'aaaaaaaaaaaaaaaaaaaa'` during compilation to save a few clock cycles during runtime. Constant folding only occurs for strings having a length of less than 21. (Why? Imagine the size of `.pyc` file generated as a result of the expression `'a'*10**10`). [Here's](https://github.com/python/cpython/blob/3.6/Python/peephole.c#L288) the implementation source for the same.\n",
|
||||
@ -13475,4 +13475,4 @@
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user