广告位联系
返回顶部
分享到

python中namedtuple函数的用法介绍

python 来源:互联网 作者:佚名 发布时间:2022-09-03 06:55:10 人浏览
摘要

源码解释: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): Returns a new subclass of tuple with named fields. Point = namedtuple(Point, [x, y]) P

源码解释:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None):

    """Returns a new subclass of tuple with named fields.

    >>> Point = namedtuple('Point', ['x', 'y'])

    >>> Point.__doc__                   # docstring for the new class

    'Point(x, y)'

    >>> p = Point(11, y=22)             # instantiate with positional args or keywords

    >>> p[0] + p[1]                     # indexable like a plain tuple

    33

    >>> x, y = p                        # unpack like a regular tuple

    >>> x, y

    (11, 22)

    >>> p.x + p.y                       # fields also accessible by name

    33

    >>> d = p._asdict()                 # convert to a dictionary

    >>> d['x']

    11

    >>> Point(**d)                      # convert from a dictionary

    Point(x=11, y=22)

    >>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields

    Point(x=100, y=22)

    """

语法结构:

1

namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

  • typename: 代表新建的一个元组的名字。
  • field_names: 是元组的内容,是一个类似list的[‘x’,‘y’]

命名元组,使得元组可像列表一样使用key访问(同时可以使用索引访问)。

collections.namedtuple 是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类.

创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。

存放在对应字段里的数据要以一串参数的形式传入到构造函数中(注意,元组的构造函数却只接受单一的可迭代对象)。

命名元组还有一些自己专有的属性。最有用的:类属性_fields、类方法 _make(iterable)和实例方法_asdict()。

示例代码1:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

from collections import namedtuple

  

# 定义一个命名元祖city,City类,有name/country/population/coordinates四个字段

city = namedtuple('City', 'name country population coordinates')

tokyo = city('Tokyo', 'JP', 36.933, (35.689, 139.69))

print(tokyo)

  

# _fields 类属性,返回一个包含这个类所有字段名称的元组

print(city._fields)

  

# 定义一个命名元祖latLong,LatLong类,有lat/long两个字段

latLong = namedtuple('LatLong', 'lat long')

delhi_data = ('Delhi NCR', 'IN', 21.935, latLong(28.618, 77.208))

  

# 用 _make() 通过接受一个可迭代对象来生成这个类的一个实例,作用跟City(*delhi_data)相同

delhi = city._make(delhi_data)

  

# _asdict() 把具名元组以 collections.OrderedDict 的形式返回,可以利用它来把元组里的信息友好地呈现出来。

print(delhi._asdict())

运行结果:

示例代码2:

1

2

3

4

5

6

7

8

9

10

11

from collections import namedtuple

  

Person = namedtuple('Person', ['age', 'height', 'name'])

data2 = [Person(10, 1.4, 'xiaoming'), Person(12, 1.5, 'xiaohong')]

print(data2)

  

res = data2[0].age

print(res)

  

res2 = data2[1].name

print(res2)

运行结果:

示例代码3:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

from collections import namedtuple

card = namedtuple('Card', ['rank', 'suit'])  # 定义一个命名元祖card,Card类,有rank和suit两个字段

class FrenchDeck(object):

    ranks = [str(n) for n in range(2, 5)] + list('XYZ')

    suits = 'AA BB CC DD'.split()  # 生成一个列表,用空格将字符串分隔成列表

  

    def __init__(self):

        # 生成一个命名元组组成的列表,将suits、ranks两个列表的元素分别作为命名元组rank、suit的值。

        self._cards = [card(rank, suit) for suit in self.suits for rank in self.ranks]

        print(self._cards)

  

    # 获取列表的长度

    def __len__(self):

        return len(self._cards)

    # 根据索引取值

    def __getitem__(self, item):

        return self._cards[item]

f = FrenchDeck()

print(f.__len__())

print(f.__getitem__(3))

运行结果:

示例代码4:

1

2

3

4

5

6

7

8

from collections import namedtuple

  

person = namedtuple('Person', ['first_name', 'last_name'])

  

p1 = person('san', 'zhang')

print(p1)

print('first item is:', (p1.first_name, p1[0]))

print('second item is', (p1.last_name, p1[1]))

运行结果:

示例代码5:   【_make 从存在的序列或迭代创建实例】

1

2

3

4

5

6

7

8

9

10

11

12

13

from collections import namedtuple

course = namedtuple('Course', ['course_name', 'classroom', 'teacher', 'course_data'])

math = course('math', 'ERB001', 'Xiaoming', '09-Feb')

print(math)

print(math.course_name, math.course_data)

course_list = [

    ('computer_science', 'CS001', 'Jack_ma', 'Monday'),

    ('EE', 'EE001', 'Dr.han', 'Friday'),

    ('Pyhsics', 'EE001', 'Prof.Chen', 'None')

]

for k in course_list:

    course_i = course._make(k)

    print(course_i)

运行结果:

示例代码6:    【_asdict 返回一个新的ordereddict,将字段名称映射到对应的值】

1

2

3

4

5

6

7

from collections import namedtuple

person = namedtuple('Person', ['first_name', 'last_name'])

zhang_san = ('Zhang', 'San')

p = person._make(zhang_san)

print(p)

# 返回的类型不是dict,而是orderedDict

print(p._asdict())

运行结果:

示例代码7:   【_replace 返回一个新的实例,并将指定域替换为新的值】

1

2

3

4

5

6

7

8

9

10

from collections import namedtuple

person = namedtuple('Person', ['first_name', 'last_name'])

zhang_san = ('Zhang', 'San')

p = person._make(zhang_san)

print(p)

p_replace = p._replace(first_name='Wang')

print(p_replace)

print(p)

p_replace2 = p_replace._replace(first_name='Dong')

print(p_replace2)

运行结果:

示例代码8:   【_fields 返回字段名】

1

2

3

4

5

6

from collections import namedtuple

person = namedtuple('Person', ['first_name', 'last_name'])

zhang_san = ('Zhang', 'San')

p = person._make(zhang_san)

print(p)

print(p._fields)

运行结果:

示例代码9:   【利用fields可以将两个namedtuple组合在一起】

1

2

3

4

5

6

7

8

9

from collections import namedtuple

person = namedtuple('Person', ['first_name', 'last_name'])

print(person._fields)

degree = namedtuple('Degree', 'major degree_class')

print(degree._fields)

person_with_degree = namedtuple('person_with_degree', person._fields + degree._fields)

print(person_with_degree._fields)

zhang_san = person_with_degree('san', 'zhang', 'cs', 'master')

print(zhang_san)

运行结果:

示例代码10:   【field_defaults】

1

2

3

4

5

6

from collections import namedtuple

person = namedtuple('Person', ['first_name', 'last_name'], defaults=['san'])

print(person._fields)

print(person._field_defaults)

print(person('zhang'))

print(person('Li', 'si'))

运行结果:

示例代码11:   【namedtuple是一个类,所以可以通过子类更改功能】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])

p = Point(4, 5)

print(p)

class Point(namedtuple('Point', ['x', 'y'])):

    __slots__ = ()

  

    @property

    def hypot(self):

        return self.x + self.y

    def hypot2(self):

        return self.x + self.y

    def __str__(self):

        return 'result is %.3f' % (self.x + self.y)

aa = Point(4, 5)

print(aa)

print(aa.hypot)

print(aa.hypot2)

运行结果:

示例代码12:   【注意观察两种写法的不同】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

from collections import namedtuple

  

Point = namedtuple("Point", ["x", "y"])

p = Point(11, 22)

print(p)

print(p.x, p.y)

  

# namedtuple本质上等于下面写法

class Point2(object):

    def __init__(self, x, y):

        self.x = x

        self.y = y

o = Point2(33, 44)

print(o)

print(o.x, o.y)

运行结果:


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_44799217/article/details/126594612
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计