前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python内置(5)容器、字节、类型转换、format

Python内置(5)容器、字节、类型转换、format

作者头像
一只大鸽子
发布2022-12-06 14:37:28
4740
发布2022-12-06 14:37:28
举报

list, tuple, dict, set and frozenset: The containers

Python中的“容器”是指可以在其中保存任意数量项的数据结构。

Python 有 5 种基本容器类型: list:有序、有索引的容器。每个元素都存在于特定的索引处。列表是可变的,即可以随时添加或删除项目。 tuple:有序、有索引,就像列表一样,但有一个关键区别:tuple是不可变的,这意味着一旦创建元组,就无法添加或删除项目。 dict: 无序键值对。键用于访问对应的值。键-值是一一对应的。 set:无序、不重复的数据集合。集合中的项目仅表示它们的存在或不存在。例如,您可以使用集合来查找森林中的树木种类。他们的顺序并不重要,重要的是他们是否存在。 frozenset,类似set,但不可变。

bytearray and memoryview: 更好的byte接口

bytearraybytes对象的可变等效物,就像列表是可变元组。 bytearray很有用,因为:

  • • 许多低级交互都与字节和位操作有关,就像str.upper,所以有一个字节数组,你可以改变单个字节,这将更加高效。
  • • bytes具有固定大小(即...1 字节)。另一方面,由于 unicode 编码标准“utf-8”,字符串字符可以具有各种大小:
代码语言:javascript
复制
>>> x = 'I♥🐍'
>>> len(x)
3
>>> x.encode()
b'I\xe2\x99\xa5\xf0\x9f\x90\x8d'
>>> len(x.encode())
8
>>> x[2]
'🐍'
>>> x[2].encode()
b'\xf0\x9f\x90\x8d'
>>> len(x[2].encode())
4

三个字符长的字符串“I♥🐍”实际上是八个字节,蛇表情符号的长度为4个字节。但是,在它的编码版本中,我们可以访问每个单独的字节。因为它是一个字节,它的“值”将始终介于 0 和 255 之间:

代码语言:javascript
复制
>>> x[2]
'🐍'
>>> b = x[2].encode()
>>> b
b'\xf0\x9f\x90\x8d'  # 4 bytes
>>> b[:1]
b'\xf0'
>>> b[1:2]
b'\x9f'
>>> b[2:3]
b'\x90'
>>> b[3:4]
b'\x8d'
>>> b[0]  # indexing a bytes object gives an integer
240
>>> b[3]
141

同时,memoryview将这个想法更进一步:它几乎就像一个bytearray,但它可以通过引用来引用对象或切片,而不是为自己创建新的副本。它允许您将引用传递给内存中的字节部分,并对其进行就地编辑:

代码语言:javascript
复制
>>> array = bytearray(range(256))
>>> array
bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08...
>>> len(array)
256
>>> array_slice = array[65:91]  # Bytes 65 to 90 are uppercase english characters
>>> array_slice
bytearray(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
>>> view = memoryview(array)[65:91]  # Does the same thing,
>>> view
<memory at 0x7f438cefe040>  # but doesn't generate a new new bytearray by default
>>> bytearray(view)
bytearray(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')  # It can still be converted, though.
>>> view[0]  # 'A'
65
>>> view[0] += 32  # Turns it lowercase
>>> bytearray(view)
bytearray(b'aBCDEFGHIJKLMNOPQRSTUVWXYZ')  # 'A' is now lowercase.
>>> bytearray(view[10:15])
bytearray(b'KLMNO')
>>> view[10:15] = bytearray(view[10:15]).lower()
>>> bytearray(view)
bytearray(b'aBCDEFGHIJklmnoPQRSTUVWXYZ')  # Modified 'KLMNO' in-place.

bin, hex, oct, ord, chr and ascii: 基本转换

bin,hex,oct分别是2进制、16进制、8进制,可用于整数的进制转换。

代码语言:javascript
复制
>>> bin(42)
'0b101010'
>>> hex(42)
'0x2a'
>>> oct(42)
'0o52'
>>> 0b101010
42
>>> 0x2a
42
>>> 0o52
42

ordchr用于转换 ascii 以及 unicode 字符及其字符代码:

代码语言:javascript
复制
>>> ord('x')
120
>>> chr(120)
'x'
>>> ord('🐍')
128013
>>> hex(ord('🐍'))
'0x1f40d'
>>> chr(0x1f40d)
'🐍'
>>> '\U0001f40d'  # The same value, as a unicode escape inside a string
'🐍'

format: Easy text transforms

format(string, spec) 等同于 string.format(spec)。简单的字符串格式化。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一只大鸽子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • list, tuple, dict, set and frozenset: The containers
  • bytearray and memoryview: 更好的byte接口
  • bin, hex, oct, ord, chr and ascii: 基本转换
  • format: Easy text transforms
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档