python 命名元组_python-命名元祖的学习

  • Post author:
  • Post category:python


1.什么是元组?

不可变的序列类型

“不能修改的列表”

2.元组支持哪些操作?

元组是序列类型,支持序列类型的所有操作

通过索引取值

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

one_tuple[-1]

切片操作

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

one_tuple[3:5]

成员操作(in 或者 not in)

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

“可优” in one_tuple

连接操作(+)

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

two_tuple = (“That is really right!”, )

one_tuple + two_tuple

重复操作符(*)

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

one_tuple * 2

遍历(for)

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

for value in one_tuple:

print(value)

求长度(len)

one_tuple = (“可优”, 17, “男”, “coding”, “Never Stop Learning!”)

len(one_tuple)

其他内置函数(all、any、max、min、list、tuple、enumerate、sorted等)

3.元组有什么缺点(痛点)?

最大的痛点是只能通过数字索引来取值

当元组中元素非常大时,通过索引取值非常不方便,内存消耗也大

三、命名元组(namedtuple)

1.定义

使用命名元组的步骤:

# 将元组封装为一个类,可以通过字段名(属性名)来访问元组中的值

# 支持元组的所有操作

from collections import namedtuple

# 1、定义一个类

Love = namedtuple(“Love”, “name gender age love_into hobby motto”)

# 2、创建对象

keyou = Love(“可优”, “帅男”, 17, “Lemon little girl”, “Coding”, “Never Stop Learning!”)

# 3、获取命名元组的值

print(keyou[1]) # 支持元组的索引取值

print(keyou[-2:]) # 支持切片

print(keyou.name) # 支持通过字段名来取值

定义命名元组类的三种方法以及rename和defaults参数:

from collections import namedtuple

# 1、定义一个类

# 方法一,传递属性名之间以空格间隔的一个字符串

Love = namedtuple(“Love”, “name gender age love_into hobby motto”)

# 方法二,也可以以英文逗号来分隔每一个属性名

Love = namedtuple(“Love”, “name,gender,age,love_into,hobby,motto”)

# 方法三,传递一个由属性名组成的序列类型(列表、元组)

fields = [“name”, “gender”, “age”, “love_into”, “hobby”, “motto”]

Love = namedtuple(“Love”, fields)

# 说明:

# 属性名要符合标识符的命名规范

# 只能由数字、字母、下划线组成

# 不能以数字开头

# 不能与关键字、系统函数或类重名

# 如果属性名,不符合这些规范会报错吗? 会报错

fields = [“1name”, “class”, “def”, “love_into”, “hobby”, “motto”]

Love = namedtuple(“Love”, fields)

# 如果传了一个不符合规范的属性名,又不想让它报错呢? 可以做到的

# 将rename参数设置为True,当属性名不符合规范时,会自动帮我们将不符合规范的属性名改为下划线加数字索引值

fields = [“1name”, “class”, “def”, “love_into”, “hobby”, “motto”]

Love = namedtuple(“Love”, fields, rename=True)

# 如果某些属性有默认值呢? 如何设置?

# 可以设置defaults参数,为一个序列类型

# 以从右到左的顺序来为属性赋默认值

fields = [“1name”, “class”, “def”, “love_into”, “hobby”, “motto”]

Love = namedtuple(“Love”, fields, rename=True, defaults=[“Coding”, “Never Stop Learning!”])

# 2、创建对象

# keyou = Love(“可优”, “帅男”, 17, “Lemon little girl”, “Coding”, “Never Stop Learning!”)

# 由于hobby和motto这两个属性已经有默认值了,所有可以不用传这两个参数

keyou = Love(“可优”, “帅男”, 17, “Lemon little girl”)

# 3、获取命名元组的值

print(keyou[1]) # 支持元组的索引取值

print(keyou[-2:]) # 支持切片

# print(keyou.1name) # 支持通过字段名来取值

print(keyou._0) # 支持通过字段名来取值

2.创建

创建对象的两种方式:

# 创建对象的方式

from collections import namedtuple

# 1、定义一个类

Love = namedtuple(“Love”, “name gender age love_into hobby motto”)

# 2、创建对象

# 方法一,调用构造器来创建对象

keyou = Love(“可优”, “帅男”, 17, “Lemon little girl”, “Coding”, “Never Stop Learning!”)

# 方法二,使用_make方法来创建对象

one_person_value = [“可优”, “帅男”, 17, “Lemon little girl”, “Coding”, “Never Stop Learning!”] # 任何一个序列类型都行

keyou = Love._make(one_person_value)

# 3、获取命名元组的值

print(keyou[1]) # 支持元组的索引取值

print(keyou[-2:]) # 支持切片

print(keyou.name) # 支持通过字段名来取值

3.取值

获取命名元组中的元素的三种方式:

# 获取命名元组中的元素的方法

from collections import namedtuple

# 1、定义一个类

Love = namedtuple(“Love”, “name gender age love_into hobby motto”)

# 2、创建对象

one_person_value = [“可优”, “帅男”, 17, “Lemon little girl”, “Coding”, “Never Stop Learning!”] # 任何一个序列类型都行

keyou = Love._make(one_person_value)

# 3、获取命名元组的值

# 方法一,通过索引取值,也可以通过切片取值

print(keyou[1]) # 支持元组的索引取值

print(keyou[-2:]) # 支持切片

# 方法二,通过字段名来取值

print(keyou.name)

# 方法三,通过getattr来取值

print(getattr(keyou, ‘gender’))

4.其他操作

命名元组支持的其他操作:

_asdict方法

_replace方法

_fields属性

_field_defaults属性

# 命名元组支持的其他操作

from collections import namedtuple

# 1、定义一个类

fields = [“name”, “age”, “gender”, “love_into”, “hobby”, “motto”]

Love = namedtuple(“Love”, fields, rename=True, defaults=[“Coding”, “Never Stop Learning!”])

# 2、创建对象

one_person_value = [“可优”, “帅男”, 17, “Lemon little girl”, “Coding”, “Never Stop Learning!”] # 任何一个序列类型都行

keyou = Love._make(one_person_value)

# 3、获取命名元组的值

# 方法一,通过索引取值,也可以通过切片取值

# print(keyou[1]) # 支持元组的索引取值

# print(keyou[-2:]) # 支持切片

# 方法二,通过字段名来取值

# print(keyou.name)

# 方法三,通过getattr来取值

# print(getattr(keyou, ‘gender’))

# 4、其他操作

# _asdict方法,将元组转化为字典

one_dict = keyou._asdict()

print(dict(one_dict))

# _replace方法,修改元组中的值,会创建一个新元组,之前的元组未修改

print(“keyou的名牌号为:{}”.format(id(keyou)))

new_keyou = keyou._replace(age=16)

print(“new_keyou的值为:{}\n新门牌号为:{}\n”.format(new_keyou, id(new_keyou)))

# _fields,获取命名元组的所有属性名

print(keyou._fields)

# _field_defaults,获取命名元组的所有属性默认值

print(keyou._fields_defaults)

5.应用场景

将测试数据从Excel(csv、json、数据库)中读取出来,在Python中处理时,往往可以使用namedtuple来承载数据

需要使用元组来处理数据的所有场景都可以