mirror of
https://github.com/rasbt/python_reference.git
synced 2025-02-20 15:22:08 +00:00
types as variables
This commit is contained in:
parent
c561c92eea
commit
95227cb057
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:d8ba69c66769cf62e5201b70ed7d717913017f6f09492848ce164b50068bd2ba"
|
||||
"signature": "sha256:5e808c95d2003c791e04a26d378bc816b2010a59171244a18d73487060d9e029"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
|
@ -79,7 +79,8 @@
|
|||
"- [Creating copies of mutable objects](#copy_mutable)\n",
|
||||
"- [Key differences between Python 2 and 3](#python_differences)\n",
|
||||
"- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n",
|
||||
"- [Abortive statements in `finally` blocks](#finally_blocks)"
|
||||
"- [Abortive statements in `finally` blocks](#finally_blocks)\n",
|
||||
"- [Assigning types to variables as values](#variable_types)"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -922,7 +923,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C), to avoid syntax error in old (but perfectly working) code, `bool` was added as a subclass of `int` in Python 2.3.\n",
|
||||
"Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C). In order to avoid syntax errors in old (but perfectly working) Python code, `bool` was added as a subclass of `int` in Python 2.3.\n",
|
||||
"\n",
|
||||
"Original source: [http://www.peterbe.com/plog/bool-is-int](http://www.peterbe.com/plog/bool-is-int)"
|
||||
]
|
||||
|
@ -933,7 +934,7 @@
|
|||
"input": [
|
||||
"print('isinstance(True, int):', isinstance(True, int))\n",
|
||||
"print('True + True:', True + True)\n",
|
||||
"print('3*True:', 3*True)\n",
|
||||
"print('3*True + True:', 3*True + True)\n",
|
||||
"print('3*True - False:', 3*True - False)\n"
|
||||
],
|
||||
"language": "python",
|
||||
|
@ -945,12 +946,12 @@
|
|||
"text": [
|
||||
"isinstance(True, int): True\n",
|
||||
"True + True: 2\n",
|
||||
"3*True: 3\n",
|
||||
"3*True + True: 4\n",
|
||||
"3*True - False: 3\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 16
|
||||
"prompt_number": 28
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -979,11 +980,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Remember the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n",
|
||||
"Remember the section about the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n",
|
||||
"\n",
|
||||
"(Original source: [http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html](http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html))\n",
|
||||
"\n",
|
||||
"In the first example below, where we call a `lambda` function in a list comprehension, the value `i` is dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list is already constructed when we `for-loop` through the list, it is set to the last value 4."
|
||||
"In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list is already constructed when we `for-loop` through the list, it will be set to the last value 4."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -1009,7 +1010,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 11
|
||||
"prompt_number": 29
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -1041,7 +1042,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
"prompt_number": 30
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -1106,7 +1107,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 33
|
||||
"prompt_number": 31
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -1484,8 +1485,8 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Not, really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n",
|
||||
"- use lists if you want to use list methods \n",
|
||||
"\"List comprehensions are fast, but generators are faster!?\" - No, not really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n",
|
||||
"- use lists if you want to use the plethora of list methods \n",
|
||||
"- use generators when you are dealing with huge collections to avoid memory issues"
|
||||
]
|
||||
},
|
||||
|
@ -1699,7 +1700,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"It can be really dangerous to modify a list when iterating through - it is a very common pitfall that can cause unintended behavior! \n",
|
||||
"It can be really dangerous to modify a list when iterating through it - this is a very common pitfall that can cause unintended behavior! \n",
|
||||
"Look at the following examples, and for a fun exercise: try to figure out what is going on before you skip to the solution!"
|
||||
]
|
||||
},
|
||||
|
@ -2865,6 +2866,78 @@
|
|||
"Here, the abortive `return` statement in the `finally` block simply overrules the `return` in the `try` block, since **`finally` is guaranteed to always be executed.** So, be careful using abortive statements in `finally` blocks!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>\n",
|
||||
"<br>\n",
|
||||
"<a name=\"variable_types\">"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#Assigning types to variables as values"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I am not yet sure in which context this can be useful, but it is a nice fun fact to know that we can assign types as values to variables."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"a_var = str\n",
|
||||
"a_var(123)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 1,
|
||||
"text": [
|
||||
"'123'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from random import choice\n",
|
||||
"\n",
|
||||
"a, b, c = float, int, str\n",
|
||||
"for i in range(5):\n",
|
||||
" j = choice([a,b,c])(i)\n",
|
||||
" print(j, type(j))"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"0 <class 'int'>\n",
|
||||
"1 <class 'int'>\n",
|
||||
"2.0 <class 'float'>\n",
|
||||
"3 <class 'str'>\n",
|
||||
"4 <class 'int'>\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:d8ba69c66769cf62e5201b70ed7d717913017f6f09492848ce164b50068bd2ba"
|
||||
"signature": "sha256:5e808c95d2003c791e04a26d378bc816b2010a59171244a18d73487060d9e029"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
|
@ -79,7 +79,8 @@
|
|||
"- [Creating copies of mutable objects](#copy_mutable)\n",
|
||||
"- [Key differences between Python 2 and 3](#python_differences)\n",
|
||||
"- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n",
|
||||
"- [Abortive statements in `finally` blocks](#finally_blocks)"
|
||||
"- [Abortive statements in `finally` blocks](#finally_blocks)\n",
|
||||
"- [Assigning types to variables as values](#variable_types)"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -922,7 +923,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C), to avoid syntax error in old (but perfectly working) code, `bool` was added as a subclass of `int` in Python 2.3.\n",
|
||||
"Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C). In order to avoid syntax errors in old (but perfectly working) Python code, `bool` was added as a subclass of `int` in Python 2.3.\n",
|
||||
"\n",
|
||||
"Original source: [http://www.peterbe.com/plog/bool-is-int](http://www.peterbe.com/plog/bool-is-int)"
|
||||
]
|
||||
|
@ -933,7 +934,7 @@
|
|||
"input": [
|
||||
"print('isinstance(True, int):', isinstance(True, int))\n",
|
||||
"print('True + True:', True + True)\n",
|
||||
"print('3*True:', 3*True)\n",
|
||||
"print('3*True + True:', 3*True + True)\n",
|
||||
"print('3*True - False:', 3*True - False)\n"
|
||||
],
|
||||
"language": "python",
|
||||
|
@ -945,12 +946,12 @@
|
|||
"text": [
|
||||
"isinstance(True, int): True\n",
|
||||
"True + True: 2\n",
|
||||
"3*True: 3\n",
|
||||
"3*True + True: 4\n",
|
||||
"3*True - False: 3\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 16
|
||||
"prompt_number": 28
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -979,11 +980,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Remember the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n",
|
||||
"Remember the section about the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n",
|
||||
"\n",
|
||||
"(Original source: [http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html](http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html))\n",
|
||||
"\n",
|
||||
"In the first example below, where we call a `lambda` function in a list comprehension, the value `i` is dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list is already constructed when we `for-loop` through the list, it is set to the last value 4."
|
||||
"In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list is already constructed when we `for-loop` through the list, it will be set to the last value 4."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -1009,7 +1010,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 11
|
||||
"prompt_number": 29
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -1041,7 +1042,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
"prompt_number": 30
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -1106,7 +1107,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 33
|
||||
"prompt_number": 31
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
@ -1484,8 +1485,8 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Not, really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n",
|
||||
"- use lists if you want to use list methods \n",
|
||||
"\"List comprehensions are fast, but generators are faster!?\" - No, not really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n",
|
||||
"- use lists if you want to use the plethora of list methods \n",
|
||||
"- use generators when you are dealing with huge collections to avoid memory issues"
|
||||
]
|
||||
},
|
||||
|
@ -1699,7 +1700,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"It can be really dangerous to modify a list when iterating through - it is a very common pitfall that can cause unintended behavior! \n",
|
||||
"It can be really dangerous to modify a list when iterating through it - this is a very common pitfall that can cause unintended behavior! \n",
|
||||
"Look at the following examples, and for a fun exercise: try to figure out what is going on before you skip to the solution!"
|
||||
]
|
||||
},
|
||||
|
@ -2865,6 +2866,78 @@
|
|||
"Here, the abortive `return` statement in the `finally` block simply overrules the `return` in the `try` block, since **`finally` is guaranteed to always be executed.** So, be careful using abortive statements in `finally` blocks!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>\n",
|
||||
"<br>\n",
|
||||
"<a name=\"variable_types\">"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#Assigning types to variables as values"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I am not yet sure in which context this can be useful, but it is a nice fun fact to know that we can assign types as values to variables."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"a_var = str\n",
|
||||
"a_var(123)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 1,
|
||||
"text": [
|
||||
"'123'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from random import choice\n",
|
||||
"\n",
|
||||
"a, b, c = float, int, str\n",
|
||||
"for i in range(5):\n",
|
||||
" j = choice([a,b,c])(i)\n",
|
||||
" print(j, type(j))"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"0 <class 'int'>\n",
|
||||
"1 <class 'int'>\n",
|
||||
"2.0 <class 'float'>\n",
|
||||
"3 <class 'str'>\n",
|
||||
"4 <class 'int'>\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
|
|
Loading…
Reference in New Issue
Block a user