在python中将任何类型更改为字节

在python中将任何类型更改为字节,python,byte,Python,Byte,在python中,您可以将python中的任何类型更改为如下字符串: str(数据) 有没有一种方法可以像str(data)方法一样将任何类型更改为字节?(没有if声明) 类似于字节(数据): #示例 data=“你好” data=bytes(data)#数据现在是b'hello' 数据=23423 数据=字节(数据)#数据现在是b'23423' 数据=b'nice' 数据=字节(数据)#数据现在是b'nice' 数据=[0,3] 数据=字节(数据)#数据现在是b'[0,3]' 使用str(

在python中,您可以将python中的任何类型更改为如下字符串:

str(数据)
有没有一种方法可以像
str(data)
方法一样将任何类型更改为字节?(没有if声明)

类似于
字节(数据)

#示例
data=“你好”
data=bytes(data)#数据现在是b'hello'
数据=23423
数据=字节(数据)#数据现在是b'23423'
数据=b'nice'
数据=字节(数据)#数据现在是b'nice'
数据=[0,3]
数据=字节(数据)#数据现在是b'[0,3]'
使用
str(data).encode()
bytes(str(value),“utf-8”)
不是我想要的,因为当数据
data=b'dsfsdf'
时,输出是
b“b'dsfsdf'

当你为自定义对象调用
str(data)
时,它基本上是在调用
数据,因此,通过给对象一个
\uuuu str\uuu
方法,您可以精确地指定
str(数据)
的实际外观。对于
字节(数据)
您只需实现
\uuuuuu字节

In [1]: class A:
   ...:   def __bytes__(self):
   ...:     return b"A"

In [2]: bytes(A())[0] == 65
Out[2]: True

In [3]: bytes(A())
Out[3]: b'A'

In [4]: str(A())
Out[4]: "<class '__main__.A'>"

如果您想要更健壮的东西,请使用类似

的序列化库,因为注释中有关于使用
pickle
包进行序列化的建议,下面是执行序列化的代码

import pickle

data = "hello"
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

data = 23423
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

data = b'nice'
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

data = [0, 3]
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

output :
hello
23423
b'nice'
[0, 3]

ps:感谢您建议使用pickle
字节(str(value),“utf-8”)
这是否回答了您的问题@Martheen我正在尝试不导入libraries@lordcommander,这不在你的问题中。没有一个内置函数可以完全满足你的需要。如果是instance(数据,字节)或者str(数据),那么基本上需要
数据。encode()
我编辑了我的问题
import pickle

data = "hello"
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

data = 23423
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

data = b'nice'
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

data = [0, 3]
byte_data = pickle.dumps(data)
print(pickle.loads(byte_data))

output :
hello
23423
b'nice'
[0, 3]