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
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
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