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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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