扁平序列,存放的都是原子级元素,此时存放的是值而不会是引用。 常见的扁平序列包括:str,bytes,bytearray, memoryview, array.array等。...(obj)是python的内置类,如果要用memoryview 去引用一个object, 那么这个object 必须支持buffer protocol, python3 中原生(built-in) 支持...类似于C中的强转,好处是不会有内存拷贝。 例如,使用memoryview修改一个短整型有符号整数数组的数据。...array('h', [-2, -1, 1024, 1, 2]) #原来的数组被修改 bytearray是可变(mutable)的字节序列,相对于Python2中的str,但str是不可变(immutable...在Python3中由于str默认是unicode编码,所以只有通过bytearray才能按字节访问。
中也有两种字符串,不过,python3中的str类在python2中名称为unicode,但是,python3中的bytes类在python2中名称为str类。...这意味着在python3中str类是一个文本字符串,而在python2中str类是一个字节字符串。 若不使用前缀实例化字符串,则返回一个str类(这里是字节字符串!!!)...于此类似,bytes类包含一个decode方法,接受一个编码作为 单个必要参数,并返回一个str。...另一个需要注意的是,python3中永远不会尝试隐式地在 一个str与一个bytes之间进行转换,需要显式使用str.encode 或者 bytes.decode方法。...' print ('bar %s' % b'foo') python2: """ 与python3不同的是,python2会在文本字符串和字节字符串之间尝试进行隐式转换。
这意味着在python3中str类是一个文本字符串,而在python2中str类是一个字节字符串。 若不使用前缀实例化字符串,则返回一个str类(这里是字节字符串!!!)...) 二、字符串转换 python3: 可以在str与bytes之间进行类型转换,str类包含一个encode方法,用于使用特定编码将其转换为一个bytes。...于此类似,bytes类包含一个decode方法,接受一个编码作为单个必要参数,并返回一个str。...另一个需要注意的是,python3中永远不会尝试隐式地在一个str与一个bytes之间进行转换,需要显式使用str.encode 或者 bytes.decode方法。 ...' print ('bar %s' % b'foo') python2: 与python3不同的是,python2会在文本字符串和字节字符串之间尝试进行隐式转换。
__init__(a) #无参数调用super() 3.8 改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出 TypeError而不是返回随即的bool值 #python2 >>> 2str' 3.9 新式的8进制字变量 #python2 >>> 0666 438 #python3...python2:字符串以8-bit字符串存储 python3:字符串以16-bit Unicode字符串存储, 现在字符串只有str一种类型 5.数据类型 5.1 Py3.x去除了long类型,现在只有一种类型...'bytes'> str对象和bytes对象可以使用.encode()(str->bytes) or .decode()(bytes->str)方法相互转化 6.面向对象 引入抽象基类 7.异常...#python3 try: #.... except Exception as e: #.... 8.其他 8.1 xrange()改名为range(),要想使用range()获得一个list
,字节码通过解码转换为字符串: str--->(encode)--->bytes,bytes--->(decode)--->str decode和encode详解 decode 解码,在已知字符串编码的情况下...它基于ECMAScript的一个子集。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。...ensure_ascii 如果无任何配置,或者说使用默认配置, 输出的会是中文的ASCII字符吗,而不是真正的中文。 这是因为json.dumps 序列化时对中文默认使用的ascii编码。...python3中存在序列化问题: TypeError: Object of type bytes is not JSON serializable 小结 在Web开发中,这个问题真的很讨厌,中文编码来回转换...更新 2019年2月13日晚,无意中又浏览到这篇文章,其实最终解决了问题,是自己把自己绕了一个大坑。
对于字符串,我们接触得挺多的。而编码问题,也不时令人头疼的。...由于一开始接触的就是 Python3,所以一些在 Python2 上的编码上的坑我没遇到,甚至在 Python3 上都很少遇到编码问题,因为 Python3 默认的编码是 utf-8,而之前又从 Windows...不过还是要重新认识一下字符与字节。字节可由指定字符串编码得到,是不可变类型。使用下标获取字节的值时,返回的是整数。这个是没想到的。很多适用于 str 对象的方法也适用于 bytes 对象。...struct 模块提供了一些函数可把字节序列与其他不同的类型互相转换。memoryview 用于共享内存,前面刚碰到过。 除了 utf-8 编码,Python 还内置了许多其他的编码器。...NFC(Normalization Form C)使用最少的码位构成等价的字符串,而 NFD 把组合字符分解成基字符和单独的组合字符。
,页面上显示的中文将会是字节码。...,字节码通过解码转换为字符串: str--->(encode)--->bytes,bytes--->(decode)--->str decode和encode详解 decode 解码,在已知字符串编码的情况下...它基于ECMAScript的一个子集。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。...ensure_ascii 如果无任何配置,或者说使用默认配置, 输出的会是中文的ASCII字符吗,而不是真正的中文。 这是因为json.dumps 序列化时对中文默认使用的ascii编码。...python3中存在序列化问题: TypeError: Object of type bytes is not JSON serializable 小结 在Web开发中,这个问题真的很讨厌,中文编码来回转换
想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?...python3 和 python2 是不兼容的,而且差异比较大,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的。...如果为了找工作还是学Python 2,学会了Python 2,由Python 2转到python3也不难。 说了半天,Python2与Python3到底有何区别呢?...7)改变了顺序操作符的行为,例如xTypeError而不是返回随即的 bool值 8)输入函数改变了,删除了raw_input,用input代替: 2.X:guess...版本的八位串,定义一个bytes字面量的方法如下: >>> b = b'china' >>> type(b) str对象和bytes对象可以使用.encode
所谓内置函数,就是无需import,就可以直接使用的函数 1. python2 & python3 内置函数统计 python2: 76 个 python3: 69 个 2....传入字典,需要提供key参数,返回最小值对应键 >>> min([2, 1, 3])1>>> d={'a': 2, 'b':1}; min(d, key=d.get)b 5 max() 求可迭代对象的最大值...() 将数字或对象转换成字符串 了解更多 >>> str(1.5)‘1.5’ >>> str([1, 2, 3])‘[1, 2, 3]’ 4 bool() 返回一个布尔值 >>> bool(0)False...>‘ 6 memoryview() 返回由给定实参创建的“内存视图”对象 >>> memoryview(bytearray([1, 2])) 7 format() 返回格式化字符串 >>> format...Python2与Python3私有的内置函数 3.1 python3新增函数(4个): ascii() breakpoint() bytes() exec() 3.1 python2有python3移除函数
扁平序列: str、bytes、bytearray、memoryview 和 array.array,这类序列只能容纳一种类型。...容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用(也可以说扁平序列其实存放的是一段连续的内存空间)。...'C' 这里 x 原来的值被取代了,变成了列表推导中的最后一个值,需要避免这个问题。...如果想先按图案排列再按数字排列,只需要调整 for 从句的先后顺序。 过滤序列元素 问题:你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 最简单的过滤序列元素的方法是使用列表推导。...这个时候,使用生成器表达式迭代产生过滤元素是一个好的选择。 生成器表达式 生成器表达式遵守了迭代器协议,可以逐个产出元素,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。
字符串:Python2中字符的类型,str:已经编码后的字节序列,unicode:编码前的文本字符;而Python3中字符的类型,str:编码过的unicode文本字符,bytes:编码前的字节序列。...编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。 在Python2中,str和unicode都有encode和decode方法。...Python3则进行了优化,str只有一个encode方法将字符串转化为一个字节码,而且bytes也只有一个decode方法将字节码转化为一个文本字符串。...迭代器:在Python2中很多返回列表对象的内置函数和方法在Python3都改成了返回类似于迭代器的对象,因为迭代器的惰性加载特性使得操作大数据更有效率。...另外,字典对象的dict.keys()、dict.values()方法都不再返回列表,而是以一个类似迭代器的view对象返回。高阶函数map、filter、zip返回的也都不是列表对象了。
input只能接受int类型的输入,否则就会把用户输入当做一个变量来处理,从而就会报NameError: name 'xxx' is not defined的错误。...Python3为了简洁统一,在Python3中已经不存在了raw_input函数,input一个函数完全可以做到所有使用,而且默认input接受任何输入都当做str类型处理。...平常如果我们用针对密码、密码串之类的交互的话,一般用户的输入时隐藏或者*的,输入密码时,在Python下如果你需要你输入的东西不可见,可以利用getpass 模块中的 getpass方法来处理,示例如下...所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。 而注释就能很大程度减少这一麻烦,写代码养成标注注释这是一个非常好的习惯。...): raise TypeError(hash_name)if not isinstance(password, (bytes, bytearray)): password = bytes(memoryview
这里要理解清楚所谓实现,其实多的就是一个字节数的信息,unicode和utf8本质上都是一串0和1,只是缺一个字节数量的区分,即,从信息量上来说: unicode + 自身长度 = utf8。...text string 都应该是 unicode 类型,而不是 str,如果你在操作 text,而类型却是 str,那就是在制造 bug。...·在需要转换的时候,显式转换。从字节解码成文本,用 var.decode(encoding),从文本编码成字节,用 var.encode(encoding)。...''' ''' Python2: str -> (decode) -> unicode -> (encode) -> str Python3: bytes -> (decode) -> str(unicode...# 而编了码就转为了bytes类型,所以Python3想正确实现就必须用二进制方式打开 (wb) # 如果打开方式和写入类型不对应,会抛TypeError,很明确 with open(WRITE_PATH
从python2转到python3的第一个问题就是字符串的问题,我花了些时间把我能想到的和字符串处理有关的东西都整理如下。...gbk #需要对utf-8的字符串通过unicode进行一个中转,再encode到gbk >>> c=b.decode("utf-8").encode("gbk") >>> c '\xd6\xd0\xce...,他可以encode成其他的字符串,所以在python3之后默认的字符串类型就变成了unicode,不在需要使用“u”去定义个unicode串,这也是导致python2和3不兼容的一个重要改变。...但同时我们可以看到在python2中,字符串和字节流混用了同一个类型(str),但是字符串(str)和unicode又同时可以显示文字。这也是经常让人抓狂的地方。...类型的,python3中bytes类型和str类型非常的类似,他们之间的转换关系。
第一个传入参数是要转换的字符串,第二个参数按什么编码转换为字节 eg. bytes(s,encoding = 'utf-8') , bytes(s,encoding = 'gbk') 1个字节占...8位;utf-8编码格式下,一个汉字占3个字节;gbk编码格式下,一个汉字占2个字节 str() 字节转换成字符串。...注意filter返回的是一个filter对象,实际应用中往往需要用list或tuple将其转换为列表或元组类型....,class) #查看这个类是否是另一个类的派生类,如果是返回True,否则返回False len('string') # 返回字符串长度,在python3中以字符为单位,在python2中以字节为单位...x**y%z 的结果 property() # 获取对象的所有属性 range() # 获取随机数或随机字符 eg. range(10) 从0到10的随机数 repr() # 执行传入对象中的_
字节串(bytes):不可变的二进制序列 字节串(bytes)是不可变的二进制序列,其中的元素是字节(byte)值,范围从0到255。字节串在Python 3中引入,用于处理二进制数据。...# 以下操作会引发 TypeError # my_bytes[0] = 65 字节数组(bytearray):可变的二进制序列 字节数组(bytearray)是可变的二进制序列,与字节串类似,但允许修改其中的元素...内存视图(memoryview)是一种内置对象,用于创建一个可变的窗口,以查看和修改字节数组或缓冲区的内容,而不需要复制数据。...数据序列化:将数据转换为字节串以便在存储或传输时使用。 总结 字节序列是一种非常重要的数据结构,用于处理二进制数据、文件I/O、网络通信等。...无论是在系统编程、网络编程、数据处理还是加密算法中,字节序列都是一个不可或缺的工具。
整数 python2中整形可以分为一般整形和长整形,但是在python3中,两者以及合二为一了,只有整形。python中的整形是具有无限精度的(只有内存能放下),可以表示任意位数的数字。...由于python2已经停止了支持,本专栏的所有内容将只针对python3。 /:现在python3中的/总是执行真除法,无论操作数的类型是什么。执行结果总是包含小数部分。...)用于将一个字符串或数字转换为整型。...需要特别注意的是,集合只包含不可变对象(可哈希的)类型,列表和字典是不能嵌入其中的,元组是可以的。但是集合本身是可变对象。关于集合的运算可以阅读集合论相关知识。...True和False的行为和1,0一致。bool为True和False重新定义了str和repr的字符串格式,所有打印出来就会显示True和False,而不是1,0.
, 把一个对象转换成bool值 ret = bool(None) ret = bool(1) result: False True bytearray的使用: 字节列表 列表元素是字节, bytes...修饰符 修饰符对应的函数不需要实例化,不需要self参数,但第一个参数需要时表示自身类的cls参数,可以来调用类的属性,类的方法,实例化对象等。...: 用于将一个可遍历的数据对象(list, tuple,str)组合为一个索引序列,同时列出数据,和数据下标。...(user_input) result: 请输入:wyc wyc isinstance的使用: 判断一个对象是否是一个已知的类型,类似type() a = 1 print(isinstance(a,...Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
python3里,print()是一个函数, 像其他函数一样,print()需要你将要输出的东西作为参数传给它。 3、input的区别: python2有两个全局函数,用在命令行请求用户输入。...可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在python3里, 只有一种整数类型int,大多数情况下,和python2中的长整型类似。...对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。...为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。 三、内存池机制 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。...2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。
运行telnetlib的时候报错:TypeError: a bytes-like object is required, not ‘str’,原因是因为python2和python3的版本的差异。...在python2中可正常运行,而python3最重要的新特性也是对文本和二进制数据做了更清晰的区分。文本用unicode编码,为str类型,二进制数据则为bytes类型。...python有两种类型转换的函数encode(),decode() 。 encode(编码),可以将str类型编码为bytes。 decode(译码),可以将bytes类型转换为str类型。...因此在telnetlib交互的时候需要使用encode()。 tn.read_until("username:".encode())
领取专属 10元无门槛券
手把手带您无忧上云