GVKun编程网logo

什么是Python字节串?(python 字节)

22

对于想了解什么是Python字节串?的读者,本文将提供新的信息,我们将详细介绍python字节,并且为您提供关于c–什么是不透明的字节串?、python-什么是Python中的元类?、python中的

对于想了解什么是Python字节串?的读者,本文将提供新的信息,我们将详细介绍python 字节,并且为您提供关于c – 什么是不透明的字节串?、python-什么是Python中的元类?、python中的字符串和字节串、python字典、字符串(json串)、字节串之间的转化的有价值信息。

本文目录一览:

什么是Python字节串?(python 字节)

什么是Python字节串?(python 字节)

什么是Python字节串?

我所能找到的只是关于如何编码为字节串或如何解码为asciior的主题utf-8。我正在尝试了解它是如何工作的。在普通的ASCII字符串中,它是一个数组或字符列表,每个字符代表0到255之间的ASCII值,因此您才能知道数字代表的字符。在Unicode中,字符的8或16字节表示形式可以告诉您它是什么字符。

那么什么是字节串?Python如何知道哪些字符表示为什么?它是如何工作的?由于您可以打印甚至返回这些字符串,并且可以显示字符串表示形式,所以我不太了解…

好的,所以我的意思是 肯定会 在这里错过。有人告诉我这是一个 不可变 的字节序列,没有任何特殊的 解释

字节序列。好吧,我们说一个字节:
''a''.encode()return b''a''

很简单。为什么我可以阅读 a

说我得到的ASCII值 一个 ,这样做:
printf "%d" "''a"

返回 97 。好的,好的ASCII字符 a 的整数值。如果我们将 97
解释为ASCII,用C表示char,则得到字母a。很公平。如果将字节表示形式转换为位,我们将得到:

01100001

2 ^ 0 + 2 ^ 5 + 2 ^ 6 = 97 。凉。

那么为什么要''a''.encode()返回b''a''而不是01100001??
如果 没有 特定的 解释 ,它是否应该返回类似的内容b''01100001''
看起来 像它解释它像ASCII。

有人提到它正在调用__repr__字节串,因此以易于阅读的形式显示。但是,即使我这样做:

with open(''testbytestring.txt'', ''wb'') as f:    f.write(b''helloworld'')

仍然helloworld以常规字符串的形式插入文件中,而不是以字节序列的形式插入…那么ASCII中的字节字符串是吗?

答案1

小编典典

Python 知道如何表示字节串。这才是重点。

在几乎所有输出窗口中输出值97的字符时,都会得到字符“
a”,但这不是实现的一部分;这只是一件事,在本地恰好是正确的。如果要编码,则不要使用字节串。如果使用字节串,则没有编码。

关于.txt文件的文章表明您误解了正在发生的事情。您会看到,纯文本文件也没有编码。它们只是一系列字节。这些字节得到通过文本编辑器转换成字母,但不能保证
所有 别人打开你的文件会看到同样的事情,你如果你外面流浪一套共同的ASCII字符。

c – 什么是不透明的字节串?

c – 什么是不透明的字节串?

我已经玩了一段时间,但我发现没有什么太有帮助.什么是不透明的字节字符串,它的c / c示例是什么?

更新
来自rfc5001的更多背景信息

2.3. NSID选项
NSID选项的OPTION-CODE是3.
NSID选项的OPTION-DATA是一个不透明的字节串,即
故意留在协议之外的语义.看到
第3.1节讨论.

解决方法

它们可能意味着未指定格式的字节数组. “不透明”意味着内部结构存在,但未知.因此,程序应该将字符串视为一个整体 – 存储它,传输它,但不要试图解释.

C示例将是std :: vector< unsigned char>的实例.一个C示例是一个unsigned char数组(动态AKA malloc’ated或静态).

python-什么是Python中的元类?

python-什么是Python中的元类?

如何解决python-什么是Python中的元类??

元类是类的类。类定义类的实例(即对象)的行为,而元类定义类的行为。类是元类的实例。

虽然在Python中你可以对元类使用任意可调用对象(例如Jerub演示),但是更好的方法是使其成为实际的类。type是Python中常见的元类。type它本身是一个类,并且是它自己的类型。你将无法type纯粹使用Python 重新创建类似的东西,但是Python有点作弊。要在Python中创建自己的元类,你实际上只想将其子类化type

元类最常用作类工厂。当你通过调用类创建对象时,Python通过调用元类来创建一个新类(执行“ class”语句时)。因此,与普通方法__init____new__方法结合使用,元类可以让你在创建类时做“额外的事情”,例如在某些注册表中注册新类或将其完全替换为其他类。

class执行该语句时,Python首先将class语句的主体作为普通代码块执行。生成的名称空间(字典)保留了将来类的属性。通过查看待定类的基类(继承了元类),待定类的__Metaclass__属性(如果有)或__Metaclass__全局变量来确定元类。然后使用该类的名称,基数和属性调用该元类以实例化它。

但是,元类实际上定义了类的类型,而不仅仅是它的工厂,因此你可以使用它们做更多的事情。例如,你可以在元类上定义常规方法。这些元类方法就像类方法,因为它们可以在没有实例的情况下在类上调用,但是它们也不像类方法,因为它们不能在类的实例上被调用。type.__subclasses__()type元类上方法的示例。你还可以定义正常的“魔力”的方法,如__add____iter____getattr__,执行或如何变化的类的行为。

这是一些细节的汇总示例:

def make_hook(f):
    """Decorator to turn ''foo'' method into ''__foo__''"""
    f.is_hook = 1
    return f

class MyType(type):
    def __new__(mcls, name, bases, attrs):

        if name.startswith(''None''):
            return None

        # Go over attributes and see if they should be renamed.
        newattrs = {}
        for attrname, attrvalue in attrs.iteritems():
            if getattr(attrvalue, ''is_hook'', 0):
                newattrs[''__%s__'' % attrname] = attrvalue
            else:
                newattrs[attrname] = attrvalue

        return super(MyType, mcls).__new__(mcls, name, bases, newattrs)

    def __init__(self, name, bases, attrs):
        super(MyType, self).__init__(name, bases, attrs)

        # classregistry.register(self, self.interfaces)
        print "Would register class %s Now." % self

    def __add__(self, other):
        class AutoClass(self, other):
            pass
        return AutoClass
        # Alternatively, to autogenerate the classname as well as the class:
        # return type(self.__name__ + other.__name__, (self, other), {})

    def unregister(self):
        # classregistry.unregister(self)
        print "Would unregister class %s Now." % self

class MyObject:
    __Metaclass__ = MyType


class Nonesample(MyObject):
    pass

# Will print "nonetype None"
print type(Nonesample), repr(Nonesample)

class Example(MyObject):
    def __init__(self, value):
        self.value = value
    @make_hook
    def add(self, other):
        return self.__class__(self.value + other.value)

# Will unregister the class
Example.unregister()

inst = Example(10)
# Will fail with an AttributeError
#inst.unregister()

print inst + inst
class Sibling(MyObject):
    pass

ExampleSibling = Example + Sibling
# ExampleSibling is Now a subclass of both Example and Sibling (with no
# content of its own) although it will believe it''s called ''AutoClass''
print ExampleSibling
print ExampleSibling.__mro__

解决方法

元类是什么,我们将它们用于什么?

python中的字符串和字节串

python中的字符串和字节串

字节概念:
  字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。
  位:(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。
  字节:(byte):是计算机中 数据处理 的基本单位,习惯上用大写  B  来表示,1B(byte,字节)= 8bit(位)。

字符概念

   字符 是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。在UTF-8编码  中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3个字节。
   一个英文就用八位二进制数表示,一个汉字就用3个八位二进制表示

字符串概念

  字符串是字符序列,它是一种抽象的概念,不能直接存储在硬盘。

 

字节串概念

  字节串是字节序列,它可以直接存储在硬盘。它们之间的映射被称为编码/解码

       在Python中,程序中的文本都用字符串表示。

 

python字节串和字符串代码介绍

>>> s = ''中文'' 
 
>>> s.encode() # 编码,默认的是UTF-8
b''\xe4\xb8\xad\xe6\x96\x87'' # 字节串
>>> type(s.encode())
<class ''bytes''>   # 字节串
 
 
>>> b''\xe4\xb8\xad\xe6\x96\x87''.decode(encoding=''UTF-8'') # 解码
''中文'' # 字符串
>>> type(b''\xe4\xb8\xad\xe6\x96\x87''.decode(encoding=''UTF-8''))
<class ''str''>     # 字符串

  encode()编码函数,decode()解码函数

 字节串是给计算机看的,给计算机传输或者保存的
 字符串是给人看的,用来操作的

python字典、字符串(json串)、字节串之间的转化

python字典、字符串(json串)、字节串之间的转化

字典和json字符串(本质也是字符串)之间的转化用json.dumps和json.loads()

json.dumps():   字典→json字符串

json.loads():     json字符串→字典

 

字符串和字节串之间的转化用encode()和decode()

encode():   字符串→字节串

decode():   字节串→字符串

 

所以这三种类型的数据可以通过字符串这个中间量进行转化,达到字典和字节串的互相转化。

例如注册页面,前端通过post方式向后端发送请求,后端从request.body里拿数据,这里拿到的数据本质类型是字节串

python3.6.8的可以直接用json.loads()把字节串直接转为字典,再从字典里拿对应的信息

python3.5.2就不行,必须要把字节串先转为字符串,再才能字符串变为字典

 

举个栗子看一下,只是部分代码,python版本为3.6.8:

if request.method == ''POST'':
    #注册
    json_str = request.body
    if not json_str:
      result = {''code'':202, ''error'': ''Please POST data!!''}
      return JsonResponse(result)
    #如果当前报错,请执行 json_str = json_str.decode()
    json_obj = json.loads(json_str)

    username = json_obj.get(''username'')
    email = json_obj.get(''email'')
    password_1 = json_obj.get(''password_1'')
    password_2 = json_obj.get(''password_2'')

今天关于什么是Python字节串?python 字节的分享就到这里,希望大家有所收获,若想了解更多关于c – 什么是不透明的字节串?、python-什么是Python中的元类?、python中的字符串和字节串、python字典、字符串(json串)、字节串之间的转化等相关知识,可以在本站进行查询。

本文标签: