数据类型转换篇(一)

文章目录

  • 7.1 ascii()
  • 7.2 bin()
  • 7.3 bool()
  • 7.4 bytearray()
  • 7.5 bytes()
  • 7.6 chr()
  • 7.8 complex()
  • 7.9 dict()
  • 7.10 eval()

7.1 ascii()

ascii() 是 Python 的内置函数,用于将一个对象转换为其“ASCII”表示形式。具体来说,它返回一个字符串,该字符串包含对象的可打印表示形式,其中非ASCII字符被转义。

这个函数通常用于调试和日志记录,因为它提供了一种方式来查看对象的文本表示形式,即使该对象包含非ASCII字符。

下面是一些使用 ascii() 函数的示例:

# 字符串的ASCII表示
print(ascii('Hello, 世界!'))  # 输出: 'Hello, \\u4e16\\u754c!'# 数字的ASCII表示
print(ascii(123))  # 输出: '123'# 列表的ASCII表示
print(ascii([1, 'a', 2.3]))  # 输出: '[1, \\'a\\', 2.3]'# 元组的ASCII表示
print(ascii((1, 'a', 2.3)))  # 输出: '(1, \\'a\\', 2.3)'# 字典的ASCII表示
print(ascii({'name': 'Alice', 'age': 30}))  # 输出: "{'name': 'Alice', 'age': 30}"

在上面的例子中,你可以看到 ascii() 函数将非ASCII字符(如中文字符)转换为它们的Unicode转义序列(例如,\u4e16\u754c)。这对于在文本环境中表示非ASCII字符非常有用,尤其是当这些环境不支持直接显示这些字符时。

需要注意的是,ascii() 函数并不尝试将对象转换为有效的Python表达式,而是提供一个可读的、可打印的字符串表示。如果你需要得到一个可以重新评估为原始对象的表示,应该使用 repr() 函数。

7.2 bin()

bin() 是 Python 的内置函数,用于将一个整数转换为其二进制表示的字符串形式。这个函数返回一个字符串,其中包含表示给定整数的二进制数。

以下是 bin() 函数的一些使用示例:

# 将整数转换为二进制字符串
binary_representation = bin(10)
print(binary_representation)  # 输出: '0b1010'# 带有更多位的整数
larger_binary = bin(123456)
print(larger_binary)  # 输出: '0b11110010000100000'# 负数也被转换为二进制补码形式
negative_binary = bin(-15)
print(negative_binary)  # 输出: '-0b11110001'# 尝试对非整数使用 bin() 会引发 TypeError
try:not_integer = bin(3.14)print(not_integer)
except TypeError as e:print("Error:", e)  # 输出: Error: 'bin() arg 1 must be an integer'

在上面的例子中,bin(10) 将整数 10 转换为其二进制表示,即 ‘0b1010’。注意返回的字符串以 ‘0b’ 开头,这表示它是一个二进制数。对于负数,bin() 函数返回的是该数的二进制补码形式。

二进制补码是一种表示负整数的方法,在计算机科学中非常常见。对于给定的负整数,其补码是通过将该整数的绝对值的二进制表示取反(即每位上的 0 变为 1,1 变为 0),然后加 1 来计算的。

需要注意的是,bin() 函数只能用于整数。如果你尝试对非整数使用它,将会引发 TypeError 异常。

7.3 bool()

bool() 是 Python 的内置函数,用于将给定的对象转换为一个布尔值(True 或 False)。在 Python 中,布尔值是两种可能的状态之一,通常用于条件判断、循环控制和其他逻辑操作。

bool() 函数的行为取决于传递给它的参数的类型和值:

  • 数字类型:非零数值被转换为 True,0(零)被转换为 False。
  • 字符串类型:非空字符串被转换为 True,空字符串 ‘’ 被转换为 False。
  • 列表、元组、字典等容器类型:非空容器被转换为 True,空容器(如 [], (), {})被转换为 False。
  • 对于自定义对象,如果定义了 bool() 方法,则调用该方法来确定对象的布尔值。如果没有定义 bool() 方法,但定义了 len() 方法,则对象被视为容器类型,并根据其长度来确定布尔值。如果既没有 bool() 也没有 len(),则引发 TypeError。

下面是一些使用 bool() 函数的例子:

# 数字的布尔值
print(bool(42))     # 输出: True
print(bool(0))      # 输出: False# 字符串的布尔值
print(bool("hello")) # 输出: True
print(bool(""))      # 输出: False# 容器的布尔值
print(bool([1, 2, 3]))   # 输出: True
print(bool([]))          # 输出: False
print(bool({"key": "value"})) # 输出: True
print(bool({}))          # 输出: False# 自定义对象的布尔值(需要定义 __bool__ 方法)
class MyClass:def __bool__(self):return Trueobj = MyClass()
print(bool(obj))  # 输出: True# 没有定义 __bool__ 方法的自定义对象
class AnotherClass:passanother_obj = AnotherClass()
try:print(bool(another_obj))
except TypeError as e:print("Error:", e)  # 输出: Error: <__main__.AnotherClass object at 0x...> is not callable

在这个例子中,我们展示了不同类型的对象如何被 bool() 函数转换为布尔值。需要注意的是,对于自定义对象,如果没有定义适当的魔术方法(如 bool() 或 len()),则不能直接使用 bool() 函数。

7.4 bytearray()

bytearray() 是 Python 的内置函数,用于创建一个可变的字节数组对象。字节数组是一个序列类型,它包含范围为 0 <= x < 256 的整数,这些整数表示 8 位字节。字节数组在内部使用数组存储,因此它可以比普通的字节字符串(bytes)更高效地进行修改。

以下是 bytearray() 函数的一些使用示例:

# 创建一个空的字节数组
ba = bytearray()
print(ba)  # 输出: bytearray(b'')# 创建一个包含一些字节的字节数组
ba = bytearray([65, 66, 67])
print(ba)  # 输出: bytearray(b'ABC')# 从字节字符串创建字节数组
bs = b'Hello'
ba = bytearray(bs)
print(ba)  # 输出: bytearray(b'Hello')# 从字符串创建字节数组(需要指定编码)
s = 'Hello'
ba = bytearray(s, 'utf-8')
print(ba)  # 输出: bytearray(b'Hello')# 通过迭代来创建字节数组
ba = bytearray(iter([65, 66, 67]))
print(ba)  # 输出: bytearray(b'ABC')# 修改字节数组的内容
ba = bytearray(b'Hello')
ba[0] = ord('X')  # 使用 ord 函数将字符转换为 ASCII 值
print(ba)  # 输出: bytearray(b'Xello')# 在字节数组中添加新内容
ba.append(ord('!'))
print(ba)  # 输出: bytearray(b'Xello!')# 从字节数组中删除内容
del ba[1]
print(ba)  # 输出: bytearray(b'Xello')

在上面的例子中,bytearray() 函数可以接受多种参数类型来创建字节数组,包括一个整数列表、一个字节字符串、一个可迭代对象(产生整数的),或者一个字符串和字符编码。

一旦创建了字节数组,就可以像处理列表一样处理它,包括索引、切片、追加、删除等操作。这使得 bytearray 在需要频繁修改字节数据的情况下比 bytes 类型更加灵活和高效。

7.5 bytes()

bytes() 是 Python 的内置函数,用于创建字节对象。字节是不可变的序列,通常用于表示二进制数据。与字节数组 (bytearray) 不同,字节对象一旦创建就不能被修改。

bytes() 函数可以接受几种不同类型的参数来创建字节对象:

  • 一个整数,表示要创建的字节对象的长度,并且生成包含空字节 (\x00) 的序列。
  • 一个整数序列,其中的每个整数都在 0 到 255 的范围内,表示字节的值。
  • 一个字节字符串,它将被复制到一个新的字节对象中。
  • 一个可迭代的对象,产生在 0 到 255 范围内的整数,用于创建字节对象。

下面是一些使用 bytes() 函数的例子:

# 创建一个长度为 5 的字节对象,包含空字节
b = bytes(5)
print(b)  # 输出可能是: b'\x00\x00\x00\x00\x00'# 创建一个包含特定值的字节对象
b = bytes([65, 66, 67])
print(b)  # 输出: b'ABC'# 从字节字符串创建字节对象
s = b'Hello'
b = bytes(s)
print(b)  # 输出: b'Hello'# 从整数序列创建字节对象
b = bytes([72, 101, 108, 108, 111])
print(b)  # 输出: b'Hello'# 从可迭代对象创建字节对象
b = bytes(iter([72, 101, 108, 108, 111]))
print(b)  # 输出: b'Hello'# 创建一个空字节对象
b = bytes()
print(b)  # 输出: b''

在上面的例子中,bytes() 函数被用来创建不同类型的字节对象。值得注意的是,当你传递一个整数给 bytes() 时,你创建的是一个包含该数量的空字节的字节对象。当你传递一个整数列表或其他可迭代对象时,列表中的每个整数都被视为一个字节,并用于创建字节对象。

由于字节是不可变的,所以一旦创建了一个字节对象,你就不能修改它包含的数据。如果你需要一个可以修改的字节序列,你应该使用 bytearray() 函数来创建一个字节数组对象。

7.6 chr()

chr() 是 Python 的内置函数,用于将整数(在 0 到 255 的范围内)转换为其对应的 ASCII 字符。ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,它用 7 位或 8 位二进制数表示 128 或 256 种可能的字符。

下面是一些使用 chr() 函数的例子:

# 将 ASCII 值转换为对应的字符
char = chr(65)
print(char)  # 输出: A# 转换其他 ASCII 值
print(chr(97))  # 输出: a
print(chr(32))  # 输出: 空格
print(chr(10))  # 输出: 换行符(在控制台可能不显示为可见字符)# 超出范围的整数值会引发 ValueError
try:print(chr(256))
except ValueError as e:print("Error:", e)  # 输出: Error: chr() arg not in range(256)# 使用 ord() 函数和 chr() 函数进行转换
original_char = 'A'
ascii_value = ord(original_char)
converted_char = chr(ascii_value)
print(converted_char)  # 输出: A

在这个例子中,chr(65) 将整数 65 转换为 ASCII 字符 ‘A’。类似地,chr(97) 将返回 ‘a’,因为 97 是小写字母 ‘a’ 的 ASCII 值。

值得注意的是,chr() 函数仅适用于 ASCII 字符集。对于更广泛的 Unicode 字符集,可以使用 chr() 的 Unicode 版本 unichr()(在 Python 2 中)或简单地使用 chr()(在 Python 3 中,因为 Python 3 默认支持 Unicode)。

此外,ord() 函数是 chr() 的逆操作,它接受一个字符并返回其对应的 ASCII 值。

7.8 complex()

complex() 是 Python 的内置函数,用于创建复数。复数是一个数学概念,可以表示为 a + bj,其中 a 和 b 是实数,j(或 i 在某些上下文中)是虚数单位,满足 j**2 = -1。

complex() 函数可以接受不同数量和类型的参数,以创建复数。以下是一些使用 complex() 的例子:

# 创建一个实数部分为 0,虚数部分为 1 的复数
c = complex(0, 1)
print(c)  # 输出: (0+1j)# 创建一个实数部分为 4,虚数部分为 3 的复数
c = complex(4, 3)
print(c)  # 输出: (4+3j)# 只传递一个参数时,该参数被视为复数的实数部分,虚数部分为 0
c = complex(4)
print(c)  # 输出: (4+0j)# 从字符串创建复数,格式应为 'real+imagj' 或 'real+imagI'
c = complex('4+3j')
print(c)  # 输出: (4+3j)# 从字符串创建复数,使用 'I' 作为虚数单位
c = complex('4+3I')
print(c)  # 输出: (4+3j)# 使用两个字符串分别表示实部和虚部
c = complex('4', '3')
print(c)  # 输出: (4+3j)# 复数也可以作为参数传递给 complex() 函数,它将返回相同的复数
c = complex(4+3j)
print(c)  # 输出: (4+3j)

除了创建复数,complex() 函数还可以用来将其他数据类型(如字符串、整数、浮点数等)转换为复数。当传递一个字符串给 complex() 时,该字符串应该遵循 ‘real[+imagj|imagI]’ 的格式,其中 real 是实部,imag 是虚部,[+imagj|imagI] 表示虚部可以带有符号,并且可以使用 j 或 I 作为虚数单位。

复数在数学、物理、工程和其他科学领域中有广泛应用,特别是在处理波动、交流电、量子力学等复杂问题时。Python 的 complex 类型提供了对这些复杂计算的支持。

7.9 dict()

dict() 是 Python 的内置函数,用于创建字典对象。字典是一种无序的键值对集合,其中每个键都是唯一的,并且与一个值相关联。

dict() 函数可以接受多种类型的参数来创建字典:

  • 无参数调用 dict() 会创建一个空字典。
  • 一个可迭代对象,如另一个字典、键值对的序列(例如列表的列表或元组的元组)或键值对的集合,其中每个元素都是一个包含两个元素的序列(例如列表或元组),第一个元素是键,第二个元素是值。
  • 一系列关键字参数,其中每个参数名成为字典的键,参数值成为对应的值。

下面是一些使用 dict() 函数的例子:

# 创建一个空字典
d = dict()
print(d)  # 输出: {}# 使用可迭代对象创建字典
keys = ['a', 'b', 'c']
values = [1, 2, 3]
d = dict(zip(keys, values))
print(d)  # 输出: {'a': 1, 'b': 2, 'c': 3}# 使用键值对的序列创建字典
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)  # 输出: {'a': 1, 'b': 2, 'c': 3}# 使用键值对的集合创建字典
d = dict({('a', 1), ('b', 2), ('c', 3)})
print(d)  # 输出: {'a': 1, 'b': 2, 'c': 3}# 使用关键字参数创建字典
d = dict(a=1, b=2, c=3)
print(d)  # 输出: {'a': 1, 'b': 2, 'c': 3}# 字典推导式也可以用来创建字典
d = {x: x**2 for x in range(3)}
print(d)  # 输出: {0: 0, 1: 1, 2: 4}

在上面的例子中,dict() 函数通过不同的方式创建了包含相同键值对的字典。

字典在 Python 中是一种非常有用的数据结构,因为它们允许你通过键快速查找、添加和删除值。字典的键必须是不可变的类型(如整数、浮点数、字符串或元组),而值可以是任何类型的数据。

7.10 eval()

eval() 是 Python 的内置函数,用于执行一个字符串表达式,并返回表达式的值。它基本上是一个内置的 Python 解释器,能够解析并执行传递给它的字符串。

使用 eval() 时要小心,因为它可以执行任何 Python 代码,这可能导致安全问题,特别是当执行的字符串来自不可信的来源(如用户输入或网络)时。恶意用户可能会尝试注入恶意代码来执行系统命令、访问敏感数据等。

下面是一些使用 eval() 的例子:

# 计算数学表达式
result = eval('3 + 4 * 2')
print(result)  # 输出: 11 (因为乘法优先级高于加法)# 执行简单的变量赋值
x = 10
eval('y = x + 5')
print(y)  # 输出: 15# 使用变量
x = 10
eval('print(x)')  # 输出: 10# 执行更复杂的逻辑
eval('if 1 > 0: print("True")')  # 输出: True

尽管 eval() 在某些情况下很有用,但通常最好避免使用它,特别是当处理来自用户或不可信的输入时。更安全的方法是使用其他方法,如 ast.literal_eval(),它只能评估 Python 字面量结构(如列表、元组、数字、字符串和字典),而不能执行任意代码。

例如,使用 ast.literal_eval() 来安全地评估字符串表示的字典:

import ast# 安全地评估一个字符串表示的字典
s = '{"key": "value"}'
dictionary = ast.literal_eval(s)
print(dictionary)  # 输出: {'key': 'value'}# 尝试评估恶意输入时会引发异常
s = '__import__("os").system("rm -rf /")'
try:ast.literal_eval(s)
except (ValueError, SyntaxError):print("Invalid or malicious input detected.")  # 输出: Invalid or malicious input detected.

在这个例子中,ast.literal_eval() 尝试评估一个字符串表示的字典,但如果字符串包含恶意代码,它会引发异常,从而防止执行恶意代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是485数据采集模块?

在工业自动化、智能楼宇、环境监测等众多领域&#xff0c;数据的采集与传输是实现智能化管理的关键。而485数据采集模块&#xff0c;作为一种高效、稳定的数据采集设备&#xff0c;正日益受到广泛关注。HiWoo Box&#xff0c;作为一款卓越的485数据采集模块&#xff0c;以其强大…

Maven 环境一键部署

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

Penpad 生态资产 $PDD 即将LaunchPad ,一文读懂Season 2 规则

Penpad 是 Scroll 上的 LauncPad 平台&#xff0c;该平台继承了 Scroll 底层的技术优势&#xff0c;并基于零知识证明技术&#xff0c;推出了系列功能包括账户抽象化、灵活的挖矿功能&#xff0c;并将在未来实现合规为 RWA 等资产登录 Scroll 生态构建基础。该平台被认为是绝大…

前端快速实现点击图片下载

目录 方法一&#xff1a;同源使用标签下载图片 方法二&#xff1a;跨域使用将canvas上的内容转换为Blob对象并下载 在前端开发中&#xff0c;有时候我们需要实现点击图片后直接下载的功能。本文将介绍两种方法来实现这一功能&#xff1a; 同源使用<a>标签下载图片跨域使…

安卓面试题多线程 121-125

121. 简述当一个线程进入某个对象的一个 synchronized 的实例方 法后,其它线程是否可进入此对象的其它方法 ?如果其他方法没有 synchronized 的话,其他线程是可以进入的。 所以要开放一个线程安全的对象时,得保证每个方法都是线程安全的122. 简述乐观锁和悲观锁的理解及如何…

C++概述

目录 一、C关键字&#xff08;63个&#xff09; 二、C几个关键点&#xff1a; 三、C语言缺陷一&#xff1a;命名冲突 四、C新概念&#xff1a;命名空间&#xff08;namespace&#xff09; 五、命名空间的嵌套&#xff1a; 六、展开命名空间&#xff1a;&#xff08;using …

切面类、注解、自定义切面类、自定义注解、如何通过注解实现切面类

1. 注解和切面类之间的关系 注解和切面类通常是配合使用的&#xff1a; 注解&#xff1a;用来标记代码&#xff0c;声明某个方法或类需要被特定的切面逻辑所增强。切面类&#xff1a;包含增强逻辑&#xff0c;它通过"切点"&#xff08;Pointcut&#xff09;来匹配被…

独家,澳门地区倾斜摄影OSGB数据免费领取

上一篇文章分享了如何将谷歌倾斜摄影原始数据如何转换成3DTiles的几种思路&#xff0c;并说明谷歌倾斜摄影3DTiles转换工具的技术先进性&#xff0c;同时也对谷歌倾斜摄影转换OSGB的几种技术思路做了对比&#xff0c;根据对比可知&#xff0c;谷歌倾斜摄影OSGB转换工具在生产效…

【No.14】蓝桥杯贪心法|最少硬币问题|活动安排问题(4)|翻硬币|快乐司机|防御力|答疑(C++)

算法优点 容易理解&#xff1a;生活常见 操作简单&#xff1a;在每一步都选局部最优 效率高&#xff1a;复杂度常常是O(1)的 算法缺点 局部最优不一定是全局最优 贪心算法&#xff08;Greedy algorithm&#xff09;&#xff0c;又称贪婪算法。是一种在每一步选择中都采取在…

小红书离线数仓提效新思路,提升百倍回刷性能

数据处理效率一直是大数据时代的核心话题&#xff0c;它推动着各类数据执行引擎持续迭代产品。从早期的 MapReduce&#xff0c;到今天的 Spark&#xff0c;各行业正不断演进其离线数仓技术架构。 现有以 Spark 为核心的数仓架构在处理大规模数据回刷方面已取得进展&#xff0c;…

专栏订阅-线上答疑通知

由于近期有很多大一的同学已经快速的做完了学院要求的9个lab&#xff0c;并且开始准备project。对于project存在很多问题。同时大部分的同学对制作小车非常的感兴趣&#xff0c;但又不知从何下手。博主针对于上述问题&#xff0c;将会在四月中旬左右开展一次统一的线上答疑&…

(vue)el-card区分背景图片、点击进入对应页面

(vue)el-card区分背景图片、点击进入对应页面 项目背景&#xff1a;郑州院XX项目首页-工作台模块卡片点击可 快速进入对应页面 html <div class"board-card"><el-cardv-for"(item, index) of cardList":key"index"class"board-ca…

【二】【单片机】有关独立按键的实验

自定义延时函数Delay 分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中&#xff0c;直接使用。 //Delay.c void Delay(unsigned int xms) //11.0592MHz {while(xms--){unsigned char i, j;i 2;j 199;do{while (--j);}…

[Linux]条件变量:实现线程同步(什么是条件变量、为什么需要条件变量,怎么使用条件变量(接口)、例子,代码演示(生产者消费者模式))

目录 一、条件变量 1.什么是条件变量 故事说明 2、为什么需要使用条件变量 竞态条件 3.什么是同步 饥饿问题 二、条件变量的接口 1.pthread_cond_t 2.初始化&#xff08;pthread_cond_init&#xff09; 3.销毁&#xff08;pthread_cond_destroy&#xff09; 4.等待&…

知识碎片-Java编程思想-接口篇

引言 本文是 OnJava 接口部分的学习笔记。 结论 “优先使用类而不是接口”。 从类设计开始&#xff0c;如果很明显接口是必要的&#xff0c;那么就重构。任何抽象都应该由真正的需求来驱动。接口应该是酒必要时用来重构的东西&#xff0c;而不是在任何地方都多加一个间接层级&…

阿里云2核4G服务器租用价格和性能测评

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

推免保研夏令营/预推免面试—东南网安

0x00简述 0x01 面试经历 0x02 相关资料下载 0x00简述 0x01 面试经历 0x02 相关资料下载 挖坑待写

Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用

参考https://juejin.cn/post/7152774411571953677&#xff0c;自己简洁化了一部分 1.安装pinia依赖 yarn add pinia 创建pini实例 根目录创建store文件夹&#xff0c;然后创建index.js import { createPinia } from piniaconst pinia createPinia()export default pinia …

如何使用人工智能和ChatGPT来优化营销转化率

人工智能 &#xff08;AI&#xff09; 和营销的交集正在彻底改变企业与客户互动的方式&#xff0c;最终改变营销转化率。人工智能能够分析大量数据、理解模式和自动执行任务&#xff0c;它不仅是一项创新技术&#xff0c;而且是营销领域的根本性转变。这种转变允许更加个性化、…

【计算机毕业设计】ssm073基于Word自动出题系统

基于Word自动出题系统 操作系统: Windows XP或Windows 7 开发工具: myeclipse 数据库: MySQL 系统研究目的及意义&#xff1a; 本课题研究通过信息化的手段进行对试题的出题工作&#xff0c;实现更加有效便捷的试题的编写和试卷的生成。这样不仅可以最大程度上较少学校教研工作…