Python之命名元组 (namedtuple)
任务描述
本关任务:补充函数代码,完成对命名元组的简单操作。
命名元组 (namedtuple)
Python中提供了基础的不可变数据结构元组tuple
,对元组元素的访问需通过索引来完成,对此需要熟记每个下标对应的具体含义。如果元素数量一多,要记清楚这些东西就会比较麻烦了,于是就出现了命名元组namedtuple
。
创建命名元组
命名元组的构造函数接受两个参数typename
,field_names
:
typename
:元组的名字field_names
:元组各个元素的名称,也就是属性名称
比如:
collections.namedtuple("Point",["x","y"])
这样就创建了一个叫做Point
的命名元组类,它拥有两个属性x
,y
。
第二个参数["x","y"]
也可以写成"x y"
或者"x,y"
,即用空格或者逗号隔开属性名,即:
collections.namedtuple("Point","x y")
collections.namedtuple("Point","x,y")
我们可以将其赋值给一个变量:
Point = collections.namedtuple("Point","x,y")
p = collections.namedtuple("Point","x,y") #变量名不一定要和第一个参数相同
以上得到的变量Point
或者p
并不直接是一个元组对象,它只是一个类,如果要创建它的实例,则需要像创建类实例一样调用它:
p1 = Point(x = 0, y = 0)
p2 = p(x = 1, y = 1)
这样就创建了两个实例p1
,p2
,他们的内容分别是x = 0,y = 0
,x = 1,y = 1
。
访问命名元组的元素
通过collections.namedtuple
创建的命名元组类,实际上是元组类的子类,因此命名元组也可以通过索引访问元素:
print(p1[0])
print(p1[1])
得到的结果:0
0
当然,命名元组也可以通过属性访问:
print(p2.x)
print(p2.y)
得到的结果:1
1
修改元素
如果需要修改元组的元素,则不能简单的使用p1.x = 1
,需要调用成员函数_replace()
,它会返回一个包含新值的新实例,比如:
p1 = p1._replace(x = 1) #将p1的x值从0换到1
编程要求
根据右边编辑器中各个函数中的提示,将函数补充完整,使得程序能够正常运行并输出正确的结果。编辑区的4
个函数将按照如下顺序被调用:
p = CreatePoint()
PrintPoint(p)
p = IncX(p)
PrintPoint(p)
p = IncY(p)
PrintPoint(p)
测试说明
正确的补充代码后应该得到的结果:当前位置:x = 0,y = 0
当前位置:x = 1,y = 0
当前位置:x = 1,y = 1
import collections
def CreatePoint():
#在此处创建并返回一个命名元组实例,有属性x,y,初值都为0
Point = collections.namedtuple("Point","x,y")
p = Point(x=0,y=0)
return p
def IncX(p):
#在此处对变量p的x坐标进行+1操作,然后返回修改过后的新对象
p = p._replace(x=1)
return p
def IncY(p):
#在此处对参数p的y坐标进行+1操作,然后返回修改过后的新对象
p = p._replace(y=1)
return p
def PrintPoint(p):
#按照:"当前位置:x = XXX,y = XXX" 的格式打印参数p
print("当前位置:x = %d,y = %d"%(p.x,p.y))
还没有评论,来说两句吧...