Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
dba90399
Commit
dba90399
authored
May 10, 2016
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #23921: Standardized documentation whitespace formatting.
Original patch by James Edwards.
parent
38723508
Changes
63
Show whitespace changes
Inline
Side-by-side
Showing
63 changed files
with
449 additions
and
413 deletions
+449
-413
Doc/distutils/apiref.rst
Doc/distutils/apiref.rst
+2
-2
Doc/faq/design.rst
Doc/faq/design.rst
+10
-8
Doc/faq/library.rst
Doc/faq/library.rst
+10
-7
Doc/faq/programming.rst
Doc/faq/programming.rst
+19
-20
Doc/howto/descriptor.rst
Doc/howto/descriptor.rst
+32
-32
Doc/howto/functional.rst
Doc/howto/functional.rst
+5
-5
Doc/howto/logging-cookbook.rst
Doc/howto/logging-cookbook.rst
+29
-27
Doc/howto/logging.rst
Doc/howto/logging.rst
+2
-2
Doc/howto/regex.rst
Doc/howto/regex.rst
+6
-6
Doc/howto/unicode.rst
Doc/howto/unicode.rst
+1
-1
Doc/howto/urllib2.rst
Doc/howto/urllib2.rst
+6
-6
Doc/library/argparse.rst
Doc/library/argparse.rst
+9
-9
Doc/library/asynchat.rst
Doc/library/asynchat.rst
+1
-1
Doc/library/asyncio-sync.rst
Doc/library/asyncio-sync.rst
+3
-3
Doc/library/asyncore.rst
Doc/library/asyncore.rst
+2
-2
Doc/library/audioop.rst
Doc/library/audioop.rst
+1
-1
Doc/library/collections.abc.rst
Doc/library/collections.abc.rst
+16
-13
Doc/library/collections.rst
Doc/library/collections.rst
+1
-1
Doc/library/concurrent.futures.rst
Doc/library/concurrent.futures.rst
+2
-2
Doc/library/configparser.rst
Doc/library/configparser.rst
+5
-5
Doc/library/contextlib.rst
Doc/library/contextlib.rst
+1
-1
Doc/library/crypt.rst
Doc/library/crypt.rst
+1
-1
Doc/library/ctypes.rst
Doc/library/ctypes.rst
+32
-32
Doc/library/email.headerregistry.rst
Doc/library/email.headerregistry.rst
+1
-1
Doc/library/getopt.rst
Doc/library/getopt.rst
+1
-1
Doc/library/html.parser.rst
Doc/library/html.parser.rst
+9
-1
Doc/library/http.client.rst
Doc/library/http.client.rst
+1
-1
Doc/library/inspect.rst
Doc/library/inspect.rst
+1
-1
Doc/library/ipaddress.rst
Doc/library/ipaddress.rst
+1
-1
Doc/library/locale.rst
Doc/library/locale.rst
+5
-5
Doc/library/mailcap.rst
Doc/library/mailcap.rst
+1
-1
Doc/library/mmap.rst
Doc/library/mmap.rst
+1
-1
Doc/library/multiprocessing.rst
Doc/library/multiprocessing.rst
+4
-4
Doc/library/optparse.rst
Doc/library/optparse.rst
+16
-16
Doc/library/re.rst
Doc/library/re.rst
+15
-15
Doc/library/shelve.rst
Doc/library/shelve.rst
+18
-17
Doc/library/ssl.rst
Doc/library/ssl.rst
+1
-1
Doc/library/string.rst
Doc/library/string.rst
+6
-6
Doc/library/threading.rst
Doc/library/threading.rst
+1
-1
Doc/library/tkinter.rst
Doc/library/tkinter.rst
+1
-1
Doc/library/tokenize.rst
Doc/library/tokenize.rst
+3
-3
Doc/library/types.rst
Doc/library/types.rst
+2
-0
Doc/library/unittest.rst
Doc/library/unittest.rst
+13
-13
Doc/library/urllib.request.rst
Doc/library/urllib.request.rst
+1
-1
Doc/library/wsgiref.rst
Doc/library/wsgiref.rst
+4
-4
Doc/library/xml.dom.minidom.rst
Doc/library/xml.dom.minidom.rst
+2
-2
Doc/library/xml.etree.elementtree.rst
Doc/library/xml.etree.elementtree.rst
+13
-13
Doc/library/xmlrpc.client.rst
Doc/library/xmlrpc.client.rst
+5
-2
Doc/reference/datamodel.rst
Doc/reference/datamodel.rst
+3
-3
Doc/reference/expressions.rst
Doc/reference/expressions.rst
+1
-1
Doc/reference/simple_stmts.rst
Doc/reference/simple_stmts.rst
+2
-2
Doc/tutorial/appendix.rst
Doc/tutorial/appendix.rst
+1
-1
Doc/tutorial/classes.rst
Doc/tutorial/classes.rst
+11
-1
Doc/tutorial/controlflow.rst
Doc/tutorial/controlflow.rst
+2
-2
Doc/tutorial/errors.rst
Doc/tutorial/errors.rst
+8
-8
Doc/tutorial/inputoutput.rst
Doc/tutorial/inputoutput.rst
+2
-2
Doc/tutorial/introduction.rst
Doc/tutorial/introduction.rst
+4
-4
Doc/tutorial/modules.rst
Doc/tutorial/modules.rst
+1
-1
Doc/tutorial/stdlib.rst
Doc/tutorial/stdlib.rst
+1
-1
Doc/tutorial/stdlib2.rst
Doc/tutorial/stdlib2.rst
+1
-0
Doc/whatsnew/3.2.rst
Doc/whatsnew/3.2.rst
+86
-84
Doc/whatsnew/3.3.rst
Doc/whatsnew/3.3.rst
+3
-3
Doc/whatsnew/3.4.rst
Doc/whatsnew/3.4.rst
+1
-1
No files found.
Doc/distutils/apiref.rst
View file @
dba90399
Doc/faq/design.rst
View file @
dba90399
...
@@ -577,8 +577,10 @@ other structure). ::
...
@@ -577,8 +577,10 @@ other structure). ::
class ListWrapper:
class ListWrapper:
def __init__(self, the_list):
def __init__(self, the_list):
self.the_list = the_list
self.the_list = the_list
def __eq__(self, other):
def __eq__(self, other):
return self.the_list == other.the_list
return self.the_list == other.the_list
def __hash__(self):
def __hash__(self):
l = self.the_list
l = self.the_list
result = 98767 - len(l)*555
result = 98767 - len(l)*555
...
...
Doc/faq/library.rst
View file @
dba90399
...
@@ -257,7 +257,8 @@ all the threads to finish::
...
@@ -257,7 +257,8 @@ all the threads to finish::
import threading, time
import threading, time
def thread_task(name, n):
def thread_task(name, n):
for i in range(n): print(name, i)
for i in range(n):
print(name, i)
for i in range(10):
for i in range(10):
T = threading.Thread(target=thread_task, args=(str(i), i))
T = threading.Thread(target=thread_task, args=(str(i), i))
...
@@ -273,7 +274,8 @@ A simple fix is to add a tiny sleep to the start of the run function::
...
@@ -273,7 +274,8 @@ A simple fix is to add a tiny sleep to the start of the run function::
def thread_task(name, n):
def thread_task(name, n):
time.sleep(0.001) # <--------------------!
time.sleep(0.001) # <--------------------!
for i in range(n): print(name, i)
for i in range(n):
print(name, i)
for i in range(10):
for i in range(10):
T = threading.Thread(target=thread_task, args=(str(i), i))
T = threading.Thread(target=thread_task, args=(str(i), i))
...
@@ -681,10 +683,10 @@ Yes. Here's a simple example that uses urllib.request::
...
@@ -681,10 +683,10 @@ Yes. Here's a simple example that uses urllib.request::
import urllib.request
import urllib.request
#
##
build the query string
# build the query string
qs = "First=Josephine&MI=Q&Last=Public"
qs = "First=Josephine&MI=Q&Last=Public"
#
##
connect and send the server a path
# connect and send the server a path
req = urllib.request.urlopen('http://www.some-server.out-there'
req = urllib.request.urlopen('http://www.some-server.out-there'
'/cgi-bin/some-cgi-script', data=qs)
'/cgi-bin/some-cgi-script', data=qs)
with req:
with req:
...
@@ -740,8 +742,9 @@ varies between systems; sometimes it is ``/usr/lib/sendmail``, sometimes
...
@@ -740,8 +742,9 @@ varies between systems; sometimes it is ``/usr/lib/sendmail``, sometimes
``/usr/sbin/sendmail``. The sendmail manual page will help you out. Here's
``/usr/sbin/sendmail``. The sendmail manual page will help you out. Here's
some sample code::
some sample code::
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
import os
import os
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
p = os.popen("%s -t -i" % SENDMAIL, "w")
p = os.popen("%s -t -i" % SENDMAIL, "w")
p.write("To: receiver@example.com\n")
p.write("To: receiver@example.com\n")
p.write("Subject: test\n")
p.write("Subject: test\n")
...
...
Doc/faq/programming.rst
View file @
dba90399
...
@@ -539,7 +539,7 @@ desired effect in a number of ways.
...
@@ -539,7 +539,7 @@ desired effect in a number of ways.
args['a'] = 'new-value' # args is a mutable dictionary
args['a'] = 'new-value' # args is a mutable dictionary
args['b'] = args['b'] + 1 # change it in-place
args['b'] = args['b'] + 1 # change it in-place
args = {'a':
'
old-value', 'b': 99}
args = {'a':
'
old-value', 'b': 99}
func3(args)
func3(args)
print(args['a'], args['b'])
print(args['a'], args['b'])
...
@@ -655,16 +655,15 @@ Essentially, assignment always binds a name to a value; The same is true of
...
@@ -655,16 +655,15 @@ Essentially, assignment always binds a name to a value; The same is true of
``def`` and ``class`` statements, but in that case the value is a
``def`` and ``class`` statements, but in that case the value is a
callable. Consider the following code::
callable. Consider the following code::
class A:
>>> class A:
pass
... pass
...
B = A
>>> B = A
>>> a = B()
a = B()
>>> b = a
b = a
>>> print(b)
print(b)
<__main__.A object at 0x16D07CC>
<__main__.A object at 0x16D07CC>
print(a)
>>>
print(a)
<__main__.A object at 0x16D07CC>
<__main__.A object at 0x16D07CC>
Arguably the class has a name: even though it is bound to two names and invoked
Arguably the class has a name: even though it is bound to two names and invoked
...
@@ -1099,7 +1098,7 @@ How do I iterate over a sequence in reverse order?
...
@@ -1099,7 +1098,7 @@ How do I iterate over a sequence in reverse order?
Use the :func:`reversed` built-in function, which is new in Python 2.4::
Use the :func:`reversed` built-in function, which is new in Python 2.4::
for x in reversed(sequence):
for x in reversed(sequence):
...
# do something with x
...
...
# do something with x
...
This won't touch your original sequence, but build a new copy with reversed
This won't touch your original sequence, but build a new copy with reversed
order to iterate over.
order to iterate over.
...
@@ -1107,7 +1106,7 @@ order to iterate over.
...
@@ -1107,7 +1106,7 @@ order to iterate over.
With Python 2.3, you can use an extended slice syntax::
With Python 2.3, you can use an extended slice syntax::
for x in sequence[::-1]:
for x in sequence[::-1]:
...
# do something with x
...
...
# do something with x
...
How do you remove duplicates from a list?
How do you remove duplicates from a list?
...
@@ -1405,7 +1404,7 @@ A method is a function on some object ``x`` that you normally call as
...
@@ -1405,7 +1404,7 @@ A method is a function on some object ``x`` that you normally call as
definition::
definition::
class C:
class C:
def meth
(self, arg):
def meth(self, arg):
return arg * 2 + self.attribute
return arg * 2 + self.attribute
...
@@ -1438,9 +1437,9 @@ that does something::
...
@@ -1438,9 +1437,9 @@ that does something::
def search(obj):
def search(obj):
if isinstance(obj, Mailbox):
if isinstance(obj, Mailbox):
# ...
code to search a mailbox
... #
code to search a mailbox
elif isinstance(obj, Document):
elif isinstance(obj, Document):
# ...
code to search a document
... #
code to search a document
elif ...
elif ...
A better approach is to define a ``search()`` method on all the classes and just
A better approach is to define a ``search()`` method on all the classes and just
...
@@ -1448,11 +1447,11 @@ call it::
...
@@ -1448,11 +1447,11 @@ call it::
class Mailbox:
class Mailbox:
def search(self):
def search(self):
# ...
code to search a mailbox
... #
code to search a mailbox
class Document:
class Document:
def search(self):
def search(self):
# ...
code to search a document
... #
code to search a document
obj.search()
obj.search()
...
@@ -1509,7 +1508,7 @@ How do I call a method defined in a base class from a derived class that overrid
...
@@ -1509,7 +1508,7 @@ How do I call a method defined in a base class from a derived class that overrid
Use the built-in :func:`super` function::
Use the built-in :func:`super` function::
class Derived(Base):
class Derived(Base):
def meth
(self):
def meth(self):
super(Derived, self).meth()
super(Derived, self).meth()
For version prior to 3.0, you may be using classic classes: For a class
For version prior to 3.0, you may be using classic classes: For a class
...
...
Doc/howto/descriptor.rst
View file @
dba90399
...
@@ -163,9 +163,9 @@ descriptor is useful for monitoring just a few chosen attributes::
...
@@ -163,9 +163,9 @@ descriptor is useful for monitoring just a few chosen attributes::
self.val = val
self.val = val
>>> class MyClass(object):
>>> class MyClass(object):
x = RevealAccess(10, 'var "x"')
...
x = RevealAccess(10, 'var "x"')
y = 5
...
y = 5
...
>>> m = MyClass()
>>> m = MyClass()
>>> m.x
>>> m.x
Retrieving var "x"
Retrieving var "x"
...
@@ -287,9 +287,9 @@ this::
...
@@ -287,9 +287,9 @@ this::
Running the interpreter shows how the function descriptor works in practice::
Running the interpreter shows how the function descriptor works in practice::
>>> class D(object):
>>> class D(object):
def f(self, x):
...
def f(self, x):
return x
...
return x
...
>>> d = D()
>>> d = D()
>>> D.__dict__['f'] # Stored internally as a function
>>> D.__dict__['f'] # Stored internally as a function
<function f at 0x00C45070>
<function f at 0x00C45070>
...
@@ -358,10 +358,10 @@ Since staticmethods return the underlying function with no changes, the example
...
@@ -358,10 +358,10 @@ Since staticmethods return the underlying function with no changes, the example
calls are unexciting::
calls are unexciting::
>>> class E(object):
>>> class E(object):
def f(x):
...
def f(x):
print(x)
...
print(x)
f = staticmethod(f)
...
f = staticmethod(f)
...
>>> print(E.f(3))
>>> print(E.f(3))
3
3
>>> print(E().f(3))
>>> print(E().f(3))
...
@@ -384,10 +384,10 @@ argument list before calling the function. This format is the same
...
@@ -384,10 +384,10 @@ argument list before calling the function. This format is the same
for whether the caller is an object or a class::
for whether the caller is an object or a class::
>>> class E(object):
>>> class E(object):
def f(klass, x):
...
def f(klass, x):
return klass.__name__, x
...
return klass.__name__, x
f = classmethod(f)
...
f = classmethod(f)
...
>>> print(E.f(3))
>>> print(E.f(3))
('E', 3)
('E', 3)
>>> print(E().f(3))
>>> print(E().f(3))
...
...
Doc/howto/functional.rst
View file @
dba90399
Doc/howto/logging-cookbook.rst
View file @
dba90399
...
@@ -63,6 +63,7 @@ Here is the auxiliary module::
...
@@ -63,6 +63,7 @@ Here is the auxiliary module::
def __init__(self):
def __init__(self):
self.logger = logging.getLogger('spam_application.auxiliary.Auxiliary')
self.logger = logging.getLogger('spam_application.auxiliary.Auxiliary')
self.logger.info('creating an instance of Auxiliary')
self.logger.info('creating an instance of Auxiliary')
def do_something(self):
def do_something(self):
self.logger.info('doing something')
self.logger.info('doing something')
a = 1 + 1
a = 1 + 1
...
@@ -793,7 +794,8 @@ the basis for code meeting your own specific requirements::
...
@@ -793,7 +794,8 @@ the basis for code meeting your own specific requirements::
h = logging.handlers.QueueHandler(queue) # Just the one handler needed
h = logging.handlers.QueueHandler(queue) # Just the one handler needed
root = logging.getLogger()
root = logging.getLogger()
root.addHandler(h)
root.addHandler(h)
root.setLevel(logging.DEBUG) # send all messages, for demo; no other level or filter logic applied.
# send all messages, for demo; no other level or filter logic applied.
root.setLevel(logging.DEBUG)
# This is the worker process top-level loop, which just logs ten events with
# This is the worker process top-level loop, which just logs ten events with
# random intervening delays before terminating.
# random intervening delays before terminating.
...
...
Doc/howto/logging.rst
View file @
dba90399
Doc/howto/regex.rst
View file @
dba90399
...
@@ -1115,19 +1115,19 @@ which can be either a string or a function, and the string to be processed.
...
@@ -1115,19 +1115,19 @@ which can be either a string or a function, and the string to be processed.
Here's a simple example of using the :meth:`sub` method. It replaces colour
Here's a simple example of using the :meth:`sub` method. It replaces colour
names with the word ``colour``::
names with the word ``colour``::
>>> p = re.compile(
'(blue|white|red)')
>>> p = re.compile('(blue|white|red)')
>>> p.sub(
'colour', 'blue socks and red shoes')
>>> p.sub('colour', 'blue socks and red shoes')
'colour socks and colour shoes'
'colour socks and colour shoes'
>>> p.sub(
'colour', 'blue socks and red shoes', count=1)
>>> p.sub('colour', 'blue socks and red shoes', count=1)
'colour socks and red shoes'
'colour socks and red shoes'
The :meth:`subn` method does the same work, but returns a 2-tuple containing the
The :meth:`subn` method does the same work, but returns a 2-tuple containing the
new string value and the number of replacements that were performed::
new string value and the number of replacements that were performed::
>>> p = re.compile(
'(blue|white|red)')
>>> p = re.compile('(blue|white|red)')
>>> p.subn(
'colour', 'blue socks and red shoes')
>>> p.subn('colour', 'blue socks and red shoes')
('colour socks and colour shoes', 2)
('colour socks and colour shoes', 2)
>>> p.subn(
'colour', 'no colours at all')
>>> p.subn('colour', 'no colours at all')
('no colours at all', 0)
('no colours at all', 0)
Empty matches are replaced only when they're not adjacent to a previous match.
Empty matches are replaced only when they're not adjacent to a previous match.
...
...
Doc/howto/unicode.rst
View file @
dba90399
Doc/howto/urllib2.rst
View file @
dba90399
...
@@ -175,10 +175,10 @@ Explorer [#]_. ::
...
@@ -175,10 +175,10 @@ Explorer [#]_. ::
url = 'http://www.someserver.com/cgi-bin/register.cgi'
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
values = {'name'
: 'Michael Foord',
values = {'name': 'Michael Foord',
'location'
: 'Northampton',
'location': 'Northampton',
'language'
: 'Python' }
'language': 'Python' }
headers = {
'User-Agent' : user_agent
}
headers = {
'User-Agent': user_agent
}
data = urllib.parse.urlencode(values)
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
data = data.encode('ascii')
...
...
Doc/library/argparse.rst
View file @
dba90399
Doc/library/asynchat.rst
View file @
dba90399
Doc/library/asyncio-sync.rst
View file @
dba90399
Doc/library/asyncore.rst
View file @
dba90399
Doc/library/audioop.rst
View file @
dba90399
...
@@ -276,6 +276,6 @@ sample and subtract the whole output sample from the input sample::
...
@@ -276,6 +276,6 @@ sample and subtract the whole output sample from the input sample::
# out_test)
# out_test)
prefill = '\0'*(pos+ipos)*2
prefill = '\0'*(pos+ipos)*2
postfill = '\0'*(len(inputdata)-len(prefill)-len(outputdata))
postfill = '\0'*(len(inputdata)-len(prefill)-len(outputdata))
outputdata = prefill + audioop.mul(outputdata,
2,
-factor) + postfill
outputdata = prefill + audioop.mul(outputdata,
2,
-factor) + postfill
return audioop.add(inputdata, outputdata, 2)
return audioop.add(inputdata, outputdata, 2)
Doc/library/collections.abc.rst
View file @
dba90399
...
@@ -225,10 +225,13 @@ The ABC supplies the remaining methods such as :meth:`__and__` and
...
@@ -225,10 +225,13 @@ The ABC supplies the remaining methods such as :meth:`__and__` and
for value in iterable:
for value in iterable:
if value not in lst:
if value not in lst:
lst.append(value)
lst.append(value)
def __iter__(self):
def __iter__(self):
return iter(self.elements)
return iter(self.elements)
def __contains__(self, value):
def __contains__(self, value):
return value in self.elements
return value in self.elements
def __len__(self):
def __len__(self):
return len(self.elements)
return len(self.elements)
...
...
Doc/library/collections.rst
View file @
dba90399
...
@@ -1029,7 +1029,7 @@ Since an ordered dictionary remembers its insertion order, it can be used
...
@@ -1029,7 +1029,7 @@ Since an ordered dictionary remembers its insertion order, it can be used
in conjunction with sorting to make a sorted dictionary::
in conjunction with sorting to make a sorted dictionary::
>>> # regular unsorted dictionary
>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> d = {'banana': 3, 'apple':
4, 'pear': 1, 'orange': 2}
>>> # dictionary sorted by key
>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
...
...
Doc/library/concurrent.futures.rst
View file @
dba90399
Doc/library/configparser.rst
View file @
dba90399
Doc/library/contextlib.rst
View file @
dba90399
Doc/library/crypt.rst
View file @
dba90399
Doc/library/ctypes.rst
View file @
dba90399
Doc/library/email.headerregistry.rst
View file @
dba90399
Doc/library/getopt.rst
View file @
dba90399
Doc/library/html.parser.rst
View file @
dba90399
...
@@ -51,8 +51,10 @@ as they are encountered::
...
@@ -51,8 +51,10 @@ as they are encountered::
class MyHTMLParser(HTMLParser):
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
def handle_starttag(self, tag, attrs):
print("Encountered a start tag:", tag)
print("Encountered a start tag:", tag)
def handle_endtag(self, tag):
def handle_endtag(self, tag):
print("Encountered an end tag :", tag)
print("Encountered an end tag :", tag)
def handle_data(self, data):
def handle_data(self, data):
print("Encountered some data :", data)
print("Encountered some data :", data)
...
@@ -237,21 +239,27 @@ examples::
...
@@ -237,21 +239,27 @@ examples::
print("Start tag:", tag)
print("Start tag:", tag)
for attr in attrs:
for attr in attrs:
print(" attr:", attr)
print(" attr:", attr)
def handle_endtag(self, tag):
def handle_endtag(self, tag):
print("End tag :", tag)
print("End tag :", tag)
def handle_data(self, data):
def handle_data(self, data):
print("Data :", data)
print("Data :", data)
def handle_comment(self, data):
def handle_comment(self, data):
print("Comment :", data)
print("Comment :", data)
def handle_entityref(self, name):
def handle_entityref(self, name):
c = chr(name2codepoint[name])
c = chr(name2codepoint[name])
print("Named ent:", c)
print("Named ent:", c)
def handle_charref(self, name):
def handle_charref(self, name):
if name.startswith('x'):
if name.startswith('x'):
c = chr(int(name[1:], 16))
c = chr(int(name[1:], 16))
else:
else:
c = chr(int(name))
c = chr(int(name))
print("Num ent :", c)
print("Num ent :", c)
def handle_decl(self, data):
def handle_decl(self, data):
print("Decl :", data)
print("Decl :", data)
...
@@ -283,7 +291,7 @@ further parsing::
...
@@ -283,7 +291,7 @@ further parsing::
attr: ('type', 'text/css')
attr: ('type', 'text/css')
Data : #python { color: green }
Data : #python { color: green }
End tag : style
End tag : style
>>>
>>> parser.feed('
<script
type=
"text/javascript"
>
'
>>> parser.feed('
<script
type=
"text/javascript"
>
'
...
'
alert
(
"
<strong>hello!</strong>
"
);
</script>
')
...
'
alert
(
"
<strong>hello!</strong>
"
);
</script>
')
Start tag: script
Start tag: script
...
...
Doc/library/http.client.rst
View file @
dba90399
Doc/library/inspect.rst
View file @
dba90399
Doc/library/ipaddress.rst
View file @
dba90399
Doc/library/locale.rst
View file @
dba90399
Doc/library/mailcap.rst
View file @
dba90399
...
@@ -70,7 +70,7 @@ standard. However, mailcap files are supported on most Unix systems.
...
@@ -70,7 +70,7 @@ standard. However, mailcap files are supported on most Unix systems.
An example usage::
An example usage::
>>> import mailcap
>>> import mailcap
>>> d
=
mailcap.getcaps()
>>> d
=
mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
('xmpeg tmp1223', {'view': 'xmpeg %s'})
('xmpeg tmp1223', {'view': 'xmpeg %s'})
Doc/library/mmap.rst
View file @
dba90399
Doc/library/multiprocessing.rst
View file @
dba90399
Doc/library/optparse.rst
View file @
dba90399
...
@@ -25,7 +25,7 @@ GNU/POSIX syntax, and additionally generates usage and help messages for you.
...
@@ -25,7 +25,7 @@ GNU/POSIX syntax, and additionally generates usage and help messages for you.
Here's an example of using :mod:`optparse` in a simple script::
Here's an example of using :mod:`optparse` in a simple script::
from optparse import OptionParser
from optparse import OptionParser
[...]
...
parser = OptionParser()
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
help="write report to FILE", metavar="FILE")
...
@@ -252,7 +252,7 @@ First, you need to import the OptionParser class; then, early in the main
...
@@ -252,7 +252,7 @@ First, you need to import the OptionParser class; then, early in the main
program, create an OptionParser instance::
program, create an OptionParser instance::
from optparse import OptionParser
from optparse import OptionParser
[...]
...
parser = OptionParser()
parser = OptionParser()
Then you can start defining options. The basic syntax is::
Then you can start defining options. The basic syntax is::
...
@@ -718,7 +718,7 @@ you can call :func:`OptionParser.error` to signal an application-defined error
...
@@ -718,7 +718,7 @@ you can call :func:`OptionParser.error` to signal an application-defined error
condition::
condition::
(options, args) = parser.parse_args()
(options, args) = parser.parse_args()
[...]
...
if options.a and options.b:
if options.a and options.b:
parser.error("options -a and -b are mutually exclusive")
parser.error("options -a and -b are mutually exclusive")
...
@@ -758,7 +758,7 @@ Putting it all together
...
@@ -758,7 +758,7 @@ Putting it all together
Here's what :mod:`optparse`\ -based scripts usually look like::
Here's what :mod:`optparse`\ -based scripts usually look like::
from optparse import OptionParser
from optparse import OptionParser
[...]
...
def main():
def main():
usage = "usage: %prog [options] arg"
usage = "usage: %prog [options] arg"
parser = OptionParser(usage)
parser = OptionParser(usage)
...
@@ -768,13 +768,13 @@ Here's what :mod:`optparse`\ -based scripts usually look like::
...
@@ -768,13 +768,13 @@ Here's what :mod:`optparse`\ -based scripts usually look like::
action="store_true", dest="verbose")
action="store_true", dest="verbose")
parser.add_option("-q", "--quiet",
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose")
action="store_false", dest="verbose")
[...]
...
(options, args) = parser.parse_args()
(options, args) = parser.parse_args()
if len(args) != 1:
if len(args) != 1:
parser.error("incorrect number of arguments")
parser.error("incorrect number of arguments")
if options.verbose:
if options.verbose:
print("reading %s..." % options.filename)
print("reading %s..." % options.filename)
[...]
...
if __name__ == "__main__":
if __name__ == "__main__":
main()
main()
...
@@ -1409,7 +1409,7 @@ If you're not careful, it's easy to define options with conflicting option
...
@@ -1409,7 +1409,7 @@ If you're not careful, it's easy to define options with conflicting option
strings::
strings::
parser.add_option("-n", "--dry-run", ...)
parser.add_option("-n", "--dry-run", ...)
[...]
...
parser.add_option("-n", "--noisy", ...)
parser.add_option("-n", "--noisy", ...)
(This is particularly true if you've defined your own OptionParser subclass with
(This is particularly true if you've defined your own OptionParser subclass with
...
@@ -1450,7 +1450,7 @@ that option. If the user asks for help, the help message will reflect that::
...
@@ -1450,7 +1450,7 @@ that option. If the user asks for help, the help message will reflect that::
Options:
Options:
--dry-run do no harm
--dry-run do no harm
[...]
...
-n, --noisy be noisy
-n, --noisy be noisy
It's possible to whittle away the option strings for a previously-added option
It's possible to whittle away the option strings for a previously-added option
...
@@ -1465,7 +1465,7 @@ At this point, the original ``-n``/``--dry-run`` option is no longer
...
@@ -1465,7 +1465,7 @@ At this point, the original ``-n``/``--dry-run`` option is no longer
accessible, so :mod:`optparse` removes it, leaving this help text::
accessible, so :mod:`optparse` removes it, leaving this help text::
Options:
Options:
[...]
...
-n, --noisy be noisy
-n, --noisy be noisy
--dry-run new dry-run option
--dry-run new dry-run option
...
@@ -1701,7 +1701,7 @@ seen, but blow up if it comes after ``-b`` in the command-line. ::
...
@@ -1701,7 +1701,7 @@ seen, but blow up if it comes after ``-b`` in the command-line. ::
if parser.values.b:
if parser.values.b:
raise OptionValueError("can't use -a after -b")
raise OptionValueError("can't use -a after -b")
parser.values.a = 1
parser.values.a = 1
[...]
...
parser.add_option("-a", action="callback", callback=check_order)
parser.add_option("-a", action="callback", callback=check_order)
parser.add_option("-b", action="store_true", dest="b")
parser.add_option("-b", action="store_true", dest="b")
...
@@ -1719,7 +1719,7 @@ message and the flag that it sets must be generalized. ::
...
@@ -1719,7 +1719,7 @@ message and the flag that it sets must be generalized. ::
if parser.values.b:
if parser.values.b:
raise OptionValueError("can't use %s after -b" % opt_str)
raise OptionValueError("can't use %s after -b" % opt_str)
setattr(parser.values, option.dest, 1)
setattr(parser.values, option.dest, 1)
[...]
...
parser.add_option("-a", action="callback", callback=check_order, dest='a')
parser.add_option("-a", action="callback", callback=check_order, dest='a')
parser.add_option("-b", action="store_true", dest="b")
parser.add_option("-b", action="store_true", dest="b")
parser.add_option("-c", action="callback", callback=check_order, dest='c')
parser.add_option("-c", action="callback", callback=check_order, dest='c')
...
@@ -1739,7 +1739,7 @@ should not be called when the moon is full, all you have to do is this::
...
@@ -1739,7 +1739,7 @@ should not be called when the moon is full, all you have to do is this::
raise OptionValueError("%s option invalid when moon is full"
raise OptionValueError("%s option invalid when moon is full"
% opt_str)
% opt_str)
setattr(parser.values, option.dest, 1)
setattr(parser.values, option.dest, 1)
[...]
...
parser.add_option("--foo",
parser.add_option("--foo",
action="callback", callback=check_moon, dest="foo")
action="callback", callback=check_moon, dest="foo")
...
@@ -1762,7 +1762,7 @@ Here's an example that just emulates the standard ``"store"`` action::
...
@@ -1762,7 +1762,7 @@ Here's an example that just emulates the standard ``"store"`` action::
def store_value(option, opt_str, value, parser):
def store_value(option, opt_str, value, parser):
setattr(parser.values, option.dest, value)
setattr(parser.values, option.dest, value)
[...]
...
parser.add_option("--foo",
parser.add_option("--foo",
action="callback", callback=store_value,
action="callback", callback=store_value,
type="int", nargs=3, dest="foo")
type="int", nargs=3, dest="foo")
...
@@ -1824,7 +1824,7 @@ arguments::
...
@@ -1824,7 +1824,7 @@ arguments::
del parser.rargs[:len(value)]
del parser.rargs[:len(value)]
setattr(parser.values, option.dest, value)
setattr(parser.values, option.dest, value)
[...]
...
parser.add_option("-c", "--callback", dest="vararg_attr",
parser.add_option("-c", "--callback", dest="vararg_attr",
action="callback", callback=vararg_callback)
action="callback", callback=vararg_callback)
...
...
Doc/library/re.rst
View file @
dba90399
Doc/library/shelve.rst
View file @
dba90399
...
@@ -170,10 +170,11 @@ object)::
...
@@ -170,10 +170,11 @@ object)::
d[key] = data # store data at key (overwrites old data if
d[key] = data # store data at key (overwrites old data if
# using an existing key)
# using an existing key)
data = d[key]
# retrieve a COPY of data at key (raise KeyError if no
data = d[key]
# retrieve a COPY of data at key (raise KeyError
#
such key)
# if no
such key)
del d[key] # delete data stored at key (raises KeyError
del d[key] # delete data stored at key (raises KeyError
# if no such key)
# if no such key)
flag = key in d # true if the key exists
flag = key in d # true if the key exists
klist = list(d.keys()) # a list of all existing keys (slow!)
klist = list(d.keys()) # a list of all existing keys (slow!)
...
...
Doc/library/ssl.rst
View file @
dba90399
Doc/library/string.rst
View file @
dba90399
Doc/library/threading.rst
View file @
dba90399
Doc/library/tkinter.rst
View file @
dba90399
Doc/library/tokenize.rst
View file @
dba90399
Doc/library/types.rst
View file @
dba90399
...
@@ -252,10 +252,12 @@ Additional Utility Classes and Functions
...
@@ -252,10 +252,12 @@ Additional Utility Classes and Functions
class SimpleNamespace:
class SimpleNamespace:
def __init__(self, **kwargs):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
self.__dict__.update(kwargs)
def __repr__(self):
def __repr__(self):
keys = sorted(self.__dict__)
keys = sorted(self.__dict__)
items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
return "{}({})".format(type(self).__name__, ", ".join(items))
return "{}({})".format(type(self).__name__, ", ".join(items))
def __eq__(self, other):
def __eq__(self, other):
return self.__dict__ == other.__dict__
return self.__dict__ == other.__dict__
...
...
Doc/library/unittest.rst
View file @
dba90399
Doc/library/urllib.request.rst
View file @
dba90399
...
@@ -1174,7 +1174,7 @@ The code for the sample CGI used in the above example is::
...
@@ -1174,7 +1174,7 @@ The code for the sample CGI used in the above example is::
Here is an example of doing a ``PUT`` request using :class:`Request`::
Here is an example of doing a ``PUT`` request using :class:`Request`::
import urllib.request
import urllib.request
DATA
=
b'some data'
DATA
=
b'some data'
req = urllib.request.Request(url='http://localhost:8080', data=DATA,method='PUT')
req = urllib.request.Request(url='http://localhost:8080', data=DATA,method='PUT')
with urllib.request.urlopen(req) as f:
with urllib.request.urlopen(req) as f:
pass
pass
...
...
Doc/library/wsgiref.rst
View file @
dba90399
Doc/library/xml.dom.minidom.rst
View file @
dba90399
Doc/library/xml.etree.elementtree.rst
View file @
dba90399
Doc/library/xmlrpc.client.rst
View file @
dba90399
...
@@ -216,7 +216,7 @@ A working example follows. The server code::
...
@@ -216,7 +216,7 @@ A working example follows. The server code::
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCServer
def is_even(n):
def is_even(n):
return n
%
2 == 0
return n
%
2 == 0
server = SimpleXMLRPCServer(("localhost", 8000))
server = SimpleXMLRPCServer(("localhost", 8000))
print("Listening on port 8000...")
print("Listening on port 8000...")
...
@@ -373,7 +373,7 @@ returning a complex type object. The server code::
...
@@ -373,7 +373,7 @@ returning a complex type object. The server code::
# A marshalling error is going to occur because we're returning a
# A marshalling error is going to occur because we're returning a
# complex number
# complex number
def add(x,y):
def add(x,
y):
return x+y+0j
return x+y+0j
server = SimpleXMLRPCServer(("localhost", 8000))
server = SimpleXMLRPCServer(("localhost", 8000))
...
@@ -566,12 +566,15 @@ transport. The following example shows how:
...
@@ -566,12 +566,15 @@ transport. The following example shows how:
class ProxiedTransport(xmlrpc.client.Transport):
class ProxiedTransport(xmlrpc.client.Transport):
def set_proxy(self, proxy):
def set_proxy(self, proxy):
self.proxy = proxy
self.proxy = proxy
def make_connection(self, host):
def make_connection(self, host):
self.realhost = host
self.realhost = host
h = http.client.HTTPConnection(self.proxy)
h = http.client.HTTPConnection(self.proxy)
return h
return h
def send_request(self, connection, handler, request_body, debug):
def send_request(self, connection, handler, request_body, debug):
connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))
connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))
def send_host(self, connection, host):
def send_host(self, connection, host):
connection.putheader('Host', self.realhost)
connection.putheader('Host', self.realhost)
...
...
Doc/reference/datamodel.rst
View file @
dba90399
Doc/reference/expressions.rst
View file @
dba90399
Doc/reference/simple_stmts.rst
View file @
dba90399
Doc/tutorial/appendix.rst
View file @
dba90399
Doc/tutorial/classes.rst
View file @
dba90399
...
@@ -162,12 +162,15 @@ binding::
...
@@ -162,12 +162,15 @@ binding::
def scope_test():
def scope_test():
def do_local():
def do_local():
spam = "local spam"
spam = "local spam"
def do_nonlocal():
def do_nonlocal():
nonlocal spam
nonlocal spam
spam = "nonlocal spam"
spam = "nonlocal spam"
def do_global():
def do_global():
global spam
global spam
spam = "global spam"
spam = "global spam"
spam = "test spam"
spam = "test spam"
do_local()
do_local()
print("After local assignment:", spam)
print("After local assignment:", spam)
...
@@ -260,6 +263,7 @@ definition looked like this::
...
@@ -260,6 +263,7 @@ definition looked like this::
class MyClass:
class MyClass:
"""A simple example class"""
"""A simple example class"""
i = 12345
i = 12345
def f(self):
def f(self):
return 'hello world'
return 'hello world'
...
@@ -508,8 +512,10 @@ variable in the class is also ok. For example::
...
@@ -508,8 +512,10 @@ variable in the class is also ok. For example::
class C:
class C:
f = f1
f = f1
def g(self):
def g(self):
return 'hello world'
return 'hello world'
h = g
h = g
Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to
Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to
...
@@ -523,8 +529,10 @@ argument::
...
@@ -523,8 +529,10 @@ argument::
class Bag:
class Bag:
def __init__(self):
def __init__(self):
self.data = []
self.data = []
def add(self, x):
def add(self, x):
self.data.append(x)
self.data.append(x)
def addtwice(self, x):
def addtwice(self, x):
self.add(x)
self.add(x)
self.add(x)
self.add(x)
...
@@ -839,8 +847,10 @@ defines :meth:`__next__`, then :meth:`__iter__` can just return ``self``::
...
@@ -839,8 +847,10 @@ defines :meth:`__next__`, then :meth:`__iter__` can just return ``self``::
def __init__(self, data):
def __init__(self, data):
self.data = data
self.data = data
self.index = len(data)
self.index = len(data)
def __iter__(self):
def __iter__(self):
return self
return self
def __next__(self):
def __next__(self):
if self.index == 0:
if self.index == 0:
raise StopIteration
raise StopIteration
...
...
Doc/tutorial/controlflow.rst
View file @
dba90399
Doc/tutorial/errors.rst
View file @
dba90399
Doc/tutorial/inputoutput.rst
View file @
dba90399
Doc/tutorial/introduction.rst
View file @
dba90399
...
@@ -232,7 +232,7 @@ If you want to concatenate variables or a variable and a literal, use ``+``::
...
@@ -232,7 +232,7 @@ If you want to concatenate variables or a variable and a literal, use ``+``::
This feature is particularly useful when you want to break long strings::
This feature is particularly useful when you want to break long strings::
>>> text = ('Put several strings within parentheses '
>>> text = ('Put several strings within parentheses '
'to have them joined together.')
...
'to have them joined together.')
>>> text
>>> text
'Put several strings within parentheses to have them joined together.'
'Put several strings within parentheses to have them joined together.'
...
...
Doc/tutorial/modules.rst
View file @
dba90399
Doc/tutorial/stdlib.rst
View file @
dba90399
Doc/tutorial/stdlib2.rst
View file @
dba90399
...
@@ -180,6 +180,7 @@ tasks in background while the main program continues to run::
...
@@ -180,6 +180,7 @@ tasks in background while the main program continues to run::
threading.Thread.__init__(self)
threading.Thread.__init__(self)
self.infile = infile
self.infile = infile
self.outfile = outfile
self.outfile = outfile
def run(self):
def run(self):
f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
f.write(self.infile)
f.write(self.infile)
...
...
Doc/whatsnew/3.2.rst
View file @
dba90399
...
@@ -212,7 +212,8 @@ loaded and called with code like this::
...
@@ -212,7 +212,8 @@ loaded and called with code like this::
>>> import json, logging.config
>>> import json, logging.config
>>> with open('conf.json') as f:
>>> with open('conf.json') as f:
conf = json.load(f)
... conf = json.load(f)
...
>>> logging.config.dictConfig(conf)
>>> logging.config.dictConfig(conf)
>>> logging.info("Transaction completed normally")
>>> logging.info("Transaction completed normally")
INFO : root : Transaction completed normally
INFO : root : Transaction completed normally
...
@@ -460,15 +461,15 @@ Some smaller changes made to the core Python language are:
...
@@ -460,15 +461,15 @@ Some smaller changes made to the core Python language are:
'The testing project status is green as of February 15, 2011'
'The testing project status is green as of February 15, 2011'
>>> class LowerCasedDict(dict):
>>> class LowerCasedDict(dict):
def __getitem__(self, key):
...
def __getitem__(self, key):
return dict.__getitem__(self, key.lower())
...
return dict.__getitem__(self, key.lower())
>>> lcd = LowerCasedDict(part='widgets', quantity=10)
>>> lcd = LowerCasedDict(part='widgets', quantity=10)
>>> 'There are {QUANTITY} {Part} in stock'.format_map(lcd)
>>> 'There are {QUANTITY} {Part} in stock'.format_map(lcd)
'There are 10 widgets in stock'
'There are 10 widgets in stock'
>>> class PlaceholderDict(dict):
>>> class PlaceholderDict(dict):
def __missing__(self, key):
...
def __missing__(self, key):
return '<{}>'.format(key)
...
return '<{}>'.format(key)
>>> 'Hello {name}, welcome to {location}'.format_map(PlaceholderDict())
>>> 'Hello {name}, welcome to {location}'.format_map(PlaceholderDict())
'Hello <name>, welcome to <location>'
'Hello <name>, welcome to <location>'
...
@@ -496,10 +497,10 @@ Some smaller changes made to the core Python language are:
...
@@ -496,10 +497,10 @@ Some smaller changes made to the core Python language are:
exceptions pass through::
exceptions pass through::
>>> class A:
>>> class A:
@property
...
@property
def f(self):
...
def f(self):
return 1 // 0
...
return 1 // 0
...
>>> a = A()
>>> a = A()
>>> hasattr(a, 'f')
>>> hasattr(a, 'f')
Traceback (most recent call last):
Traceback (most recent call last):
...
@@ -799,6 +800,7 @@ functools
...
@@ -799,6 +800,7 @@ functools
def __eq__(self, other):
def __eq__(self, other):
return ((self.lastname.lower(), self.firstname.lower()) ==
return ((self.lastname.lower(), self.firstname.lower()) ==
(other.lastname.lower(), other.firstname.lower()))
(other.lastname.lower(), other.firstname.lower()))
def __lt__(self, other):
def __lt__(self, other):
return ((self.lastname.lower(), self.firstname.lower()) <
return ((self.lastname.lower(), self.firstname.lower()) <
(other.lastname.lower(), other.firstname.lower()))
(other.lastname.lower(), other.firstname.lower()))
...
@@ -942,7 +944,7 @@ released and a :exc:`~threading.BrokenBarrierError` exception is raised::
...
@@ -942,7 +944,7 @@ released and a :exc:`~threading.BrokenBarrierError` exception is raised::
def get_votes(site):
def get_votes(site):
ballots = conduct_election(site)
ballots = conduct_election(site)
try:
try:
all_polls_closed.wait(timeout
=
midnight - time.now())
all_polls_closed.wait(timeout
=
midnight - time.now())
except BrokenBarrierError:
except BrokenBarrierError:
lockbox = seal_ballots(ballots)
lockbox = seal_ballots(ballots)
queue.put(lockbox)
queue.put(lockbox)
...
@@ -1097,16 +1099,16 @@ for slice notation are well-suited to in-place editing::
...
@@ -1097,16 +1099,16 @@ for slice notation are well-suited to in-place editing::
>>> REC_LEN, LOC_START, LOC_LEN = 34, 7, 11
>>> REC_LEN, LOC_START, LOC_LEN = 34, 7, 11
>>> def change_location(buffer, record_number, location):
>>> def change_location(buffer, record_number, location):
start = record_number * REC_LEN + LOC_START
...
start = record_number * REC_LEN + LOC_START
buffer[start: start+LOC_LEN] = location
...
buffer[start: start+LOC_LEN] = location
>>> import io
>>> import io
>>> byte_stream = io.BytesIO(
>>> byte_stream = io.BytesIO(
b'G3805 storeroom Main chassis '
...
b'G3805 storeroom Main chassis '
b'X7899 shipping Reserve cog '
...
b'X7899 shipping Reserve cog '
b'L6988 receiving Primary sprocket'
...
b'L6988 receiving Primary sprocket'
)
...
)
>>> buffer = byte_stream.getbuffer()
>>> buffer = byte_stream.getbuffer()
>>> change_location(buffer, 1, b'warehouse ')
>>> change_location(buffer, 1, b'warehouse ')
>>> change_location(buffer, 0, b'showroom ')
>>> change_location(buffer, 0, b'showroom ')
...
@@ -1131,10 +1133,10 @@ decorator, :func:`~reprlib.recursive_repr`, for detecting recursive calls to
...
@@ -1131,10 +1133,10 @@ decorator, :func:`~reprlib.recursive_repr`, for detecting recursive calls to
:meth:`__repr__` and substituting a placeholder string instead::
:meth:`__repr__` and substituting a placeholder string instead::
>>> class MyList(list):
>>> class MyList(list):
@recursive_repr()
...
@recursive_repr()
def __repr__(self):
...
def __repr__(self):
return '<' + '|'.join(map(repr, self)) + '>'
...
return '<' + '|'.join(map(repr, self)) + '>'
...
>>> m = MyList('abc')
>>> m = MyList('abc')
>>> m.append(m)
>>> m.append(m)
>>> m.append('x')
>>> m.append('x')
...
@@ -1197,8 +1199,8 @@ the field names::
...
@@ -1197,8 +1199,8 @@ the field names::
>>> w.writeheader()
>>> w.writeheader()
"name","dept"
"name","dept"
>>> w.writerows([
>>> w.writerows([
{'name': 'tom', 'dept': 'accounting'},
...
{'name': 'tom', 'dept': 'accounting'},
{'name': 'susan', 'dept': 'Salesl'}])
...
{'name': 'susan', 'dept': 'Salesl'}])
"tom","accounting"
"tom","accounting"
"susan","sales"
"susan","sales"
...
@@ -1423,14 +1425,14 @@ function can return *None*::
...
@@ -1423,14 +1425,14 @@ function can return *None*::
>>> import tarfile, glob
>>> import tarfile, glob
>>> def myfilter(tarinfo):
>>> def myfilter(tarinfo):
if tarinfo.isfile(): # only save real files
...
if tarinfo.isfile(): # only save real files
tarinfo.uname = 'monty'
# redact the user name
... tarinfo.uname = 'monty'
# redact the user name
return tarinfo
...
return tarinfo
>>> with tarfile.open(name='myarchive.tar.gz', mode='w:gz') as tf:
>>> with tarfile.open(name='myarchive.tar.gz', mode='w:gz') as tf:
for filename in glob.glob('*.txt'):
...
for filename in glob.glob('*.txt'):
tf.add(filename, filter=myfilter)
...
tf.add(filename, filter=myfilter)
tf.list()
...
tf.list()
-rw-r--r-- monty/501 902 2011-01-26 17:59:11 annotations.txt
-rw-r--r-- monty/501 902 2011-01-26 17:59:11 annotations.txt
-rw-r--r-- monty/501 123 2011-01-26 17:59:11 general_questions.txt
-rw-r--r-- monty/501 123 2011-01-26 17:59:11 general_questions.txt
-rw-r--r-- monty/501 3514 2011-01-26 17:59:11 prion.txt
-rw-r--r-- monty/501 3514 2011-01-26 17:59:11 prion.txt
...
@@ -1538,7 +1540,7 @@ step is non-destructive (the original files are left unchanged).
...
@@ -1538,7 +1540,7 @@ step is non-destructive (the original files are left unchanged).
>>> os.chdir('mydata') # change to the source directory
>>> os.chdir('mydata') # change to the source directory
>>> f = shutil.make_archive('/var/backup/mydata',
>>> f = shutil.make_archive('/var/backup/mydata',
'zip')
# archive the current directory
... 'zip')
# archive the current directory
>>> f # show the name of archive
>>> f # show the name of archive
'/var/backup/mydata.zip'
'/var/backup/mydata.zip'
>>> os.chdir('tmp') # change to an unpacking
>>> os.chdir('tmp') # change to an unpacking
...
@@ -1551,11 +1553,11 @@ step is non-destructive (the original files are left unchanged).
...
@@ -1551,11 +1553,11 @@ step is non-destructive (the original files are left unchanged).
('zip', 'ZIP file')]
('zip', 'ZIP file')]
>>> shutil.register_archive_format( # register a new archive format
>>> shutil.register_archive_format( # register a new archive format
name =
'xz',
... name=
'xz',
function = xz.compress,
# callable archiving function
... function=xz.compress,
# callable archiving function
extra_args = [('level', 8)],
# arguments to the function
... extra_args=[('level', 8)],
# arguments to the function
description =
'xz compression'
... description=
'xz compression'
)
...
)
(Contributed by Tarek Ziadé.)
(Contributed by Tarek Ziadé.)
...
@@ -1854,7 +1856,7 @@ inspect
...
@@ -1854,7 +1856,7 @@ inspect
>>> from inspect import getgeneratorstate
>>> from inspect import getgeneratorstate
>>> def gen():
>>> def gen():
yield 'demo'
...
yield 'demo'
>>> g = gen()
>>> g = gen()
>>> getgeneratorstate(g)
>>> getgeneratorstate(g)
'GEN_CREATED'
'GEN_CREATED'
...
@@ -1874,11 +1876,11 @@ inspect
...
@@ -1874,11 +1876,11 @@ inspect
change state while it is searching::
change state while it is searching::
>>> class A:
>>> class A:
@property
...
@property
def f(self):
...
def f(self):
print('Running')
...
print('Running')
return 10
...
return 10
...
>>> a = A()
>>> a = A()
>>> getattr(a, 'f')
>>> getattr(a, 'f')
Running
Running
...
@@ -2102,19 +2104,19 @@ Config parsers gained a new API based on the mapping protocol::
...
@@ -2102,19 +2104,19 @@ Config parsers gained a new API based on the mapping protocol::
>>> parser = ConfigParser()
>>> parser = ConfigParser()
>>> parser.read_string("""
>>> parser.read_string("""
[DEFAULT]
...
[DEFAULT]
location = upper left
...
location = upper left
visible = yes
...
visible = yes
editable = no
...
editable = no
color = blue
...
color = blue
...
[main]
...
[main]
title = Main Menu
...
title = Main Menu
color = green
...
color = green
...
[options]
...
[options]
title = Options
...
title = Options
""")
...
""")
>>> parser['main']['color']
>>> parser['main']['color']
'green'
'green'
>>> parser['main']['editable']
>>> parser['main']['editable']
...
@@ -2138,24 +2140,24 @@ handler :class:`~configparser.ExtendedInterpolation`::
...
@@ -2138,24 +2140,24 @@ handler :class:`~configparser.ExtendedInterpolation`::
>>> parser = ConfigParser(interpolation=ExtendedInterpolation())
>>> parser = ConfigParser(interpolation=ExtendedInterpolation())
>>> parser.read_dict({'buildout': {'directory': '/home/ambv/zope9'},
>>> parser.read_dict({'buildout': {'directory': '/home/ambv/zope9'},
'custom': {'prefix': '/usr/local'}})
...
'custom': {'prefix': '/usr/local'}})
>>> parser.read_string("""
>>> parser.read_string("""
[buildout]
...
[buildout]
parts =
...
parts =
zope9
...
zope9
instance
...
instance
find-links =
...
find-links =
${buildout:directory}/downloads/dist
...
${buildout:directory}/downloads/dist
...
[zope9]
...
[zope9]
recipe = plone.recipe.zope9install
...
recipe = plone.recipe.zope9install
location = /opt/zope
...
location = /opt/zope
...
[instance]
...
[instance]
recipe = plone.recipe.zope9instance
...
recipe = plone.recipe.zope9instance
zope9-location = ${zope9:location}
...
zope9-location = ${zope9:location}
zope-conf = ${custom:prefix}/etc/zope.conf
...
zope-conf = ${custom:prefix}/etc/zope.conf
""")
...
""")
>>> parser['buildout']['find-links']
>>> parser['buildout']['find-links']
'\n/home/ambv/zope9/downloads/dist'
'\n/home/ambv/zope9/downloads/dist'
>>> parser['instance']['zope-conf']
>>> parser['instance']['zope-conf']
...
@@ -2207,9 +2209,9 @@ string, then the *safe*, *encoding*, and *error* parameters are sent to
...
@@ -2207,9 +2209,9 @@ string, then the *safe*, *encoding*, and *error* parameters are sent to
:func:`~urllib.parse.quote_plus` for encoding::
:func:`~urllib.parse.quote_plus` for encoding::
>>> urllib.parse.urlencode([
>>> urllib.parse.urlencode([
('type', 'telenovela'),
...
('type', 'telenovela'),
('name', '¿Dónde Está Elisa?')],
...
('name', '¿Dónde Está Elisa?')],
encoding='latin-1')
...
encoding='latin-1')
'type=telenovela&name=%BFD%F3nde+Est%E1+Elisa%3F'
'type=telenovela&name=%BFD%F3nde+Est%E1+Elisa%3F'
As detailed in :ref:`parsing-ascii-encoded-bytes`, all the :mod:`urllib.parse`
As detailed in :ref:`parsing-ascii-encoded-bytes`, all the :mod:`urllib.parse`
...
...
Doc/whatsnew/3.3.rst
View file @
dba90399
Doc/whatsnew/3.4.rst
View file @
dba90399
...
@@ -746,7 +746,7 @@ optional *current_offset*), and the resulting object can be iterated to produce
...
@@ -746,7 +746,7 @@ optional *current_offset*), and the resulting object can be iterated to produce
method, equivalent to calling :mod:`~dis.dis` on the constructor argument, but
method, equivalent to calling :mod:`~dis.dis` on the constructor argument, but
returned as a multi-line string::
returned as a multi-line string::
>>> bytecode = dis.Bytecode(lambda x: x +1, current_offset=3)
>>> bytecode = dis.Bytecode(lambda x: x +
1, current_offset=3)
>>> for instr in bytecode:
>>> for instr in bytecode:
... print('{} ({})'.format(instr.opname, instr.opcode))
... print('{} ({})'.format(instr.opname, instr.opcode))
LOAD_FAST (124)
LOAD_FAST (124)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment