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
01a0957f
Commit
01a0957f
authored
Oct 23, 2007
by
Raymond Hettinger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Shorter name for namedtuple()
parent
910ab500
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
22 deletions
+24
-22
Lib/collections.py
Lib/collections.py
+5
-5
Lib/test/test_collections.py
Lib/test/test_collections.py
+17
-17
Misc/NEWS
Misc/NEWS
+2
-0
No files found.
Lib/collections.py
View file @
01a0957f
__all__
=
[
'deque'
,
'defaultdict'
,
'named
_
tuple'
]
__all__
=
[
'deque'
,
'defaultdict'
,
'namedtuple'
]
from
_collections
import
deque
,
defaultdict
from
_collections
import
deque
,
defaultdict
from
operator
import
itemgetter
as
_itemgetter
from
operator
import
itemgetter
as
_itemgetter
from
keyword
import
iskeyword
as
_iskeyword
from
keyword
import
iskeyword
as
_iskeyword
import
sys
as
_sys
import
sys
as
_sys
def
named
_
tuple
(
typename
,
field_names
,
verbose
=
False
):
def
namedtuple
(
typename
,
field_names
,
verbose
=
False
):
"""Returns a new subclass of tuple with named fields.
"""Returns a new subclass of tuple with named fields.
>>> Point = named
_
tuple('Point', 'x y')
>>> Point = namedtuple('Point', 'x y')
>>> Point.__doc__ # docstring for the new class
>>> Point.__doc__ # docstring for the new class
'Point(x, y)'
'Point(x, y)'
>>> p = Point(11, y=22) # instantiate with positional args or keywords
>>> p = Point(11, y=22) # instantiate with positional args or keywords
...
@@ -94,10 +94,10 @@ def named_tuple(typename, field_names, verbose=False):
...
@@ -94,10 +94,10 @@ def named_tuple(typename, field_names, verbose=False):
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
# verify that instances can be pickled
# verify that instances can be pickled
from
cPickle
import
loads
,
dumps
from
cPickle
import
loads
,
dumps
Point
=
named
_
tuple
(
'Point'
,
'x, y'
,
True
)
Point
=
namedtuple
(
'Point'
,
'x, y'
,
True
)
p
=
Point
(
x
=
10
,
y
=
20
)
p
=
Point
(
x
=
10
,
y
=
20
)
assert
p
==
loads
(
dumps
(
p
))
assert
p
==
loads
(
dumps
(
p
))
import
doctest
import
doctest
TestResults
=
named
_
tuple
(
'TestResults'
,
'failed attempted'
)
TestResults
=
namedtuple
(
'TestResults'
,
'failed attempted'
)
print
TestResults
(
*
doctest
.
testmod
())
print
TestResults
(
*
doctest
.
testmod
())
Lib/test/test_collections.py
View file @
01a0957f
import
unittest
import
unittest
from
test
import
test_support
from
test
import
test_support
from
collections
import
named
_
tuple
from
collections
import
namedtuple
class
TestNamedTuple
(
unittest
.
TestCase
):
class
TestNamedTuple
(
unittest
.
TestCase
):
def
test_factory
(
self
):
def
test_factory
(
self
):
Point
=
named
_
tuple
(
'Point'
,
'x y'
)
Point
=
namedtuple
(
'Point'
,
'x y'
)
self
.
assertEqual
(
Point
.
__name__
,
'Point'
)
self
.
assertEqual
(
Point
.
__name__
,
'Point'
)
self
.
assertEqual
(
Point
.
__doc__
,
'Point(x, y)'
)
self
.
assertEqual
(
Point
.
__doc__
,
'Point(x, y)'
)
self
.
assertEqual
(
Point
.
__slots__
,
())
self
.
assertEqual
(
Point
.
__slots__
,
())
self
.
assertEqual
(
Point
.
__module__
,
__name__
)
self
.
assertEqual
(
Point
.
__module__
,
__name__
)
self
.
assertEqual
(
Point
.
__getitem__
,
tuple
.
__getitem__
)
self
.
assertEqual
(
Point
.
__getitem__
,
tuple
.
__getitem__
)
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'abc%'
,
'efg ghi'
)
# type has non-alpha char
self
.
assertRaises
(
ValueError
,
namedtuple
,
'abc%'
,
'efg ghi'
)
# type has non-alpha char
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'class'
,
'efg ghi'
)
# type has keyword
self
.
assertRaises
(
ValueError
,
namedtuple
,
'class'
,
'efg ghi'
)
# type has keyword
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'9abc'
,
'efg ghi'
)
# type starts with digit
self
.
assertRaises
(
ValueError
,
namedtuple
,
'9abc'
,
'efg ghi'
)
# type starts with digit
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'abc'
,
'efg g%hi'
)
# field with non-alpha char
self
.
assertRaises
(
ValueError
,
namedtuple
,
'abc'
,
'efg g%hi'
)
# field with non-alpha char
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'abc'
,
'abc class'
)
# field has keyword
self
.
assertRaises
(
ValueError
,
namedtuple
,
'abc'
,
'abc class'
)
# field has keyword
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'abc'
,
'8efg 9ghi'
)
# field starts with digit
self
.
assertRaises
(
ValueError
,
namedtuple
,
'abc'
,
'8efg 9ghi'
)
# field starts with digit
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'abc'
,
'__efg__ ghi'
)
# field with double underscores
self
.
assertRaises
(
ValueError
,
namedtuple
,
'abc'
,
'__efg__ ghi'
)
# field with double underscores
self
.
assertRaises
(
ValueError
,
named
_
tuple
,
'abc'
,
'efg efg ghi'
)
# duplicate field
self
.
assertRaises
(
ValueError
,
namedtuple
,
'abc'
,
'efg efg ghi'
)
# duplicate field
named
_
tuple
(
'Point0'
,
'x1 y2'
)
# Verify that numbers are allowed in names
namedtuple
(
'Point0'
,
'x1 y2'
)
# Verify that numbers are allowed in names
def
test_instance
(
self
):
def
test_instance
(
self
):
Point
=
named
_
tuple
(
'Point'
,
'x y'
)
Point
=
namedtuple
(
'Point'
,
'x y'
)
p
=
Point
(
11
,
22
)
p
=
Point
(
11
,
22
)
self
.
assertEqual
(
p
,
Point
(
x
=
11
,
y
=
22
))
self
.
assertEqual
(
p
,
Point
(
x
=
11
,
y
=
22
))
self
.
assertEqual
(
p
,
Point
(
11
,
y
=
22
))
self
.
assertEqual
(
p
,
Point
(
11
,
y
=
22
))
...
@@ -44,17 +44,17 @@ class TestNamedTuple(unittest.TestCase):
...
@@ -44,17 +44,17 @@ class TestNamedTuple(unittest.TestCase):
self
.
assertEqual
(
p
.
__asdict__
(),
dict
(
x
=
11
,
y
=
22
))
# test __dict__ method
self
.
assertEqual
(
p
.
__asdict__
(),
dict
(
x
=
11
,
y
=
22
))
# test __dict__ method
# verify that field string can have commas
# verify that field string can have commas
Point
=
named
_
tuple
(
'Point'
,
'x, y'
)
Point
=
namedtuple
(
'Point'
,
'x, y'
)
p
=
Point
(
x
=
11
,
y
=
22
)
p
=
Point
(
x
=
11
,
y
=
22
)
self
.
assertEqual
(
repr
(
p
),
'Point(x=11, y=22)'
)
self
.
assertEqual
(
repr
(
p
),
'Point(x=11, y=22)'
)
# verify that fieldspec can be a non-string sequence
# verify that fieldspec can be a non-string sequence
Point
=
named
_
tuple
(
'Point'
,
(
'x'
,
'y'
))
Point
=
namedtuple
(
'Point'
,
(
'x'
,
'y'
))
p
=
Point
(
x
=
11
,
y
=
22
)
p
=
Point
(
x
=
11
,
y
=
22
)
self
.
assertEqual
(
repr
(
p
),
'Point(x=11, y=22)'
)
self
.
assertEqual
(
repr
(
p
),
'Point(x=11, y=22)'
)
def
test_tupleness
(
self
):
def
test_tupleness
(
self
):
Point
=
named
_
tuple
(
'Point'
,
'x y'
)
Point
=
namedtuple
(
'Point'
,
'x y'
)
p
=
Point
(
11
,
22
)
p
=
Point
(
11
,
22
)
self
.
assert_
(
isinstance
(
p
,
tuple
))
self
.
assert_
(
isinstance
(
p
,
tuple
))
...
@@ -73,9 +73,9 @@ class TestNamedTuple(unittest.TestCase):
...
@@ -73,9 +73,9 @@ class TestNamedTuple(unittest.TestCase):
self
.
assertRaises
(
AttributeError
,
eval
,
'p.z'
,
locals
())
self
.
assertRaises
(
AttributeError
,
eval
,
'p.z'
,
locals
())
def
test_odd_sizes
(
self
):
def
test_odd_sizes
(
self
):
Zero
=
named
_
tuple
(
'Zero'
,
''
)
Zero
=
namedtuple
(
'Zero'
,
''
)
self
.
assertEqual
(
Zero
(),
())
self
.
assertEqual
(
Zero
(),
())
Dot
=
named
_
tuple
(
'Dot'
,
'd'
)
Dot
=
namedtuple
(
'Dot'
,
'd'
)
self
.
assertEqual
(
Dot
(
1
),
(
1
,))
self
.
assertEqual
(
Dot
(
1
),
(
1
,))
def
test_main
(
verbose
=
None
):
def
test_main
(
verbose
=
None
):
...
...
Misc/NEWS
View file @
01a0957f
...
@@ -798,6 +798,8 @@ Library
...
@@ -798,6 +798,8 @@ Library
Extension
Modules
Extension
Modules
-----------------
-----------------
-
collections
.
defaultdict
now
has
a
repr
()
function
that
can
be
run
through
eval
()
-
Patch
#
1388440
:
Add
set_completion_display_matches_hook
and
-
Patch
#
1388440
:
Add
set_completion_display_matches_hook
and
get_completion_type
to
readline
.
get_completion_type
to
readline
.
...
...
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