Mercurial > js4py-pl
annotate source/know-in-python.rst @ 201:b6864a86e876 default tip
Przetłumaczone getting-started
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 15 Jul 2012 13:27:27 +0200 |
| parents | 1ba803131dd9 |
| 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 |
|
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
|
50 In JavaScript, variables go to the global object by default. You have to use 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
|
51 |
|
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 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
|
54 ------------------------------ |
|
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 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
|
57 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
|
58 argument. This may be useful when you want to have some generic algorithms. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
59 This is used in the *sort* method so that you can, for example, sort strings in |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
60 case-insensitive way: |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
61 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
62 .. 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
|
63 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
64 def lowercase(s): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
65 return s.lower() |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
66 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
67 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
|
68 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
|
69 print my_list |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
70 |
|
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
|
71 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
|
72 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
|
73 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
74 Method binding |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
75 -------------- |
|
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 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
|
78 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
|
79 belong to. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
80 |
|
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
|
81 .. 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
|
82 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
83 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
|
84 method('a') |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
85 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
86 my_list = [] |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
87 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
|
88 print my_list |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
89 |
|
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
|
90 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
|
91 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
|
92 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
|
93 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
94 Closures |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
95 -------- |
|
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 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 closure. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
103 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
104 An example use of a closure is a "private" variable that can be only accessed |
|
92
1ba803131dd9
Reorder table of contents, remove a couple of draft statements.
Jonathan Fine <jfine@pytex.org>
parents:
83
diff
changeset
|
105 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
|
106 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
107 .. 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
|
108 |
|
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 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
|
110 """ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
111 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
|
112 Using a closure. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
113 """ |
|
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 value = None |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
116 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
117 def get(): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
118 return value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
119 |
|
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
|
120 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
|
121 value = new_value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
122 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
123 return get, set |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
124 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
125 The *value* variable stays in the memory even after *create_get_set* finishes, |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
126 because the *get* and *set* functions still hold a reference to it. Because |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
127 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
|
128 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
|
129 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
130 .. 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
|
131 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
132 class GetSet(object): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
133 def __init__(self): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
134 self.value = None |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
135 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
136 def get(self): |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
137 return self.value |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
138 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
139 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
|
140 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
|
141 |
|
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
|
142 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
|
143 """ |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
144 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
|
145 Using a closure. |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
146 """ |
|
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 getset = GetSet() |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
149 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
|
150 |
|
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 Here instead of a closure we have an explicit *getset* object. Again, this |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
153 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
|
154 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
|
155 |
|
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 Star arguments |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
158 -------------- |
|
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 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
|
161 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
162 .. 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
|
163 |
|
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
|
164 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
|
165 total = 0 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
166 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
|
167 total += arg |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
168 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
|
169 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
170 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
|
171 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
172 .. 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
|
173 |
|
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
|
174 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
|
175 return args, kwargs |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
176 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
177 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
|
178 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
179 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
|
180 |
|
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
181 .. 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
|
182 |
|
71
5b096eec7ebb
Added "What do you need to know in Python" part.
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
183 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
|
184 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
|
185 |
|
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
|
186 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
|
187 |
|
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
|
188 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
|
189 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
|
190 |
