Professional Documents
Culture Documents
Release: 3.2.2
docspy3zh.readthedocs.org
2013 10 28
Python
4.4
break continue
, else
2.1
2.2
3.2
29
Python .
4.5
pass . . . . . . .
30
2.1.1
. . .
4.6
. . . . . . .
30
2.1.2
. . .
4.7
. . . . .
33
. . . .
10
4.7.1
. . .
33
2.2.1
. . .
10
4.7.2
. .
34
2.2.2
4.7.3
. .
36
Python .
10
4.7.4
37
2.2.3
. .
11
4.7.5
Lambda .
38
2.2.4
11
4.7.6
. .
38
2.2.5
. . .
: . . . .
39
Python
3.1
. . . . . . . . . .
12
12
Python
. . . . . . . . . .
13
3.1.1
. . . . . .
13
3.1.2
. . . . .
16
3.1.3
Unicode .
21
3.1.4
. . . . . .
22
. . . . . .
24
4.8
5.1
. . . . . . .
5.1.1
40
. . . . . .
5.1.2
40
42
. . . . . .
43
5.1.3
. .
43
5.1.4
45
5.2
del . . . . . . . .
46
5.3
. . . . . .
46
26
5.4
(Set) . . . . . . .
48
4.1
if . . . . . . . . .
26
5.5
. . . . . . . . . .
49
4.2
for . . . . . . . .
26
5.6
. . . . . . .
50
4.3
range() . . . . . .
27
5.7
. . . . .
52
5.8
2
53
6.1
. . . . . .
56
6.1.2
57
6.1.3
8.7
. .
83
83
9.1
84
9.2
Python
. . . . . . . . .
9.2.1
84
. . . . .
87
. . . . . .
88
9.3.1
88
61
9.3.2
. . . . .
88
* .
64
9.3.3
. . .
90
6.4.2
. .
65
9.3.4
. . .
90
6.4.3
. .
65
9.4
. . . . . . .
91
9.5
. . . . . . . . . .
93
. . .
94
9.6
. . . . . . .
95
9.7
. . . . . . . . . .
96
57
6.2
. . . . . . .
59
6.3
dir() . . . . . .
59
6.4
. . . . . . . . . . .
6.4.1
. . . . .
7.1.1
7.2
81
55
Python .
7.1
. . . . .
54
. . . . . . .
6.1.1
8.6
9.3
66
66
9.5.1
. . . . . .
70
9.8
. . . . . .
96
. . . . . .
71
9.9
. . . . . . . . .
97
99
7.2.1
71
9.10 . . . . . . . . .
7.2.2
pickle .
9.11 . . . . . 100
74
8.2
75
101
. . . . . . . 75
10.1 . . 101
. . . . . . . . . . 75
10.2 . . . . . 102
8.3
. . . . . . .
76
10.3 . . . . . . 102
8.4
. . . . . . .
79
10.4
8.5
. . . . . .
80
8.1
. . . . . . 102
10.5 . . 103
11.6 . . . . . . . . . 113
10.6 . . . . . . . 103
11.7 . . . . 114
10.7 . . . . . . 104
11.8 . 116
10.8 . . . . . . 104
10.9 . . . . . . 105
117
10.10 . . . . . . . 105
119
10.11 . . . . . . . 106
10.12 . . . . . . . . 107
13.1 . . . . . . . . . 119
13.2 . . . . . . . 119
108
11.1 . . . . . . 108
11.2 . . . . . . . . . 109
11.3 Working with Binary
Data Record Layouts . 111
13.3 . . . . . . . 120
13.4 122
122
14.1 . . . . . . . 127
LATEX
131
Python . ,
. Python
, ,
.
Python Python
Web http://www.python.org ,
. Python , ,
.
Python C C++ (
C ) . Python
.
Python .
Python , ,
.
, .
. C C++ ,
C . Python .
Python ,
. , Python ,
. , Python ,
Python Python .
.
. .
, ,
1
.
, C/C++/Java
, ///.
, .
, .
, Python .
Unix shell Windows
,
, . C/C++/Java ,
. Windows
MacOS X Unix , Python ,
.
Python , ,
Shell , , Python
. , C , ,
(very-high-level language), ,
. Python Awk
Perl, Python
Python , Python
. Python ,
Python .
I/O, , sockets TK
.
Python , ,
. ,
, , .
.
Python , . Python
C, C++ Java , :
;
/ ( C {}
Pascal begin/end );
.
Note:
Python ,
,
; Python :
:
!
, :
3 , ,
,
...
:
NB
50 ,
,
...
Python : C ,
, , ,
Python ().
PYTHON
, Python C , Python
.
, BBC Monty Pythons Flying
Circus , . Monty
Python , !
Python ,
. , , ,
Python .
, , ,
.
Python ,
, , ,
.
Python 2
Python
2.1
Python /usr/local/bin/ .
/usr/local/bin Unix Shell ,
:
python3 .2
.3 , ,
Python . (, /usr/local/python
)
Windows , Python C:\Python32 . ,
. Path
2
PYTHON
, DOS :
set path=%path%;C:\python32
( UNIX Control-D , Windows Control-Z )
0 . , : quit().
, UNIX GNU
readline , .
ControlP, (), (
). ,
^P, ; .
UNIX Shell:
, ,
, .
python -c command [arg] ...,
command , Shell -c . Python
shell ,
command .
Python . pythonm module[arg]... ,
.
, .
-i . (, ,
. )
2.1.1
, sys.argv
.
PYTHON
, : sys.argv[0],
,
'-' () , sys.argv[0] '-'.
-c , sys.argv[0] '-c'.
-m , sys.argv[0] .
-c command -m module Python
, sys.argv , .
2.1.2
, , if :
>>> the_world_is_flat = 1
>>> if the_world_is_flat :
...
print("Be careful nottofalloff!")
...
Be careful not to fall off!
PYTHON
2.2
2.2.1
10
, . ,
, , . (
try except ).
, ,
; .
( Control-C DEL)
, .4
KeyboardInterrupt , try .
2.2.2
Python
( Python PATH ). #!
. , UNIX
('\n') , Windows ('\r\n') . , #
Python .
chmod :
$ chmod +x myscript.py
Windows , (executable mode).
Python .py python.exe ,
Python , . .pyw,
.
4
GNU Readline .
2.2.3
PYTHON
11
, Python UTF-8 . ,
, , ,
: ASCII
. ,
UTF-8 , .
. , #!
, :
# -*- coding : encoding -*-
encoding
UTF-8. Python codecs .
, UTF-8 ,
Windows-1252 , :
# -*- coding : cp -1252 -*-
Windows-1252 .
.
2.2.4
Python ,
. , PYTHONSTARTUP ,
. Unix Shell .profile .
, Python
/dev/tty ()
. ,
.
sys.ps1 and sys.ps2 .
,
PYTHON
12
: if os.path.isfile('.pythonrc.py'):exec(open('.
pythonrc.py').read()). ,
:
import os
filename = os. environ .get('PYTHONSTARTUP ')
if filename and os.path. isfile ( filename ):
exec(open( filename ).read())
2.2.5
usercustomize.py ,
. Python ,
-s .
sitecustomize ,
site-packages , usercustomize .
site .
Python5
, (>>> ...) :
, ;
.
5
PYTHON
13
,
; .
, , . Python
, # , .
, , .
. ,
Python , .
:
#
SPAM = 1
#
# ... !
Python
3.1
Python . , , >>>,
. ()
3.1.1
: , .
: +, -, *, / (, Pasal
C); . :
>>>
4
>>>
...
4
>>>
4
>>>
5.0
>>>
1.6
2+2
#
2+2
2+2
(50-5*6)/4
8/5 #
PYTHON
14
: , ;
, .
: .
, ,
, //:
>>> # :
... 7//3
2
>>> 7//-3
-3
('=') . ,
:
>>> width = 20
>>> height = 5*9
>>> width * height
900
:
>>>
>>>
0
>>>
0
>>>
0
x = y = z = 0
x
# x, y z 0
y
z
(),
:
>>> #
... n
Traceback (most recent call last):
File "<stdin >", line 1, in < module >
NameError : name 'n' is not defined
Python ; , Pyhton
:
PYTHON
15
; , j i.
(real+imagj), complex(real,imag) .
, . z
, z.real z.imag
>>> a=1.5+0.5j
>>> a.real
1.5
>>> a.imag
0.5
(float(), int())
. abs(z) (
), z.real :
>>> a=3.0+4.0j
>>> float(a)
Traceback (most recent call last):
File "<stdin >", line 1, in ?
TypeError : can 't convert complex to float ;useabs(z)
>>>a.real
3.0
>>>a.imag
4.0
>>>abs(a)#sqrt(a.real **2+a.imag **2)
5.0
, _.
Python , , :
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
PYTHON
16
>>> price + _
113.0625
>>> round(_, 2)
113.06
.
, .
3.1.2
, Python .
:
>>> 'spameggs '
'spameggs '
>>> 'doesn\'t'
"doesn 't"
>>> "doesn 't"
"doesn 't"
>>> '"Yes ,"hesaid.'
'"Yes ,"hesaid.'
>>> "\"Yes ,\"hesaid."
'"Yes ,"hesaid.'
>>> '"Isn\'t,"shesaid.'
'"Isn\'t,"shesaid.'
: ,
.
, , , . print()
.
. ,
:
hello = " \n\
, C .\n\
\
."
print(hello )
PYTHON
17
, \n
. :
, C .
.
, : """ '''.
, , .
.
print("""\
: thingy [ OPTIONS ]
-h
-H hostname
""")
:
: thingy [ OPTIONS ]
-h
-H hostname
, \n
, , , .
, :
hello = r" \n\
, C ."
print(hello )
:
\n\
, C .
+ (), * :
>>> word = 'Help ' + 'A'
>>> word
PYTHON
18
'HelpA '
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA >'
;
word = 'Help''A'; ,
:
>>> 'str ' 'ing '
'string '
>>> 'str '.strip()
'string '
>>> 'str '.strip()
File "<stdin >",
'str '.strip()
#
+ 'ing '
<-
'ing '
# <line 1, in ?
'ing '
^
SyntaxError : invalid syntax
<-
(); C ,
() 0. ;
. Icon , :
.
>>> word[4]
'A'
>>> word[0:2]
'He '
>>> word[2:4]
'lp '
; ,
.
>>> word[:2]
'He '
>>> word[2:]
'lpA '
#
#
C , Python .
:
PYTHON
19
, :
>>> 'x' + word[1:]
'xelpA '
>>> 'Splat ' + word[4]
'SplatA '
: s[:i]+ s[i:] s.
>>> word[:2] + word[2:]
'HelpA '
>>> word[:3] + word[3:]
'HelpA '
: ,
.
>>> word[1:100]
'elpA '
>>> word[10:]
''
>>> word[2:1]
''
, . :
>>> word[-1]
'A'
>>> word[-2]
'p'
>>> word[-2:]
'pA '
>>> word[:-2]
#
#
#
#
PYTHON
20
'Hel '
, -0 0 , !
# ( -0 0)
>>> word[-0]
'H'
, ()
.
>>> word[-100:]
'HelpA '
>>> word[-10]
#
Traceback (most recent call last):
File "<stdin >", line 1, in ?
IndexError : string index out of range
,
0. n
n, :
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0
-5
-4
-3
-2
-1
0...5 ;
. i j i j .
, . , word[1:
3] 2.
len() :
>>> s = 'supercalifragilisticexpialidocious '
>>> len(s)
34
PYTHON
21
See more:
Sequence Typesstr, bytes, bytearray, list, tuple, range
, .
String Methods
.
String Formatting
str.format() .
Old String Formatting Operations
Unicode % ,
.
3.1.3
, .
Unicode
PYTHON
22
, Python ,
Unicode .
encode() ,
, , .
.
>>> "pfel". encode ('utf -8')
b'\xc3\ x84pfel '
3.1.4
Python , . list,
().
.
>>> a = ['spam ', 'eggs ', 100 , 1234]
>>> a
['spam ', 'eggs ', 100 , 1234]
, 0 , , :
>>> a[0]
'spam '
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
['eggs ', 100]
>>> a[:2] + ['bacon ', 2*2]
['spam ', 'eggs ', 'bacon ', 4]
>>> 3*a[:3] + ['Boo!']
['spam ', 'eggs ', 100 , 'spam ', 'eggs ', 100 , 'spam ', 'eggs ',
100 , 'Boo!']
. ,
a :
>>> a[:]
PYTHON
23
, .
>>> a
['spam ', 'eggs ', 100 , 1234]
>>> a[2] = a[2] + 23
>>> a
['spam ', 'eggs ', 123 , 1234]
, ,
:
>>> # :
... a[0:2] = [1, 12]
>>> a
[1, 12 , 123 , 1234]
>>> # :
... a[0:2] = []
>>> a
[123 , 1234]
>>> # :
... a[1:1] = ['bletch ', 'xyzzy ']
>>> a
[123 , 'bletch ', 'xyzzy ', 1234]
>>> # ( )
>>> a[:0] = a
>>> a
[123 , 'bletch ', 'xyzzy ', 1234 , 123 , 'bletch ', 'xyzzy ', 1234]
>>> # :
>>> a[:] = []
>>> a
[]
len() :
>>> a = ['a', 'b', 'c', 'd']
>>> len(a)
4
() , :
>>> q = [2, 3]
>>>
>>>
3
>>>
[2,
>>>
2
PYTHON
24
p = [1, q, 4]
len(p)
p[1]
3]
p[1][0]
:
>>>
>>>
[1,
>>>
[2,
, p[1] q !
.
3.2
, Python 2 + 2 . ,
Fibonacci :
>>>
...
...
>>>
...
...
...
1
1
2
3
5
8
# Fibonacci :
#
a, b = 0, 1
while b < 10:
print(b)
a, b = b, a+b
PYTHON
25
: a b 0 1.
,
. .
(: b < 10) , while .
Python , C , ; .
, ; ,
. . C
: < (), > (), == (), <= (), >= (
) != ().
: Python . Python (
!) , ,
. , Python
; .
, (
). ,
.
print() . (
) print()
. ,
, ,
>>> i = 256*256
>>> print ('Thevalueofiis ', i)
The value of i is 65536
end ,
:
>>> a, b = 0, 1
>>> while b < 1000:
...
print (b, end=',')
...
a, b = b, a+b
26
...
1,1,2,3,5,8,13 ,21 ,34 ,55 ,89 ,144 ,233 ,377 ,610 ,987 ,
while , Python
, .
4.1
if
if . :
4.2
for
Python for C Pascal .
Pascal , C
6
27
, Python for (
) , . FOR
(;-) example:
>>> # :
... a = ['cat ', 'window ', 'defenestrate ']
>>> for x in a:
...
print(x, len(x))
...
cat 3
window 6
defenestrate 12
(
), .
. :
>>> for x in a[:]: #
...
if len(x) > 6: a. insert (0, x)
...
>>> a
['defenestrate ', 'cat ', 'window ', 'defenestrate ']
4.3
range()
, range() .
:
>>> for i in range (5):
...
print(i)
...
0
1
2
3
4
; range(10) 10 ,
10 . range ,
28
(; ):
range(5, 10)
5 through 9
range(0, 10 , 3)
0, 3, 6, 9
range(-10 , -100 , -30)
-10 , -40 , -70
, range() len():
>>> a = ['Mary ', 'had ', 'a', 'little ', 'lamb ']
>>> for i in range (len(a)):
...
print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
, enumerate() , .
range :
>>> print(range(10))
range(0, 10)
, range() ,
. range() : ,
, , .
(iterable), ,
.
for . list() ,
:
>>> list(range(5))
[0, 1, 2, 3, 4]
4.4
29
else ; :
(for ), , (while ),
break .
:
>>> for n in range (2, 10):
...
for x in range (2, n):
...
if n % x == 0:
...
print (n, 'equals ', x, '*', n//x)
...
break
...
else:
...
# loop fell through without finding a factor
...
print (n, 'isaprime number ')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
(, . : else for , if )
, else try
if : try else
, else break .
try .
continue C ,
.
>>> for n in range (2, 10):
...
for x in range (2, n):
...
if n % x == 0:
...
print (n, 'equals ', x, '*', n//x)
...
break
30
...
else:
...
#
...
print (n, 'isaprime number ')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
4.5
pass
pass . , ,
. :
>>> while True:
...
pass # (Ctrl+C)
...
:
>>> class MyEmptyClass :
...
pass
...
pass , ,
, . pass :
>>> def initlog (*args):
...
pass
# !
...
4.6
(Fibonacci)
>>>
...
...
...
...
...
...
...
>>>
...
0 1
31
def fib(n):
# Fibonacci n
""" n Fibonacci ."""
a, b = 0, 1
while a < n:
print (a, end='')
a, b = b, a+b
print()
# :
fib(2000)
1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
def .
. , .
; ,
docstring. ()
,
; , , .
, (symbol table) .
, ;
, ,
, . ,
, ( global ).
; ,
(, ).7
, , .
.
,
. :
>>> fib
< function fib at 10042ed0 >
7
, , ,
().
32
>>> f = fib
>>> f(100)
0 1 1 2 3 5 8 13 21 34 55 89
, fib , ,
. , return ,
. None ().
None, . ,
print():
>>> fib(0)
>>> print(fib(0))
None
Fibonacci , :
>>>
...
...
...
...
...
...
...
...
>>>
>>>
[0,
, Python :
return . return
None. return None.
result.append(a) result .
obj.methodname , obj
(), methodname
. .
. (
33
, ) append()
; . ,
result= result+ [a], .
4.7
, .
4.7.1
.
. :
def ask_ok (prompt , retries =4, complaint ='Yesorno , please !')
:
while True:
ok = input ( prompt )
if ok in ('y', 'ye ', 'yes '):
return True
if ok in ('n', 'no ', 'nop ', 'nope '):
return False
retries = retries - 1
if retries < 0:
raise IOError ('refusenik user ')
print( complaint )
:
: ask_ok('Doyoureallywanttoquit?')
: ask_ok('OKtooverwritethefile?',2)
: ask_ok('OKtooverwritethefile?',2,'Comeon,
onlyyesorno!')
, in .
, :
i = 5
def f(arg=i):
34
print(arg)
i = 6
f()
5.
: .
, , , . ,
:
def f(a, L=[]):
L. append (a)
return L
print(f(1))
print(f(2))
print(f(3))
:
[1]
[1, 2]
[1, 2, 3]
, :
def f(a, L=None):
if L is None:
L = []
L. append (a)
return L
4.7.2
keyword= value . ,
:
def parrot (voltage , state ='astiff ', action ='voom ', type='
Norwegian Blue '):
print("--This parrot wouldn 't", action , end='')
35
:
parrot (1000)
parrot ( action = 'VOOOOOM ', voltage = 1000000 )
parrot ('a thousand ', state = 'pushing upthe daisies ')
parrot ('a million ', 'bereft oflife ', 'jump ')
:
parrot ()
parrot ( voltage =5.0, 'dead ')
parrot (110 , voltage =220)
parrot (actor='John Cleese ')
#
#
#
#
, .
(, actor parrot
), .
(, parrot(voltage=1000) ).
. :
>>> def function (a):
...
pass
...
>>> function (0, a=0)
Traceback (most recent call last):
File "<stdin >", line 1, in ?
TypeError : function () got multiple values for keyword
argument 'a'
**name , ,
() .
*name () ,
.(*name **name
) , :
36
:
cheeseshop (" Limburger ", "It'sveryrunny ,sir.",
"It's really very ,VERYrunny ,sir.",
shopkeeper =" Michael Palin",
client ="John Cleese ",
sketch =" Cheese Shop Sketch ")
:
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
---------------------------------------client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
, keys()
; , .
4.7.3
, ,
. (). ,
:
37
, variadic ,
. *arg
, ,
.
>>> def concat (*args , sep="/"):
...
return sep.join(args)
...
>>> concat (" earth ", "mars", "venus")
'earth/mars/ venus '
>>> concat (" earth ", "mars", "venus", sep=".")
'earth.mars. venus '
4.7.4
: ,
. , range()
. (
), *-
:
>>>
[3,
>>>
>>>
[3,
list(range(3, 6))
4, 5]
args = [3, 6]
list(range(*args))
4, 5]
, **-:
>>> def parrot (voltage , state ='astiff ', action ='voom '):
...
print("--This parrot wouldn 't", action , end='')
...
print("ifyouput", voltage , " volts through it.", end
='')
...
print("E's", state , "!")
...
38
>>> d = {" voltage ": "four million ", " state ": " bleedin '
demised ", " action ": "VOOM"}
>>> parrot (**d)
-- This parrot wouldn 'tVOOMifyouputfour million volts
through it.E's bleedin ' demised !
4.7.5
Lambda
, Lisp
Python. lambda, .
: lambda a, b: a+b. Lambda
. .
, lambda :
>>>
...
...
>>>
>>>
42
>>>
43
4.7.6
.
. ,
, (
). , .8
, ,
.
, .
8
: , E .
39
Python ,
, . .
. (
.) .
, , .
( 8 ).
:
>>> def my_function ():
...
""" Do nothing , but document it.
...
...
No , really , it doesn 't do anything .
...
"""
...
pass
...
>>> print( my_function . __doc__ )
Do nothing , but document it.
No , really , it doesn 'tdo anything .
4.8
:
, Python ,
. (: ) ;
. ,
.
Python, :pep:8 ;
. Python
; :
4-, .
4 () ()
. , .
40
(Wrap), 79 .
,
.
, .
.
.
, ,
: a = f(1, 2) + g(3, 4).
; , CamelCase ,
lower_case_with_underscres . self
(:ref: <tut-rstclasses>
).
, . Python
UTF-8, ASCII .
, ,
ASCII .
,
.
5.1
:
list.append(x)
; a[len(a):]=[x].
9
41
list.extend(L)
; a[len(a):]=L.
list.insert(i, x)
.
, a.insert(0,x) , a.insert(len(a),x
) a.append(x).
list.remove(x)
x . ,
.
list.pop([i])
, . , a.pop
. ( i
, . Python
.)
list.index(x)
x . ,
.
list.count(x)
x .
list.sort()
.
list.reverse()
.
:
>>> a = [66.25 , 333 , 333 , 1, 1234.5]
>>> print(a. count (333), a.count(66.25), a.count ('x'))
2 1 0
>>> a. insert (2, -1)
>>> a. append (333)
>>> a
[66.25 , 333 , -1, 333 , 1, 1234.5, 333]
42
>>> a.index(333)
1
>>> a. remove (333)
>>> a
[66.25 , -1, 333 , 1, 1234.5, 333]
>>> a. reverse ()
>>> a
[333 , 1234.5, 1, 333 , -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25 , 333 , 333 , 1234.5]
5.1.1
,
().
, append(). ,
pop(). :
>>>
>>>
>>>
>>>
[3,
>>>
7
>>>
[3,
>>>
6
>>>
5
>>>
[3,
stack = [3, 4, 5]
stack. append (6)
stack. append (7)
stack
4, 5, 6, 7]
stack.pop()
stack
4, 5, 6]
stack.pop()
stack.pop()
stack
4]
5.1.2
43
,
(); , .
, (
).
, collection.deque,
. :
>>> from collections import deque
>>> queue = deque (["Eric", "John", " Michael "])
>>> queue. append ("Terry ")
# Terry
>>> queue. append (" Graham ")
# Graham
>>> queue. popleft ()
#
'Eric '
>>> queue. popleft ()
#
'John '
>>> queue
# ,
5.1.3
.
, ,
.
, , ,
for , for if . for
if . ,
.
:
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12 , 18]
44
:
>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
:
>>> freshfruit = [' banana ', ' loganberry ', 'passion fruit
']
>>> [ weapon . strip () for weapon in freshfruit ]
['banana ', 'loganberry ', 'passion fruit ']
if :
>>> [3*x for x in vec if x > 3]
[12 , 18]
>>> [3*x for x in vec if x < 2]
[]
, :
>>> [x, x**2 for x in vec] # error - parens required for
tuples
File "<stdin >", line 1, in ?
[x, x**2 for x in vec]
^
SyntaxError : invalid syntax
>>> [(x, x**2) for x in vec]
[(2, 4), (4, 16), (6, 36)]
:
>>>
>>>
>>>
[8,
>>>
[6,
>>>
[8,
vec1 = [2, 4, 6]
vec2 = [4, 3, -9]
[x*y for x in vec1 for y in vec2]
6, -18 , 16 , 12 , -36 , 24 , 18 , -54]
[x+y for x in vec1 for y in vec2]
5, -7, 8, 7, -5, 10 , 9, -3]
[vec1[i]*vec2[i] for i in range(len(vec1))]
12 , -54]
45
5.1.4
, .
, .
, 3 3 ,
, :
>>> mat = [
...
[1, 2, 3],
...
[4, 5, 6],
...
[7, 8, 9],
...
]
, , :
>>> print([[row[i] for row in mat] for i in [0, 1, 2]])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
:
.
, :
for i in [0, 1, 2]:
for row in mat:
print(row[i], end="")
print()
, . , zip()
.
>>> list(zip(*mat))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
5.2
46
del
, : del
. pop() . del
, ().
:
>>>
>>>
>>>
[1,
>>>
>>>
[1,
>>>
>>>
[]
del :
>>> del a
a ().
del .
5.3
, .
47
, , ;
, (
).
. : (x, y) , .
: (
). , .
0 1 : ,
. ;
().
, . :
>>> empty = ()
>>> singleton = 'hello ',
>>> len(empty)
0
>>> len( singleton )
1
>>> singleton
('hello ' ,)
# <--
t = 12345,54321,'hello!' : 12345,
54321 'hello!' . , :
>>> x, y, z = t
.
. ,
. (, )
48
(Set)
5.4
Python (set) . .
. (union),
(intersection), (dierence), (sysmmetric dierence)
.
set() . :
set(), {}; ,
.
:
>>> basket = {'apple ', 'orange ', 'apple ', 'pear ', 'orange ', '
banana '}
>>> print( basket )
#
{'orange ', 'banana ', 'pear ', 'apple '}
>>> 'orange ' in basket
#
True
>>> 'crabgrass ' in basket
False
>>> #
...
>>> a = set('abracadabra ')
>>> b = set('alacazam ')
>>> a
# a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b
# a b
, :
49
5.5
dict). .
, ,
; . ,
; , ,
. , , , append()
extend() .
: , (
). : {}.
::. .
,
. del : .
, .
.
list(d.keys()) ,
(, sorted(d.keys())).10
, in .
:
>>> tel = {'jack ': 4098 , 'sape ': 4139}
>>> tel['guido '] = 4127
>>> tel
{'sape ': 4139 , 'guido ': 4127 , 'jack ': 4098}
>>> tel['jack ']
10
50
4098
>>> del tel['sape ']
>>> tel['irv '] = 4127
>>> tel
{'guido ': 4127 , 'irv ': 4127 , 'jack ': 4098}
>>> list(tel.keys())
['irv ', 'guido ', 'jack ']
>>> sorted (tel.keys())
['guido ', 'irv ', 'jack ']
>>> 'guido ' in tel
True
>>> 'jack ' not in tel
False
dict() -, ,
:
>>> dict([('sape ', 4139), ('guido ', 4127), ('jack ', 4098)])
{'sape ': 4139 , 'jack ': 4098 , 'guido ': 4127}
>>> dict([(x, x**2) for x in (2, 4, 6)])
#
{2: 4, 4: 16 , 6: 36}
, , dict()
. ,
:
>>> dict(sape=4139 , guido=4127 , jack=4098)
{'sape ': 4139 , 'jack ': 4098 , 'guido ': 4127}
5.6
, items() .
>>> knights = {'gallahad ': 'thepure ', 'robin ': 'thebrave '}
>>> for k, v in knights .items():
...
print(k, v)
...
gallahad the pure
robin the brave
51
, enumerate()
.
>>> for i, v in enumerate (['tic ', 'tac ', 'toe ']):
...
print(i, v)
...
0 tic
1 tac
2 toe
, zip()
>>> questions = ['name ', 'quest ', 'favorite color ']
>>> answers = ['lancelot ', 'theholy grail ', 'blue ']
>>> for q, a in zip(questions , answers ):
...
print('Whatisyour{0}?Itis{1}.'. format (q, a))
...
What is your name? It is lancelot .
What is your quest? It is the holy grail .
What is your favorite color? It is blue.
, , reversed()
>>> for i in reversed (range(1, 10 , 2)):
...
print(i)
...
9
7
5
3
1
, sorted() ,
>>> basket = ['apple ', 'orange ', 'apple ', 'pear ', 'orange ', '
banana ']
>>> for f in sorted (set( basket )):
...
print(f)
...
apple
banana
orange
52
pear
5.7
while if ,
.
in not in .
is is not ;
.
, .
. , a < b == c a b b c
.
() and or ,
not .
;
, not , or , A and not B or C
(A and (not B)) or C . , .
and or : ,
.
, A C , B , A and B and C
C.
,
.
. ,
>>> string1 , string2 , string3 = '', 'Trondheim ', 'Hammer
Dance '
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim '
53
, Python , C, . C
, C , :
== =.
5.8
. :
, , ;
, , .
, .
, , .
(initial sub-sequence),
.
Unicode .
:
(1, 2, 3)
< (1, 2, 4)
[1, 2, 3]
< [1, 2, 4]
'ABC ' < 'C' < 'Pascal ' < 'Python '
(1, 2, 3, 4)
< (1, 2, 4)
(1, 2)
< (1, 2, -1)
(1, 2, 3)
== (1.0, 2.0, 3.0)
(1, 2, ('aa ', 'ab'))
< (1, 2, ('abc ', 'a'), 4)
, < > ,
. ,
, 0 0.0, . , ,
TypeError .
54
11
Python ,
() . , ,
, .
. ,
. ,
.
Python , ,
. ;
(import) (
).
Python .
.py. , ()
__name__ . ,
fibo.py , :
# Fibonacci
def fib(n):
# n Fibonacci
a, b = 0, 1
while b < n:
print(b, end='')
a, b = b, a+b
print()
def fib2(n): # n Fibonacci
result = []
a, b = 0, 1
while b < n:
result . append (b)
a, b = b, a+b
return result
11
55
Python (import) :
>>> import fibo
fibo (import)
; fibo. :
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13 , 21 , 34 , 55 , 89]
>>> fibo. __name__
'fibo '
, :
>>> fib = fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
6.1
, .
. .
12
,
. ,
. , ,
modname.itemname .
. import (
, ) , .
.
import , (,
) . :
12
, ;
.
56
(, fibo ).
:
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
(_) . , Python
, ,
.
: , * ,
. , .
Note:
,
. , - ,
, imp.reload(),
.
6.1.1
importimp; imp.reload(modulename).
Python
python fibo.py < arguments >
, , __name__
"__name__". :
if __name__ == " __main__ ":
import sys
fib(int(sys.argv[1]))
57
, ,
(main) :
$ python fibo.py 50
1 1 2 3 5 8 13 21 34
, :
>>> import fibo
>>>
, (
).
6.1.2
spam ,
spam.py , , sys.path
spam.py . sys.path :
().
PYTHONPATH (, shell PATH ).
.
, Python sys.path. ,
.
, Python .
, . .
6.1.3
Python
, spam.py
spam.pyc , spam
. spam.pyc spam.py
spam.pyc , , .pyc .
58
, spam.pyc . spam.py
, spam.pyc. ,
; ,
spam.pyc , . spam.pyc
, , Python
.
:
-O Python , python ,
.pyo . assert .
-O , bytecode ; .pyc , .py
.
-O Python (-OO)
, . ,
__doc__ , .pyo
. , ,
, .
.pyc .pyo , .py
; .
, .pyc
.pyo . , ,
, .
.pyc .pyo .
, spam.pyc ( spam.pyo -O
) spam.py . Python
, .
compileall .pyc (
.pyo , -O ).
6.2
59
Python , : Python (
) .
; ,
, , ,
.
, , winreg
Windows . : sys,
Python . sys.ps1 sys.ps2
:
>>> import sys
>>> sys.ps1
'>>>'
>>> sys.ps2
'...'
>>> sys.ps1 = 'C>'
C> print('Yuck!')
Yuck!
C>
, .
sys.path ,
. PATHONPATH ,
PYTHONPATH , .
:
>>> import sys
>>> sys.path. append ('/ufs/guido/lib/ python ')
6.3
dir()
dir() .
60
, dir() .
>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir()
['__builtins__ ', '__doc__ ', '__file__ ', '__name__ ', 'a', 'fib
', 'fibo ', 'sys ']
, : , , , .
dir() . ,
buildin
>>> import builtins
>>> dir( builtins )
['ArithmeticError ', 'AssertionError ', 'AttributeError ', '
BaseException ', 'BlockingIOError ', 'BrokenPipeError ', '
BufferError ', 'BytesWarning ', 'ChildProcessError ', '
ConnectionAbortedError ', 'ConnectionError ', '
ConnectionRefusedError ', 'ConnectionResetError ', '
DeprecationWarning ', 'EOFError ', 'Ellipsis ', '
EnvironmentError ', 'Exception ', 'False ', 'FileExistsError '
, 'FileNotFoundError ', 'FloatingPointError ', '
FutureWarning ', 'GeneratorExit ', 'IOError ', 'ImportError ',
61
6.4
Python ,
. , A.B A B
. ,
, NumPy Python ,
.
(),
. (, : .wave,
62
.ai, .au), ,
. (
, , , ), ,
.
:
sound/
__init__.py
formats/
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/
__init__.py
echo.py
surround.py
reverse.py
...
filters/
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
, Python sys.path
63
.
__init__.py Python ;
, string,
. , __init__.py
, , __all__ ,
.
, :
import sound. effects .echo
sound.eects.echo . .
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
:
from sound. effects import echo
echo , ,
:
echo.echofilter(input, output, delay=0.7, atten=4)
:
from sound. effects .echo import echofilter
, echo , echolter()
.
, from packageimportitem ,
(), , ,
. import ; ,
. , ImportError.
, importitem.subitem.subsubitem ,
; , ,
.
64
6.4.1
, echo surround ,
from . . . import sound.eects . (
__all__ , .)
65
, import * ,
(that follow certain patterns, ),
.
, from Package import specific_submodule !
, , :
.
6.4.2
( sound ),
. , sound.filters.vocoder
sound.effects echo , from sound.effects
import echo.
, .
"__main__", Python
.
6.4.3
, __path__ . ,
, __init__.py .
; .
,
.
66
13
;
, . .
7.1
, : print()
. ( write() ;
sys.stdout . .)
, .
. ,
, . string
, ; .
str.format() .
string , .
, : ? , Python
: repr() str() .
str() , repr()
(
SyntaxError ). , str() repr()
. , ,
. .
:
>>> s = 'Hello , world .'
>>> str(s)
'Hello ,world.'
>>> repr(s)
"'Hello ,world.'"
>>> str(1.0/7.0)
13
67
:
>>> for x in range (1, 11):
...
print(repr(x).rjust(2), repr(x*x).rjust (3), end='')
...
# Note use of 'end ' on previous line 'end '
...
print(repr(x*x*x).rjust(4))
...
1
1
1
2
4
8
3
9
27
4 16
64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
>>> for x in range (1, 11):
...
print('{0:2d}{1:3d}{2:4d}'. format (x, x*x, x*x*x))
...
1
1
1
2
4
8
68
3
9
27
4 16
64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
(, print() :
.)
rjust() , ,
. , ljust() center().
, . ,
, ;
, . (,
, x.ljust(n)[:n].)
, zfill(), 0. :
>>> '12'.zfill(5)
'00012 '
>>> '-3.14'. zfill (7)
'-003.14'
>>> '3. 14159265359 '.zfill (5)
'3. 14159265359 '
str.format() :
>>> print('Wearethe{}whosay"{}!" '. format ('knights ', 'Ni
'))
We are the knights who say "Ni!"
69
format() ,
.
>>> print('This{food}is{ adjective }.'. format (
...
food='spam ', adjective ='absolutely horrible '))
This spam is absolutely horrible .
:
>>> print('The story of{0},{1},and{ other }.'. format ('Bill '
, 'Manfred ', other ='Georg '))
The story of Bill , Manfred , and Georg.
':' , .
.
>>> table = {'Sjoerd ': 4127 , 'Jack ': 4098 , 'Dcab ': 7678}
>>> for name , phone in table.items():
...
print('{0:10}==>{1:10d}'. format (name , phone))
...
Jack
==>
4098
Dcab
==>
7678
Sjoerd
==>
4127
70
, ,
.
, '[]' :
>>> table = {'Sjoerd ': 4127 , 'Jack ': 4098 , 'Dcab ': 8637678 }
>>> print('Jack:{0[Jack ]:d}; Sjoerd :{0[ Sjoerd ]:d};'
'Dcab:{0[Dcab ]:d}'. format ( table))
Jack: 4098; Sjoerd : 4127; Dcab: 8637678
table ** .
>>> table = {'Sjoerd ': 4127 , 'Jack ': 4098 , 'Dcab ': 8637678 }
>>> print('Jack:{Jack:d}; Sjoerd :{ Sjoerd :d};Dcab:{Dcab:d}
'. format (**table))
Jack: 4098; Sjoerd : 4127; Dcab: 8637678
vars() (
) .
str.format() , Format String Syntax.
7.1.1
% .
sprintf() , ,
. :
>>> import math
>>> print('The value ofPIis approximately %5.3f.' % math.pi
)
The value of PI is approximately 3.142.
str.format() , Python %
. ,
str.format().
old-string-formatting .
71
7.2
open() , :
open(filename, mode).
>>> f = open('/tmp/ workfile ', 'w')
. ,
. mode 'r' , 'w'
(), 'a' ;
. 'r+' . mode ; 'r'
.
, text mode , ,
, ( UTF-8). mode
'b' , binary mode :
. .
(text mode), ( Unix
\n, Windows \r\n ) \n \n
. ,
JPEG EXE . .
7.2.1
f .
, f.read(size),
, . size
. size ,
; , . , size
. , f.read()
('').
>>> f.read()
'Thisisthe entire file .\n'
72
>>> f.read()
''
f.readline() ;
(\n), ,
. ; f.readline() ,
, '\n' , .
>>> f. readline ()
'Thisisthe first lineofthefile .\n'
>>> f. readline ()
'Second lineofthefile\n'
>>> f. readline ()
''
f.readlines() .
sizehint, , .
, .
.
>>> f. readlines ()
['Thisisthe first lineofthefile .\n', 'Second lineofthe
file\n']
. , ,
:
>>> for line in f:
...
print(line , end='')
...
This is the first line of the file.
Second line of the file
, .
, .
f.write(string) string , .
>>> f.write('Thisisatest\n')
15
73
, :
>>> value = ('the answer ', 42)
>>> s = str( value)
>>> f.write(s)
18
f.tell() ,
. , f.seek(offset, from_what).
oset . from_what , 0
, 1 , 2 . from_what 0,
.
>>> f = open('/tmp/ workfile ', 'rb+')
>>> f.write(b'0123456789abcdef ')
16
>>> f.seek(5)
# Go to the 6th byte in the file
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # Go to the 3rd byte before the end
13
>>> f.read(1)
b'd'
( b ),
, (, seek(0, 2) ).
, f.close() ,
. f.close() , .
>>> f.close()
>>> f.read()
Traceback (most recent call last):
File "<stdin >", line 1, in ?
ValueError : I/O operation on closed file
, with .
, , . try finally :
74
, isatty() trucate(),
; .
7.2.2
pickle
, . ,
read() , int() ,
'123' 123. ,
, , , , .
, Python
, pickle. Python (
Python ), ; pickling.
, unpickling. pickling unpickling
, , ,
.
x, f, pickle
:
pickle .dump(x, f)
pickle , f :
x = pickle .load(f)
(, pickling , ;
pickle .)
pickle Python ;
persistent (). pickle ,
75
Python , pickle
unpickle.
14
, , ,
. () : syntax error
exception , , .
8.1
, , Python
:
>>> while True print ('Helloworld ')
File "<stdin >", line 1, in ?
while True print ('Helloworld ')
^
SyntaxError : invalid syntax
, ,
. (
): , print() ,
(':'). ,
.
8.2
. exception , ,
: Python .
, , :
14
76
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin >", line 1, in ?
ZeroDivisionError : int division or modulo by zero
>>> 4 + spam*3
Traceback (most recent call last):
File "<stdin >", line 1, in ?
NameError : name 'spam ' is not defined
>>> '2' + 2
Traceback (most recent call last):
File "<stdin >", line 1, in ?
TypeError : Can 't convert 'int ' object tostr implicitly
. ,
:
ZeroDivisionError, NameError TypeError.
. ,
, ().
().
, ,
.
, stack traceback (
) . ;
.
Built-in Exceptions .
8.3
. ,
, ( Control-C
); , KeyboardInterrupt:
>>> while True:
...
try:
...
x = int(input (" Please enter a number :"))
...
...
...
77
break
except ValueError :
print ("Oops!Thatwasno valid number .Try
again ...")
...
try .
, try clause ( try except ) .
, except clause , try .
try , ,
. except ,
, try .
except ,
try ; , unhandled exception
.
try except , .
. Handler try ,
try Handler.
, , :
... except ( RuntimeError , TypeError , NameError ):
...
pass
, .
, !
, ():
import sys
try:
f = open('myfile .txt ')
s = f. readline ()
i = int(s. strip ())
except IOError as err:
print("I/O error :{0}". format (err))
except ValueError :
print(" Could not convert datatoan integer .")
78
except :
print(" Unexpected error:", sys. exc_info ()[0])
raise
else try ,
, .
, , .
.
except .
, instance.args. ,
__str__() , .args.
, , .
>>> try:
...
raise Exception ('spam ', 'eggs ')
... except Exception as inst:
...
print(type(inst))
# the exception instance
...
print(inst.args)
# arguments stored in .args
...
print(inst)
# __str__ allows args to be
printed directly ,
...
# but may be overridden in
exception subclasses
...
x, y = inst.args
# unpack args
...
print('x=', x)
...
print('y=', y)
...
<class 'Exception '>
79
, .
handler , try ,
. :
>>> def this_fails ():
...
x = 1/0
...
>>> try:
...
this_fails ()
... except ZeroDivisionError as err:
...
print('Handling run -timeerror:', err)
...
Handling run-time error : int division or modulo by zero
8.4
raise . :
raise .
( Exception ).
, ,
, :
>>> try:
...
raise NameError ('HiThere ')
... except NameError :
...
print('An exception flewby!')
...
raise
...
80
8.5
( tut-classes)
. Exception ,
. :
>>> class MyError ( Exception ):
...
def __init__ (self , value):
...
self. value = value
...
def __str__ (self):
...
return repr(self.value)
...
>>> try:
...
raise MyError (2*2)
... except MyError as e:
...
print('My exception occurred , value :', e.value)
...
My exception occurred , value: 4
>>> raise MyError ('oops!')
Traceback (most recent call last):
File "<stdin >", line 1, in ?
__main__ . MyError : 'oops!'
, Exception __init__() .
, ,
handler . ,
, , ,
:
class Error( Exception ):
""" Base class for exceptions in this module ."""
pass
class InputError ( Error):
81
Error , .
,
. tut-classes.
8.6
try , ,
. :
>>> try:
...
raise KeyboardInterrupt
82
... finally :
...
print('Goodbye ,world!')
...
Goodbye , world !
KeyboardInterrupt
*nally * try ,
. try , except (
except else ), finally
. finally try , break,
continue return. :
>>> def divide (x, y):
...
try:
...
result = x / y
...
except ZeroDivisionError :
...
print (" division byzero!")
...
else:
...
print (" result is", result )
...
finally :
...
print (" executing finally clause ")
...
>>> divide (2, 1)
result is 2.0
executing finally clause
>>> divide (2, 0)
division by zero!
executing finally clause
>>> divide ("2", "1")
executing finally clause
Traceback (most recent call last):
File "<stdin >", line 1, in ?
File "<stdin >", line 3, in divide
TypeError : unsupported operand type(s) for /: 'str ' and 'str '
, finally .
TypeError except ,
finally .
83
, finally , (
), .
8.7
, ,
. ,
.
for line in open(" myfile .txt"):
print(line)
, , .
,
. with .
with open(" myfile .txt") as f:
for line in f:
print(line)
, f , .
, ,
.
15
, Python .
C++ Modula-3 . Python
: ,
, .
. , Python :
, .
15
84
9.1
, ()
. . Python
, (, , )
. , lists, dictionaries,
, Python .
, . ,
, ;
,
Pascal .
9.2
Python
, Python .
,
. ,
Python .
85
.
.
Python , (),
.
, ,
z.real , real z . ,
: modname.funcname , modname
funcname .
:
!
16
. ,
. : modname.the_answer = 42.
:keyword:del . , del modname.the_answer
modname the_answer.
, .
Python , .
; ,
. ,
, __main__
, . (
; builtins.)
,
. (,
.) , .
Python , ,
. .
, .
16
. Module , __dict__,
. , , post-mortem debuggers
.
86
, :
, ,
, , ,
()
,
. , nonlocal
; nonlocal , (
, , )
.
, . ,
: .
.
.
, , . ,
, ,
, , ! (,
.)
Python global
.
. : del x x . ,
: , import ,
.
global ,
; nonlocal .
9.2.1
87
, global
nonlocal :
def scope_test ():
def do_local ():
spam = " local spam"
def do_nonlocal ():
nonlocal spam
spam = " nonlocal spam"
def do_global ():
global spam
spam = " global spam"
spam = "testspam"
do_local ()
print(" After local assignment :", spam)
do_nonlocal ()
print(" After nonlocal assignment :", spam)
do_global ()
print(" After global assignment :", spam)
scope_test ()
print("In global scope :", spam)
:
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
( ) scope_test spam.
nonlocal scope_test spam, global
.
global spam .
88
9.3
, , .
9.3.1
:
class ClassName :
< statement -1>
.
.
.
< statement -N>
, (def ) . (
if , .)
, ,
, .
, ,
.
, ,
, . ,
.
, class object . ,
; .
() ,
, ( ClassName).
9.3.2
: .
Python .
. :
89
class MyClass :
"""A simple example class """
i = 12345
def f(self):
return 'hello world '
, MyClass.i MyClass.f ,
. , MyClass.i
. __doc__ , docstring
: "A simple example class".
.
. ():
x = MyClass ()
, x.
( ) . ,
.
, __init__(), :
def __init__ (self):
self.data = []
__init__() , __init__()
, . ,
:
x = MyClass ()
, , __init__() .
, __init__(). ,
>>> class Complex :
...
def __init__ (self , realpart , imagpart ):
...
self.r = realpart
...
self.i = imagpart
...
90
9.3.3
?
. , .
data attribute Smalltalk instance variable, C++
data member. ; ,
. , x MyClass ,
16, :
x. counter = 1
while x. counter < 10:
x. counter = x. counter * 2
print(x. counter )
del x. counter
.
. ( Python , :
. , append, insert, remove, sort, .
, , , .)
. ,
, . , x.f
, MyClass.f , x.i ,
MyClass.i . x.f MyClass.f method
object, function object.
9.3.4
, :
x.f()
91
'hello world'.
? x.f()
, f() . ? , Python
...
, : , ,
. , x.f()
MyClass.f(x). , ( n ),
( n , ),
.
, .
, , .
,
, () , :
. ,
, .
9.4
; ,
bug, ,
. ,
(), ,
.
92
() . ,
. , Python
. (, Python C ,
; Python
.)
,
.
, ,
, .
(!) .
: ,
.
, self. : self
Python . , ,
, class browser .
, .
:
. :
# Function defined outside the class
def f1(self , x, y):
return min(x, x+y)
class C:
f = f1
def g(self):
return 'hello world '
h = g
f, g h C , , C
h g . .
self :
class Bag:
93
, .
, . (
.) , :
, ,
. , , ,
.
, class ( type) .
object.__class__.
9.5
, class .
:
class DerivedClassName ( BaseClassName ):
< statement -1>
.
.
.
< statement -N>
BaseClassName . ,
. , :
class DerivedClassName ( modname . BaseClassName ):
. ,
. : ,
94
. ,
.
: DerivedClassName()
. : ,
, , .
.
, . (
C++ : Python vitual .)
.
: BaseClassName.methodname(self,
arguments). . ( BaseClassName
.)
Python :
isinstance() : isinstance(obj, int)
obj.__class__ int True.
issubclass() : issubclass(bool,
int) True, bool int . , issubclass(float,
int) False float int .
9.5.1
Python . :
class DerivedClassName (Base1 , Base2 , Base3):
< statement -1>
.
.
.
< statement -N>
, , ,
, , , .
DerivedClassName , Base1, ()
95
Base1 , , Base2, .
, ; super() .
call-next-method ,
.
, (
). , object , object
. ,
, ,
, (,
. , .
http://www.python.org/download/releases/2.3/mro/.
9.6
Python , . ,
Python : ( _spam)
API (, ).
, .
(
), name mangling.
__spam , ()
_classname__spam, classname .
, .
, ; ,
. , , .
, exec() eval()
; global ,
. getattr(), setattr() delattr() ,
__dict__ .
9.7
96
, . :
class Employee :
pass
john = Employee () # Create an empty employee record
# Fill the fields of the record
john.name = 'JohnDoe '
john.dept = 'computer lab '
john. salary = 1000
Python ,
, .
, ,
, read() readline() ,
.
: m.__self__ m() ,
m.__func__ .
9.8
. ,
.
raise :
raise Class
raise Instance
, Class type .
:
raise Class()
97
except , , ,
( except
). , B, C, D:
class B( Exception ):
pass
class C(B):
pass
class D(C):
pass
for c in [B, C, D]:
try:
raise c()
except D:
print("D")
except C:
print("C")
except B:
print("B")
9.9
, , for
:
for element in [1, 2, 3]:
print( element )
for element in (1, 2, 3):
print( element )
for key in {'one ':1, 'two ':2}:
print(key)
for char in "123":
print(char)
98
, . Python .
, for iter().
, __next__() , .
, __next__() StopIteration , for
. next() __next__() ;
:
>>> s = 'abc '
>>> it = iter(s)
>>> it
< iterator object at 0x00A1DB50 >
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "<stdin >", line 1, in ?
next(it)
StopIteration
,
. __iter__() __next__() .
__next__() , __iter__() self:
class Reverse :
" Iterator for looping overa sequence backwards "
def __init__ (self , data):
self.data = data
self. index = len(data)
def __iter__ (self):
return self
def __next__ (self):
if self. index == 0:
99
raise StopIteration
self. index = self.index - 1
return self.data[self.index]
>>> rev = Reverse ('spam ')
>>> iter(rev)
< __main__ . Reverse object at 0x00A1DB50 >
>>> for char in rev:
...
print(char)
...
m
a
p
s
9.10
Generator () .
, , yield .
next() , (
). :
def reverse (data):
for index in range (len(data)-1, -1, -1):
yield data[index ]
>>> for char in reverse ('golf '):
...
print(char)
...
f
l
o
g
,
. __iter()
__next__().
100
, .
, , self.index
self.data.
, ,
StopIteration . ,
, .
9.11
, ,
.
. , ,
.
:
>>> sum(i*i for i in range (10))
squares
285
>>> xvec = [10 , 20 , 30]
>>> yvec = [7, 5, 3]
>>> sum(x*y for x,y in zip(xvec , yvec))
260
# sum of
# dot product
for word in
101
17
10.1
os :
>>> import os
>>> os. getcwd ()
# ( current working
directory )
'C:\\ Python32 '
>>> os.chdir('/ server / accesslogs ')
#
>>> os. system ('mkdir today ')
# shell mkdir
0
, shutil
:
>>> import shutil
>>> shutil . copyfile ('data.db', 'archive .db ')
>>> shutil .move('/build / executables ', 'installdir ')
17
10.2
102
glob ,
, :
>>> import glob
>>> glob.glob('*. py ')
['primes .py', 'random .py ', 'quote.py']
10.3
. sys
argv . , python demo.py
one two three , :
>>> import sys
>>> print(sys.argv)
['demo.py', 'one ', 'two ', 'three ']
10.4
sys.exit().
10.5
103
re , .
, :
>>> import re
>>> re. findall (r'\bf[a-z]* ', 'whichfootorhandfell fastest
')
['foot ', 'fell ', 'fastest ']
>>> re.sub(r'(\b[a-z]+)\1', r'\1', 'catinthethehat ')
'catinthehat '
, ,
:
>>> 'teafortoo '. replace ('too ', 'two ')
'teafortwo '
10.6
math C :
>>> import math
>>> math.cos(math.pi / 4)
0. 70710678118654757
>>> math.log(1024 , 2)
10.0
random :
>>> import random
>>> random . choice (['apple ', 'pear ', 'banana '])
'apple '
>>> random . sample (range (100), 10)
#
[30 , 83 , 16 , 4, 8, 81 , 41 , 50 , 18 , 33]
>>> random . random ()
#
0. 17970987693706186
>>> random . randrange (6)
# range(6)
104
Scipy <http://scipy.org> .
10.7
python .
, urllib.request ,
smtplib :
>>> from urllib . request import urlopen
>>> for line in urlopen ('http :// tycho.usno.navy.mil/cgi -bin/
timer .pl '):
...
line = line. decode ('utf -8') #
...
if 'EST ' in line or 'EDT ' in line: #
...
print (line)
<BR>Nov. 25 , 09:43:32 PM EST
>>> import smtplib
>>> server = smtplib .SMTP('localhost ')
>>> server . sendmail ('soothsayer@example .org ', '
jcaesar@example .org ',
... """ To: jcaesar@example .org
... From: soothsayer@example .org
...
... Beware the Ides of March.
... """)
>>> server .quit()
(. )
10.8
datetime ,
. ,
. .
>>> # dates are easily constructed and formatted
105
10.9
, : zlib,
gzip, zipfile tarfile.
>>> import zlib
>>> s = b'witch which haswhich witches wrist watch '
>>> len(s)
41
>>> t = zlib. compress (s)
>>> len(t)
37
>>> zlib. decompress (t)
b'witchwhichhaswhich witches wrist watch '
>>> zlib.crc32(s)
226805979
10.10
Python
. Python ,
.
106
,
. timeit , :
>>> from timeit import Timer
>>> Timer('t=a;a=b;b=t', 'a=1;b=2'). timeit ()
0. 57535828626024577
>>> Timer('a,b=b,a', 'a=1;b=2'). timeit ()
0. 54962537085770791
10.11
, ,
, , ,
.
doctest
.
, .
, . , :
def average ( values ):
""" Computes the arithmetic mean of a list of numbers .
>>> print( average ([20 , 30 , 70]))
40.0
"""
return sum( values ) / len( values )
import doctest
doctest . testmod ()
unittest doctest ,
, :
import unittest
107
10.12
108
18
.
.
11.1
reprlib
repr(),
>>> import reprlib
>>> reprlib .repr(set('supercalifragilisticexpialidocious '))
"set (['a','c','d','e','f','g', ...]) "
pprint ,
. ,
pretty printer ,
:
>>> import pprint
>>> t = [[[['black ', 'cyan '], 'white ', ['green ', 'red ']], [['
magenta ',
...
'yellow '], 'blue ']]]
...
>>> pprint . pprint (t, width =30)
[[[['black ', 'cyan '],
'white ',
['green ', 'red ']],
[['magenta ', 'yellow '],
'blue ']]]
textwrap :
>>> import textwrap
>>> doc = """ The wrap () method is just like fill () except
that it returns
... a list of strings instead of one big string with newlines
to separate
18
109
locale .
locale , ,
:
>>> import locale
>>> locale . setlocale ( locale .LC_ALL , 'English_United States .
1252 ')
'English_United States .1252 '
>>> conv = locale . localeconv ()
#
>>> x = 1234567 .8
>>> locale . format ("%d", x, grouping =True)
'1,234 ,567 '
>>> locale . format_string ("%s%.*f", (conv['currency_symbol '],
...
conv['frac_digits '], x), grouping =
True)
'$1 ,234 ,567.80 '
11.2
string Template ,
, .
.
$ Python
.
. $$ $
>>> from string import Template
>>> t = Template ('${ village }folksend$$10to $cause .')
110
, substitute()
KeyError . mail-merge ,
, , safe_substitute()
, :
>>> t = Template ('Return the$itemto $owner .')
>>> d = dict(item='unladen swallow ')
>>> t. substitute (d)
Traceback (most recent call last):
. . .
KeyError : 'owner '
>>> t. safe_substitute (d)
'Return the unladen swallow to $owner .'
Template . ,
, ,
:
>>> import time , os.path
>>> photofiles = ['img_1074 .jpg ', 'img_1076 .jpg ', 'img_1077 .
jpg ']
>>> class BatchRename ( Template ):
...
delimiter = '%'
>>> fmt = input('Enter rename style(%d-date%n- seqnum %fformat ):')
Enter rename style (%d-date %n- seqnum %f- format ): Ashley_ %n%
f
>>> t = BatchRename (fmt)
>>> date = time. strftime ('%d%b%y')
>>> for i, filename in enumerate ( photofiles ):
...
base , ext = os.path. splitext ( filename )
...
newname = t. substitute (d=date , n=i, f=ext)
...
print('{0} -->{1}'. format (filename , newname ))
img_1074 .jpg --> Ashley_0 .jpg
img_1076 .jpg --> Ashley_1 .jpg
111
. XML
html .
11.3
11.4
112
.
.
threading
:
import threading , zipfile
class AsyncZip ( threading . Thread ):
def __init__ (self , infile , outfile ):
threading . Thread . __init__ (self)
self. infile = infile
self. outfile = outfile
def run(self):
f = zipfile . ZipFile (self.outfile , 'w', zipfile .
ZIP_DEFLATED )
f.write(self. infile )
f.close()
print('Finished background zipof:', self. infile )
background = AsyncZip ('mydata .txt ', 'myarchive .zip ')
background . start ()
print('Themain program continues torunin foreground .')
background .join()
#
print('Main program waited until background wasdone.')
. , ,
.
,
. ,
, queue .
Queue
, , .
11.5
113
logging .
, sys.stderr:
import logging
logging .debug('Debugging information ')
logging .info('Informational message ')
logging . warning ('Warning : config file%snotfound ', 'server .
conf ')
logging .error('Error occurred ')
logging . critical ('Critical error-- shutting down ')
:
WARNING :root: Warning : config file server .conf not found
ERROR:root: Error occurred
CRITICAL :root: Critical error -- shutting down
, , .
HTTP
. ,
: DEBUG, INFO, WARING, ERROR, CRITICAL.
Python ,
, .
11.6
Python
garbage collection .
.
, ,
. ,
. weakref
. ,
114
weakref weadref .
:
>>> import weakref , gc
>>> class A:
...
def __init__ (self , value):
...
self.value = value
...
def __repr__ (self):
...
return str(self.value)
...
>>> a = A(10)
#
>>> d = weakref . WeakValueDictionary ()
>>> d['primary '] = a
#
>>> d['primary ']
#
10
>>> del a
#
>>> gc. collect ()
#
0
>>> d['primary ']
#
Traceback (most recent call last):
File "<stdin >", line 1, in < module >
d['primary ']
#
File "C:/ python31 /lib/ weakref .py", line 46 , in __getitem__
o = self.data[key]()
KeyError : 'primary '
11.7
.
.
array array() ,
, .
H) Python
list 16 :
>>> from array import array
>>> a = array('H', [4000 , 10 , 700 , 22222 ])
>>> sum(a)
26932
115
>>> a[1:3]
array('H', [10 , 700])
cllections deque() ,
apend pop , .
:
>>> from collections import deque
>>> d = deque([" task1 ", "task2", " task3 "])
>>> d. append (" task4 ")
>>> print(" Handling ", d. popleft ())
Handling task1
unsearched = deque ([ starting_node ])
def breadth_first_search ( unsearched ):
node = unsearched . popleft ()
for m in gen_moves (node):
if is_goal (m):
return m
unsearched . append (m)
, , bisect ,
:
>>> import bisect
>>> scores = [(100 , 'perl '), (200 , 'tcl '), (400 , 'lua '), (500
, 'python ')]
>>> bisect . insort (scores , (300 , 'ruby '))
>>> scores
[(100 , 'perl '), (200 , 'tcl '), (300 , 'ruby '), (400 , 'lua '), (
500 , 'python ')]
heapq .
.
:
>>>
>>>
>>>
>>>
>>>
116
[-5, 0, 1]
11.8
decimal Decimal
. float ,
,
,
, , ,
.
, 5,
, . ,
:
>>> from decimal import *
>>> round( Decimal ('0.70 ') * Decimal ('1.05 '), 2)
Decimal ('0.74')
>>> round(.70 * 1.05 , 2)
0.73
Decimal 0,
. Decimal ,
.
Exact representation enables the Decimal class to perform modulo calculations and equality tests that are unsuitable for binary oating point:
>>> Decimal ('1.00 ') % Decimal ('.10')
Decimal ('0.00')
>>> 1.00 % 0.10
0. 09999999999999995
>>> sum([ Decimal ('0.1')]*10) == Decimal ('1.0')
True
117
Decimal ,
:
>>> Decimal ('1.00 ') % Decimal ('.10')
Decimal ('0.00')
>>> 1.00 % 0.10
0. 09999999999999995
>>> sum([ Decimal ('0.1')]*10) == Decimal ('1.0')
True
>>> sum([0.1]*10) == 1.0
False
decimal :
>>> getcontext ().prec = 36
>>> Decimal (1) / Decimal (7)
Decimal ('0. 142857142857142857142857142857142857 ')
?19
, Python
Python . ,
?
This tutorial is part of Pythons documentation set. Some other documents in the set are:
Python . :
The Python Standard Library:
, () ,
, , . Python ,
. Unix , HTTP ,
19
118
, , CGI , , .
.
Installing Python Modules Python
.
The Python Language Reference: Python
. ,
.
Python :
http://www.python.org: Python . , ,
Python . ,
, , ; ,
.
http://docs.python.org: Python .
http://pypi.python.org: Python , Cheese Shop,
Python , .
, , .
http://aspn.activestate.com/ASPN/Python/Cookbook/: Python Cookbook , , .
, Python Cookbook (OReilly & Associates, ISBN 0-596-00797-3.)
http://scipy.org: Python .
, , , , , .
Python , comp.lang.python
, python-list@python.org .
, .
120 ( ), ( ) , ,
. , Frequently Asked Questions (
FAQ), Python Misc/ .
http://mail.python.org/pipermail/ . FAQ
119
, .
20
Python ,
Korn shell GNU Bash shell . GNU Readline ,
Emacs vi . ,
; .
Unix, Cygwin .
* * Mark Hammond PythonWin
Python , Tk IDLE. NT
DOS Windows , .
13.1
, , .
Emacs . : C-A (ControlA) , C-E , C-B , C-F .
, C-D . C-K
, C-Y . C-underscore
; .
13.2
.
, , . C-P
, C-N . ;
, . Return ()
. C-R ; C-S .
20
13.3
120
Readline ~/.inputrc .
:
key-name: function -name
:
" string ": function -name
:
set option -name value
:
# I prefer vi - style editing :
set editing -mode vi
# Edit using a single line:
set horizontal - scroll -mode On
# Rebind some keys:
Meta-h: backward -kill-word
"\C-u": universal - argument
"\C-x\C-r": re-read-init-file
~/.inputrc . (, .)
. ,
:
21
21
, Python ,
PYTHONSTARTUP .
121
Tab , Tab ;
Python , , .
string.a, ,
. , ,
__getattr__() .
.
; , ,
.
, os,
.
# Add auto - completion and a stored history file of commands
to your Python
# interactive interpreter . Requires Python 2.0+, readline .
Autocomplete is
# bound to the Esc key by default (you can change it - see
readline docs).
#
# Store the file in ~/. pystartup , and set an environment
variable to point
# to it: " export PYTHONSTARTUP =/ home/user /. pystartup " in
bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have
to put in the
# full path to your home directory .
import
import
import
import
atexit
os
readline
rlcompleter
122
import readline
readline . write_history_file ( historyPath )
if os.path. exists ( historyPath ):
readline . read_history_file ( historyPath )
atexit . register ( save_history )
del os , atexit , readline , rlcompleter , save_history ,
historyPath
13.4
, ; ,
: (
). .
, .
IPython , tab ,
, . , .
bpython.
: 22
. , :
0.125
123
, .
, , ,
.
. 1/3 .
:
0.3
,
0.33
,
0.333
. , 1/3,
1/3.
, , 0.1 .
,
0.0001100110011001100110011001100110011001100110011...
, .
, , 53 ,
2 . 1/10, 3602879701896397 / 2 ** 55.
, .
. Python
, .
, Python ,
, 0.1
>>> 0.1
0. 1000000000000000055511151231257827021181583404541015625
124
, Python
:
>>> 1 / 10
0.1
, 1/10 ,
.
, . , 0.1
0.10000000000000001 0.1000000000000000055511151231257827021181583404541015625
3602879701896397 / 2 ** 55 .
, eval(repr(x)) == x.
, Python repr() 17 ,
0.10000000000000001 . Python 3.1 , Python (),
0.1.
, : Python
bug, bug .
(,
).
,
:
>>> format (math.pi , '.12g ')
'3. 14159265359 '
>>> repr(math.pi)
'3. 141592653589793 '
, , , :
.
125
. , 0.1 1/10,
0.1 0.3:
>>> .1 + .1 + .1 == .3
False
, round()
, :
>>> round(.1 + .1 + .1, 10) == round(.3, 10)
True
, . 0.1
, Representation Error .
, The Perils of Floating Point.
, . , .
Python , ,
1/2**53 . ,
, , .
, ,
, , . str()
, str.format() , Format
String Syntax (http://docs.python.org/library/string.html#formatstrings).
, decimal ,
.
fractions , ( 1/3
).
126
, Python
, SciPy .
<http://scipy.org>.
Python .
float.as_integer_ratio() :
>>> x = 3.14159
>>> x. as_integer_ratio ()
( 3537115888337719 , 1125899906842624 )
, :
>>> x == 3537115888337719 / 1125899906842624
True
float.hex() ,
:
>>> x.hex()
'0x1. 921f9f01b866ep +1'
, :
>>> x == float. fromhex ('0x1. 921f9f01b866ep +1')
True
, Python ()
, ( java C99).
math.fsum() .
. .
.
>>> sum([0.1] * 10) == 1.0
False
>>> math.fsum([0.1] * 10) == 1.0
True
14.1
127
0.1 , .
.
Representation error , ()
. ,
Python ( Perl, C, C++, Java, Fortran, )
.
? 1/10 .
(2000 11 ) IEEE-754 ,
Python IEEE-754 double . 754 doubles
53 , , 0.1 ,
J/2**N , J 53 . :
1 / 10 ~= J / (2**N)
:
J ~= 2**N / 10
2**56 // 10
< 2**53
, 56 J 53 N . J
:
>>> q, r = divmod (2**56 , 10)
>>> r
6
10 , :
128
>>> q+1
7205759403792794
10**55, 55 :
>>> 3602879701896397 * 10 ** 55 // 2 ** 55
1000000000000000055511151231257827021181583404541015625
0.100000000000000005551115123125
7827021181583404541015625. ( Python )
, 17 :
>>> format (0.1, '.17f ')
'0. 10000000000000001 '
fractions decimal :
>>> from decimal import Decimal
>>> from fractions import Fraction
>>> Fraction . from_float (0.1)
Fraction ( 3602879701896397 , 36028797018963968 )
129
130
2013 10 30 http://docspy3zh.readthedocs.
org/en/latest/tutorial/index.html Python
Python LATEX
PDF LaTeX
Sphinx
Python
PDF
Python LATEX Python
Liam Huang
2013 11 7
SPHINX LATEX
131
Sphinx
LATEX
Sphinx PDF,
TEX
index.txt LATEX
3. conf.py LATEX
LATEX
4. index.txt sphinx-build-blatex..\_build
Win .\_build .tex, .sty, .cls
LATEX Sphinx
5. project-name.texproject-name sphinx-quickstart
\def\sphinxdocclass{ctexrep},
\documentclass[UTF8,english]{sphinxmanual}
6. pdfLATEX XLATEX PDF
XLATEX