Mercurial > js4py
annotate source/know-in-python.rst @ 213:0ea90a1819c2 default tip
Custom theming
| author | Radomir Dopieralski <radomir.dopieralski@allegro.pl> |
|---|---|
| date | Wed, 27 Jun 2012 16:35:54 +0200 |
| parents | 4e6cfa066d1a |
| children |
| rev | line source |
|---|---|
|
92
1ba803131dd9
Reorder table of contents, remove a couple of draft statements.
Jonathan Fine <jfine@pytex.org>
parents:
83
diff
changeset
|
1 What do you need to know in Python |
|
1ba803131dd9
Reorder table of contents, remove a couple of draft statements.
Jonathan Fine <jfine@pytex.org>
parents:
83
diff
changeset
|
2 ================================== |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
3 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
4 Global and local scopes |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
5 ----------------------- |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
6 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
7 Whenever you reference a name in Python, it looks for it in several scopes. First it tries to find it in the *local* scope, which is usually the body of the function that is being currently executed. If the name is not there, Python tries the *global* scope, which is the body of the module. When that fails, it tries the *buildins*. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
8 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
9 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
10 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
11 import os |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
12 # The name *os* gets defined in the *global* scope. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
13 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
14 g = 3 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
15 # Define variable *g* in the *global* scope with value 3. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
16 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
17 def my_function(x): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
18 # The name *x* gets defined in *local* scope of *my_function* |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
19 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
20 # *x* is found in the *local* scope and its value is |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
21 # assigned to new variable *y* created in *local* scope. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
22 y = x |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
23 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
24 # The name *os* is not found in the *local* scope, so the *global* |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
25 # scope is tried. A new variable *os* is created in the *local* scope |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
26 # with value of the *os* from the *global* scope. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
27 os = os |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
28 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
29 # The name *g* from *global* scope is imported into the *local* scope. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
30 global g |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
31 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
32 # The *global* variable *g* is assigned the value of *local* |
|
92
1ba803131dd9
Reorder table of contents, remove a couple of draft statements.
Jonathan Fine <jfine@pytex.org>
parents:
83
diff
changeset
|
33 # variable *x* |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
34 g = x |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
35 |
|
92
1ba803131dd9
Reorder table of contents, remove a couple of draft statements.
Jonathan Fine <jfine@pytex.org>
parents:
83
diff
changeset
|
36 my_function(3) |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
37 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
38 In JavaScript you have a whole hierarchy of scopes -- each new nested function |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
39 creates a new scope. The scopes are searched beginning from the innermost up to |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
40 the global object. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
41 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
42 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
43 Default scope |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
44 ------------- |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
45 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
46 In Python, when you create a new name, it goes by default to the *local* scope |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
47 (when you are at the module scope, it's equal to the *global* scope). |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
48 You don't need to do anything special to make that happen. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
49 |
|
211
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
50 In JavaScript, variables go to the global object by default. You have to use |
|
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
51 the ``var`` keyword to have them defined locally. |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
52 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
53 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
54 Functions passed as parameters |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
55 ------------------------------ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
56 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
57 Everything is an object in Python. In particular, a function is an object. This |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
58 means that you can assign a function to a variable or pass it as a function |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
59 argument. This may be useful when you want to have some generic algorithms. |
|
211
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
60 This is used in the ``sort`` method so that you can, for example, sort strings in |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
61 case-insensitive way: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
62 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
63 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
64 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
65 def lowercase(s): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
66 return s.lower() |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
67 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
68 my_list = ['a', 'B', 'c'] |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
69 my_list.sort(key=lowercase) |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
70 print my_list |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
71 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
72 You can pass functions as parameters and assign them to variables in JavaScript |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
73 too, although there is one important detail that is different about methods. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
74 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
75 Method binding |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
76 -------------- |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
77 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
78 Methods in Python are bound to object instances. This means that you can pass |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
79 them around as shown above, and they will still remember what object they |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
80 belong to. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
81 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
82 .. code-block:: python |
|
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
83 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
84 def call_with_a(method): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
85 method('a') |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
86 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
87 my_list = [] |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
88 call_with_a(my_list.append) |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
89 print my_list |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
90 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
91 This is not true for JavaScript. In JavaScript the functions and methods don't |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
92 know where they came from, and they get the reference to their object at the |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
93 moment when they are called. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
94 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
95 Closures |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
96 -------- |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
97 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
98 You can define a function inside other function in Python. That new function |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
99 then has access to all the variables in the local scope of the initial |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
100 function. Moreover, if you return that new function from the original function, |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
101 all the variables in the original function's scope are still alive -- because |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
102 the new function still has access to them. This saved scope is called a |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
103 closure. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
104 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
105 An example use of a closure is a "private" variable that can be only accessed |
|
211
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
106 by ``get`` and ``set`` functions. |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
107 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
108 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
109 |
|
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
110 def create_get_set(): |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
111 """ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
112 Get a pair of functions for getting and setting a hidden value. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
113 Using a closure. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
114 """ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
115 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
116 value = None |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
117 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
118 def get(): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
119 return value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
120 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
121 def set(new_value): |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
122 value = new_value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
123 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
124 return get, set |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
125 |
|
211
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
126 The ``value`` variable stays in the memory even after ``create_get_set`` finishes, |
|
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
127 because the ``get`` and ``set`` functions still hold a reference to it. Because |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
128 they are the only objects holding reference to it, the variable is effectively |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
129 hidden from other code. You could have a similar effect by using an object: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
130 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
131 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
132 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
133 class GetSet(object): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
134 def __init__(self): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
135 self.value = None |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
136 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
137 def get(self): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
138 return self.value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
139 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
140 def set(self, new_value): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
141 self.value = new_value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
142 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
143 def create_get_set(): |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
144 """ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
145 Get a pair of functions for getting and setting a hidden value. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
146 Using a closure. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
147 """ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
148 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
149 getset = GetSet() |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
150 return getset.get, getset.set |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
151 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
152 |
|
211
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
153 Here instead of a closure we have an explicit ``getset`` object. Again, this |
|
4e6cfa066d1a
Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents:
92
diff
changeset
|
154 object stays in memory because the bound methods ``get`` and ``set`` hold a |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
155 reference to it. This couldn't be done in JavaScript. |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
156 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
157 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
158 Star arguments |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
159 -------------- |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
160 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
161 You can define a function that takes a variable number of arguments: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
162 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
163 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
164 |
|
74
da968a3c0e8b
Fix more typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
73
diff
changeset
|
165 def average(*args): |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
166 total = 0 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
167 for arg in args: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
168 total += arg |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
169 return float(total)/len(args) |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
170 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
171 And you can even have a function that takes keyword arguments: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
172 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
173 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
174 |
|
74
da968a3c0e8b
Fix more typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
73
diff
changeset
|
175 def get_arguments(*args, **kwargs): |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
176 return args, kwargs |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
177 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
178 get_argumenst(1, 2, 3, four=5) |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
179 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
180 You can also call a function and pass it a dictionary or list as the argument: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
181 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
182 .. code-block:: python |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
183 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
184 my_list = [1, 2, 3] |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
185 my_dict = {'four': 5} |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
186 |
|
74
da968a3c0e8b
Fix more typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
73
diff
changeset
|
187 get_arguments(*my_list, **my_dict) |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
188 |
|
73
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
189 In JavaScript there are other mechanisms for doing that: the *arguments* keyword |
|
9d02f79ab3bd
Fix some typos in the "What do you need to know about Pytthon" section
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
71
diff
changeset
|
190 has the list of all parameters passed to a function. These are all positional arguments, JavaScript doesn't have keyword arguments. The *apply* method of a function lets you pass an array of parameters in a function call. |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
191 |
