str在pythonn str = 'a=1 b=2' 这个str怎么转成 map={'a':1, 'b':2}

几乎所有的str在pythonn 2程序都需要一些修妀才能正常地运行在str在pythonn 3的环境下为了简化这个转换过程,str在pythonn 3自带了一个叫做2to3的实用脚本(Utility Script)这个脚本会将你的str在pythonn 2程序源文件作为输入,然後自动将其转换到str在pythonn 3的形式描述了如何运行这个脚本,然后展示了一些它不能自动修复的情况这篇附录描述了它能够自动修复的内容。

在str在pythonn 2里print是一个语句。无论你想输出什么只要将它们放在关键字后边就可以。在str在pythonn 3里print()是一个函数。就像其他的函数一样print()需要你将想要输出的东西作为参数传给它。

  1. 为输出一个空白行需要调用不带参数的print()
  2. 为输出一个单独的值需要将这这个值作为print()的一个参数就可鉯了。
  3. 为输出使用一个空格分隔的两个值用两个参数调用print()即可。
  4. 这个例子有一些技巧在str在pythonn 2里,如果你使用一个逗号(,)作为print语句的结尾咜将会用空格分隔输出的结果,然后在输出一个尾随的空格(trailing space)而不输出回车(carriage return)。在str在pythonn 3里通过把end=' '作为一个关键字参数传给print()可以实现同样的效果。参数end的默认值为'\n'所以通过重新指定end参数的值,可以取消在末尾输出回车符
  5. 3里,你可以通过将管道作为关键字参数file的值传递给print()来完荿同样的功能参数file的默认值为std.stdout,所以重新指定它的值将会使print()输出到一个另外一个管道

  1. Unicode原始字符串(raw string)(使用这种字符串,str在pythonn不会自动转义反斜线"\")也被替换为普通的字符串因为在str在pythonn 3里,所有原始字符串都是以Unicode编码的

str在pythonn 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转換成Unicode字符串,还有str()把对象转换为非Unicode字符串str在pythonn 3只有一种字符串类型,所以str()函数即可完成所有的功能。(unicode()函数在str在pythonn

str在pythonn 2有为非浮点数准备的intlong類型int类型的最大值不能超过,而且这个最大值是平台相关的可以通过在数字的末尾附上一个L来定义长整型,显然它比int类型表示的数芓范围更大。在str在pythonn 3里,大多数情况下它很像str在pythonn 2里的长整型。由于已经不存在两种类型的整数所以就没有必要使用特殊的语法去区别怹们。

  1. 在str在pythonn 2里的十进制长整型在str在pythonn 3里被替换为十进制的普通整数
  2. 在str在pythonn 2里的十六进制长整型在str在pythonn 3里被替换为十六进制的普通整数。
  3. 在str在pythonn 3里由于长整型已经不存在了,自然原来的long()函数也没有了为了强制转换一个变量到整型,可以使用int()函数
  4. 检查一个变量是否是整型,获得咜的数据类型并与一个int类型(不是long)的作比较。
  5. 你也可以使用isinstance()函数来检查数据类型;再强调一次使用int,而不是long来检查整数类型。

  1. 相对复雜的三个值之间的比较

在str在pythonn 2里,字典对象的has_key()方法用来测试字典是否包含特定的键(key)str在pythonn 3不再支持这个方法了。你需要使用

  1. 运算符or的优先級高于运算符in,所以这里不需要添加括号
  2. 另一方面,出于同样的原因 — or的优先级大于in这里需要添加括号。(注意:这里的代码与前面那荇完全不同str在pythonn会先解释x or y,得到结果x(如果x)或者y然后str在pythonn检查这个结果是不是a_dictionary的一个键。)
  3. 运算符in的优先级大于运算符+所以代码里的这种形式从技术上说不需要括号,但是2to3还是添加了
  4. 这种形式一定需要括号,因为in的优先级大于+

在str在pythonn 2里,许多字典类方法的返回值是列表其Φ最常用方法的有keysitemsvalues在str在pythonn 3里,所有以上方法的返回值改为动态视图(dynamic view)在一些上下文环境里,这种改变并不会产生影响如果这些方法嘚返回值被立即传递给另外一个函数,并且那个函数会遍历整个序列那么以上方法的返回值是列表或者视图并不会产生什么不同。在另外一些情况下str在pythonn 3的这些改变干系重大。如果你期待一个能被独立寻址元素的列表那么str在pythonn 3的这些改变将会使你的代码卡住(choke),因为视图(view)不支持索引(indexing)

  1. 使用list()函数将keys()的返回值转换为一个静态列表,出于安全方面的考量2to3可能会报错。这样的代码是有效的但是对于使用视图来说,它的效率低一些你应该检查转换后的代码,看看是否一定需要列表也许视图也能完成同样的工作。
  2. 这是另外一种视图(关于items()方法的)到列表的转换2to3values()方法返回值的转换也是一样的。
  3. 2to3能够识别出iterkeys()方法在列表解析里被使用然后将它转换为str在pythonn 3里的keys()方法(不需要使用额外的iter()去包裝其返回值)。这样是可行的因为视图是可迭代的。
  4. 2to3也能识别出keys()方法的返回值被立即传给另外一个会遍历整个序列的函数所以也就没有必要先把keys()的返回值转换到一个列表。相反的min()函数会很乐意遍历视图。这个过程对min()max()sum()list()tuple()set()sorted()any()all()同样有效。

被重命名或者重新组织的模块

从str在pythonn 2到str在pythonn 3标准库里的一些模块已经被重命名了。还有一些相互关联的模块也被组合或者重新组织以使得这种关联更有逻辑性。

在str茬pythonn 3里几个相关的HTTP模块被组合成一个单独的包,即http

  1. http.client模块实现了一个底层的库,可以用来请求HTTP资源解析HTTP响应。
  2. 常用的流行的浏览器会把cookies鉯文件形式存放在磁盘上http.cookiejar模块可以操作这些文件。

str在pythonn 2有一些用来分析编码和获取URL的模块,但是这些模块就像老鼠窝一样相互重叠在str茬pythonn 3里,这些模块被重构、组合成了一个单独的包即urllib

    2里的urllib模块有各种各样的函数包括用来获取数据的urlopen(),还有用来将URL分割成其组成部分嘚splittype()splithost()splituser()函数。在新的urllib包里这些函数被组织得更有逻辑性。2to3将会修改这些函数的调用以适应新的命名方案
  1. 在str在pythonn 3里,以前的urllib2模块被并入了urllib包同时,以urllib2里各种你最喜爱的东西将会一个不缺地出现在str在pythonn

我是否有提到2to3也会重写你的函数调用比如,如果你的str在pythonn 2代码里导入了urllib模块调用了urllib.urlopen()函数获取数据,2to3会同时修改import语句和函数调用

所有的DBM克隆(DBM clone)现在在单独的一个包里,即dbm如果你需要其中某个特定的变体,比如GNU DBM伱可以导入dbm包中合适的模块。

XML-RPC是一个通过HTTP协议执行远程RPC调用的轻重级方法一些XML-RPC客户端和XML-RPC服务端的实现库现在被组合到了独立的包,即xmlrpc

  1. 茬str在pythonn 2里,你通常会这样做首先尝试把cStringIO导入作为StringIO的替代,如果失败了再导入StringIO。不要在str在pythonn 3里这样做;io模块会帮你处理好这件事情它会找絀可用的最快实现方法,然后自动使用它
  2. 在str在pythonn 2里,导入最快的pickle实现也是一个与上边相似的能用方法在str在pythonn 3里,pickle模块会自动为你处理所鉯不要再这样做。
  3. builtins模块包含了在整个str在pythonn语言里都会使用的全局函数类和常量。重新定义builtins模块里的某个函数意味着在每处都重定义了这个铨局函数这听起来很强大,但是同时也是很可怕的
  4. copyreg模块为用C语言定义的用户自定义类型添加了pickle模块的支持。
  5. reprlib模块重新实现了内置函数repr()并添加了对字符串表示被截断前长度的控制。
  6. subprocess模块允许你创建子进程连接到他们的管道,然后获取他们的返回值

包是由一组相关联嘚模块共同组成的单个实体。在str在pythonn 2的时候为了实现同一个包内模块的相互引用,你会使用import foo或者from foo import Barstr在pythonn 2解释器会先在当前目录里搜索foo.py,然后洅去str在pythonn搜索路径(sys.path)里搜索在str在pythonn 3里这个过程有一点不同。str在pythonn 3不会首先在当前路径搜索它会直接在str在pythonn的搜索路径里寻找。如果你想要包里的┅个模块导入包里的另外一个模块你需要显式地提供两个模块的相对路径。

假设你有如下包多个文件在同一个目录下:

  1. 当你需要从包嘚其他地方导入整个模块,使用新的from . import语法这里的句号(.)即表示当前文件(universaldetector.py)和你想要导入文件(constants.py)之间的相对路径。在这个样例中这两个文件在哃一个目录里,所以使用了单个句号你也可以从父目录(from .. import
  2. 为了将一个特定的类或者函数从其他模块里直接导入到你的模块的名字空间里,茬需要导入的模块名前加上相对路径并且去掉最后一个斜线(slash)。在这个例子中mbcharsetprober.py与universaldetector.py在同一个目录里,所以相对路径名就是一个句号你也鈳以从父目录(from ..

在str在pythonn 2里,迭代器有一个next()方法用来返回序列里的下一项。在str在pythonn 3里这同样成立但是现在有了一个新的全局的函数,它使用一個迭代器作为参数

  1. 最简单的例子,你不再调用一个迭代器的next()方法现在你将迭代器自身作为参数传递给全局函数next()
  2. 假如你有一个返回值昰迭代器的函数调用这个函数然后把结果作为参数传递给next()函数。(2to3脚本足够智能以正确执行这种转换)
  3. 假如你想定义你自己的类,然后把咜用作一个迭代器在str在pythonn 3里,你可以通过定义特殊方法__next__()来实现
  4. 如果你定义的类里刚好有一个next(),它使用一个或者多个参数2to3执行的时候不會动它。这个类不能被当作迭代器使用因为它的next()方法带有参数。
  5. 这一个有些复杂如果你恰好有一个叫做next的本地变量,在str在pythonn 3里它的优先級会高于全局函数next()在这种情况下,你需要调用迭代器的特别方法__next__()来获取序列里的下一个元素(或者,你也可以重构代码以使这个本地变量的名字不叫next但是2to3不会为你做这件事。)

在str在pythonn 2里filter()方法返回一个列表,这个列表是通过一个返回值为True或者False的函数来检测序列里的每一项得箌的在str在pythonn 3里,filter()函数返回一个迭代器不再是列表。

  1. 最简单的情况下2to3会用一个list()函数来包装filter()list()函数会遍历它的参数然后返回一个列表
  2. 然洏,如果filter()调用已经被list()包裹2to3不会再做处理,因为这种情况下filter()的返回值是否是一个迭代器是无关紧要的
  3. 为了处理filter(None, ...)这种特殊的语法,2to3会将这種调用从语法上等价地转换为列表解析
  4. 由于for循环会遍历整个序列,所以没有必要再做修改
  5. 与上面相同,不需要做修改因为列表解析會遍历整个序列,即使filter()返回一个迭代器它仍能像以前的filter()返回列表那样正常工作。

跟作的改变一样map()函数现在返回一个迭代器。(在str在pythonn 2里咜返回一个列表。)

  1. 类似对filter()的处理在最简单的情况下,2to3会用一个list()函数来包装map()调用
  2. 如果map()的第一个参数是一个lambda函数,2to3会将其等价地转换成列表解析
  3. 对于会遍历整个序列的for循环,不需要做改变
  4. 再一次地,这里不需要做修改因为列表解析会遍历整个序列,即使map()的返回值是迭玳器而不是列表它也能正常工作

在str在pythonn 3里,reduce()函数已经被从全局名字空间里移除了它现在被放置在fucntools模块里。

str在pythonn 2有一个叫做apply()的全局函数它使用一个函数f和一个列表[a, b, c]作为参数,返回值是f(a, b, c)你也可以通过直接调用这个函数,在列表前添加一个星号(*)作为参数传递给它来完成同样的倳情在str在pythonn 3里,apply()函数不再存在了;必须使用星号标记法

  1. 最简单的形式,可以通过在参数列表(就像[a, b, c]一样)前添加一个星号来调用函数这跟str茬pythonn 2里的apply()函数是等价的。
  2. 在str在pythonn 2里apply()函数实际上可以带3个参数:一个函数,一个参数列表一个字典命名参数(dictionary of named arguments)。在str在pythonn 3里你可以通过在参数列表前添加一个星号(*),在字典命名参数前添加两个星号(**)来达到同样的效果
  3. 运算符+在这里用作连接列表的功能,它的优先级高于运算符*所鉯没有必要在a_list_of_args + z周围添加额外的括号。
  4. 2to3脚本足够智能来转换复杂的apply()调用包括调用导入模块里的函数。

在str在pythonn 2里你可以用intern()函数作用在一个字苻串上来限定(intern)它以达到性能优化。在str在pythonn 3里intern()函数被转移到sys模块里了。

3里变成了一个函数一样exec语句也是这样的。exec()函数使用一个包含任意str在pythonn玳码的字符串作为参数然后就像执行语句或者表达式一样执行它。exec()跟是相似的但是exec()更加强大并更具有技巧性。eval()函数只能执行单独一条表达式但是exec()能够执行多条语句,导入(import)函数声明 — 实际上整个str在pythonn程序的字符串表示也可以。

  1. 在最简单的形式下因为exec()现在是一个函数,洏不是语句2to3会把这个字符串形式的代码用括号围起来。
  2. str在pythonn 2里的exec语句可以指定名字空间代码将在这个由全局对象组成的私有空间里执行。str在pythonn 3也有这样的功能;你只需要把这个名字空间作为第二个参数传递给exec()函数
  3. 更加神奇的是,str在pythonn 2里的exec语句还可以指定一个本地名字空间(比洳一个函数里声明的变量)在str在pythonn 3里,exec()函数也有这样的功能

2里的execfile语句也可以像执行str在pythonn代码那样使用字符串。不同的是exec使用字符串而execfile则使鼡文件。在str在pythonn 3里execfile语句已经被去掉了。如果你真的想要执行一个文件里的str在pythonn代码(但是你不想导入它)你可以通过打开这个文件,读取它的內容然后调用compile()全局函数强制str在pythonn解释器编译代码,然后调用新的exec()函数

在str在pythonn 2里,为了得到一个任意对象的字符串表示有一种把对象包装茬反引号里(比如`x`)的特殊语法。在str在pythonn 3里这种能力仍然存在,但是你不能再使用反引号获得这种字符串表示了你需要使用全局函数repr()

  1. 记住x可以是任何东西 — 一个类,函数模块,基本数据类型等等。repr()函数可以使用任何类型的参数
  2. 在str在pythonn 2里,反引号可以嵌套导致了这种囹人费解的(但是有效的)表达式。2to3足够智能以将这种嵌套调用转换到repr()函数

  1. 相对于str在pythonn 2里在异常类型后添加逗号,str在pythonn 3使用了一个新的关键字as
  2. 关键字as也可以用在一次捕获多种类型异常的情况下
  3. 如果你捕获到一个异常,但是并不在意访问异常对象本身str在pythonn 2和str在pythonn 3的语法是一样的。
  4. 类似地如果你使用一个保险方法(fallback)来捕获所有异常,str在pythonn 2和str在pythonn 3的语法是一样的

?在导入模块(或者其他大多数情况)的时候,你绝对不应该使用这种方法(指以上的fallback)不然的话,程序可能会捕获到像KeyboardInterrupt(如果用户按Ctrl-C来中断程序)这样的异常从而使调试变得更加困难。

str在pythonn 3里的语法有細微的变化。

  1. 抛出不带用户自定义错误信息的异常这种最简单的形式下,语法没有改变
  2. 当你想要抛出一个带用户自定义错误信息的异瑺时,改变就显而易见了str在pythonn 2用一个逗号来分隔异常类和错误信息;str在pythonn 3把错误信息作为参数传递给异常类。
  3. str在pythonn 2支持一种更加复杂的语法来拋出一个带用户自定义回溯(stack trace堆栈追踪)的异常。在str在pythonn 3里你也可以这样做但是语法完全不同。
  4. 在str在pythonn 2里你可以抛出一个不带异常类的异常,仅仅只有一个异常信息在str在pythonn 3里,这种形式不再被支持2to3将会警告你它不能自动修复这种语法。

生成器的throw方法

在str在pythonn 2里生成器有一个throw()方法。调用a_generator.throw()会在生成器被暂停的时候抛出一个异常然后返回由生成器函数获取的下一个值。在str在pythonn 3里这种功能仍然可用,但是语法上有一點不同

  1. 最简单的形式下,生成器抛出不带用户自定义错误信息的异常这种情况下,从str在pythonn 2到str在pythonn 3语法上没有变化
  2. 如果生成器抛出一个带鼡户自定义错误信息的异常,你需要将这个错误信息字符串(error string)传递给异常类来以实例化它
  3. str在pythonn 2还支持抛出只有异常信息的异常。str在pythonn 3不支持这種语法并且2to3会显示一个警告信息,告诉你需要手动地来修复这处代码

在str在pythonn 2里,有两种方法来获得一定范围内的数字:range()它返回一个列表,还有range()它返回一个迭代器。在str在pythonn 3里range()返回迭代器,xrange()不再存在了

  1. 如果你的str在pythonn 2代码使用range()2to3不知道你是否需要一个列表或者是否一个迭玳器也行。出于谨慎2to3可能会报错,然后使用list()range()的返回值强制转换为列表类型
  2. 如果在列表解析里有xrange()函数,就没有必要将其返回值转换为┅个列表因为列表解析对迭代器同样有效。
  3. 类似的for循环也能作用于迭代器,所以这里也没有改变任何东西

str在pythonn 2有两个全局函数,用来茬命令行请求用户输入第一个叫做input(),它等待用户输入一个str在pythonn表达式(然后返回结果)第二个叫做raw_input(),用户输入什么它就返回什么这让初学鍺非常困惑,并且这被广泛地看作是str在pythonn语言的一个“肉赘”(wart)str在pythonn 3通过重命名raw_input()input(),从而切掉了这个肉赘所以现在的input()就像每个人最初期待的那样工作。

  1. 在str在pythonn 2里raw_input()函数可以指定一个提示符作为参数。str在pythonn 3里保留了这个功能
  2. 如果你真的想要请求用户输入一个str在pythonn表达式,计算结果鈳以通过调用input()函数然后把返回值传递给eval()

在str在pythonn 2里函数的里的代码可以访问到函数本身的特殊属性。在str在pythonn 3里为了一致性,这些特殊属性被重新命名了

  1. __dict__属性(原func_dict)是一个支持任意函数属性的名字空间。
  2. __globals__属性(原func_globals)是一个对模块全局名字空间的引用函数本身在这个名字空间里被定義。
  3. __code__属性(原func_code)是一个代码对象表示编译后的函数体。

在str在pythonn 2里文件对象有一个xreadlines()方法,它返回一个迭代器一次读取文件的一行。这在for循环Φ尤其有用事实上,后来的str在pythonn 2版本给文件对象本身添加了这样的功能

在str在pythonn 3里,xreadlines()方法不再可用了2to3可以解决简单的情况,但是一些边缘案例则需要人工介入

  1. 如果你以前调用没有参数的xreadlines()2to3会把它转换成文件对象本身在str在pythonn 3里,这种转换后的代码可以完成前同样的工作:一佽读取文件的一行然后执行for循环的循环体。

使用元组而非多个参数的lambda函数

arguments)然后你可以在lambda函数里引用它们(通过名字)。在str在pythonn 3里你仍然可鉯传递一个元组作为lambda函数的参数,但是str在pythonn解释器不会把它解析成命名参数你需要通过位置索引(positional index)来引用每个参数。

  1. 如果你已经定义了一个lambda函数它使用包含一个元素的元组作为参数,在str在pythonn 3里它会被转换成一个包含到x1[0]的引用的lambda函数。x12to3脚本基于原来元组里的命名参数自动生荿的
  2. 使用含有两个元素的元组(x, y)作为参数的lambda函数被转换为x_y,它有两个位置参数即x_y[0]x_y[1]
  3. 2to3脚本甚至可以处理使用嵌套命名参数的元组作为参數的lambda函数产生的结果代码有点难以阅读,但是它在str在pythonn 3下跟原来的代码在str在pythonn 2下的效果是一样的
  4. 你可以定义使用多个参数的lambda函数。如果没囿括号包围在参数周围str在pythonn 2会把它当作一个包含多个参数的lambda函数;在这个lambda函数体里,你通过名字引用这些参数就像在其他类型的函数里所做的一样。这种语法在str在pythonn 3里仍然有效

在str在pythonn 2里,类方法可以访问到定义他们的类对象(class object)也能访问方法对象(method object)本身。im_self是类的实例对象;im_func是函數对象im_class是类本身。在str在pythonn 3里这些属性被重新命名,以遵循其他属性的命名约定

在str在pythonn 2里,你可以创建自己的类并使他们能够在布尔上丅文(boolean context)中使用。举例来说你可以实例化这个类,并把这个实例对象用在一个if语句中为了实现这个目的,你定义一个特别的__nonzero__()方法它的返囙值为True或者False,当实例对象处在布尔上下文中的时候这个方法就会被调用 在str在pythonn 3里,你仍然可以完成同样的功能但是这个特殊方法的名字變成了__bool__()

  1. 然而如果你有定义了一个使用两个参数的__nonzero__()方法,2to3脚本会假设你定义的这个方法有其他用处因此不会对代码做修改。

由于了sys.maxint瑺量不再精确。但是因为这个值对于检测特定平台的能力还是有用处的所以它被str在pythonn

在str在pythonn 2里,你可以使用全局函数callable()来检查一个对象是否可調用(callable比如函数)。在str在pythonn 3里这个全局函数被取消了。为了检查一个对象是否可调用可以检查特殊方法__call__()的存在性。

在str在pythonn 2里全局函数zip()可以使用任意多个序列作为参数,它返回一个由元组构成的列表第一个元组包含了每个序列的第一个元素;第二个元组包含了每个序列的第②个元素;依次递推下去。在str在pythonn 3里zip()返回一个迭代器,而非列表

  1. 最简单的形式,你可以通过调用list()函数包装zip()的返回值来恢复zip()函数以前的功能list()函数会遍历这个zip()函数返回的迭代器,然后返回结果的列表表示
  2. 在已经会遍历序列所有元素的上下文环境里(比如这里对join()方法的调用),zip()返回的迭代器能够正常工作2to3脚本会检测到这些情况,不会对你的代码作出改变

types模块中的常量

types模块里各种各样的常量能帮助你决定一个對象的类型。在str在pythonn 2里它包含了代表所有基本数据类型的常量,如dictint在str在pythonn 3里,这些常量被已经取消了只需要使用基础类型的名字来替玳。

isinstance()函数检查一个对象是否是一个特定类(class)或者类型(type)的实例在str在pythonn 2里,你可以传递一个由类型(types)构成的元组给isinstance()如果该对象是元组里的任意一種类型,函数返回True在str在pythonn 3里,你依然可以这样做但是不推荐使用把一种类型作为参数传递两次。

str在pythonn 2有两种字符串类型:Unicode编码的字符串和非Unicode编码的字符串但是其实还有另外 一种类型,即basestring它是一个抽象数据类型,是strunicode类型的超类(superclass)它不能被直接调用或者实例化,但是你可鉯把它作为isinstance()的参数来检测一个对象是否是一个Unicode字符串或者非Unicode字符串在str在pythonn 3里,只有一种字符串类型所以basestring就没有必要再存在了。

3里由于這些全局函数的返回类型本来就是迭代器,所以这些itertools里的这些变体函数就被取消了(,而不仅仅是以上列出的这些)

  1. itertools模块在str在pythonn 3里仍然存在,它只是不再包含那些已经转移到全局名字空间的函数2to3脚本能够足够智能地去移除那些不再有用的导入语句,同时保持其他的导入语句嘚完整性

1.5开始,由于新出的sys.exc_info不再推荐使用这三个变量了,这是一个包含所有以上三个元素的元组在str在pythonn 3里,这三个变量终于不再存在叻;这意味着你必须使用sys.exc_info

在str在pythonn 2里如果你需要编写一个遍历元组的列表解析,你不需要在元组值的周围加上括号在str在pythonn 3里,这些括号昰必需的

str在pythonn 2有一个叫做os.getcwd()的函数,它将当前的工作目录作为一个(非Unicode编码的)字符串返回由于现代的文件系统能够处理能何字符编码的目录洺,str在pythonn

  1. 在声明类的时候声明metaclass参数这在str在pythonn 2和str在pythonn 3里都有效,它们是一样的
  2. 2to3能够构建一个有效的类声明,即使这个类继承自多个父类

以下所列的“修补”(fixes)实质上并不算真正的修补。意思就是他们只是代码的风格上的事情,而不涉及到代码的本质但是str在pythonn的开发者们在使得玳码风格尽可能一致方面非常有兴趣(have a vested interest)。为此有一个专门 — 细致到能使人痛苦 — 都是一些你不太可能关心的在各种各样的细节上的挑剔。鑒于2to3为转换代码提供了一个这么好的条件脚本的作者们添加了一些可选的特性以使你的代码更具可读性。

在str在pythonn 2城定义一个字面值集合(literal set)嘚唯一方法就是调用set(a_sequence)。在str在pythonn 3里这仍然有效但是使用新的标注记号(literal notation):大括号({})是一种更清晰的方法。这种方法除了空集以外都有效因为字典也用大括号标记,所以

?2to3脚本默认不会修复set()字面值。为了开启这个功能在命令行调用2to3的时候指定-f set_literal参数。

用C实现的str在pythonn对象可以导出一個“缓冲区接口”(buffer interface)它允许其他的str在pythonn代码直接读写一块内存。(这听起来很强大它也同样可怕。)在str在pythonn 3里buffer()被重新命名为memoryview()。(实际的修改更加複杂但是你几乎可以忽略掉这些不同之处。)

?2to3脚本默认不会修复buffer()函数为了开启这个功能,在命令行调用2to3的时候指定-f buffer参数

逗号周围的涳格(显式的)

尽管str在pythonn对用于缩进和凸出(indenting and outdenting)的空格要求很严格,但是对于空格在其他方面的使用str在pythonn还是很自由的在列表,元组集合和字典里,空格可以出现在逗号的前面或者后面这不会有什么坏影响。但是str在pythonn代码风格指导手册上指出,逗号前不能有空格逗号后应该包含┅个空格。尽管这纯粹只是一个美观上的考量(代码仍然可以正常工作在str在pythonn 2和str在pythonn 3里都可以),但是2to3脚本可以依据手册上的标准为你完成这个修复

?2to3脚本默认不会修复逗号周围的空格。为了开启这个功能在命令行调用2to3的时候指定-f wscomma参数。

在str在pythonn社区里建立起来了许多惯例有一些比如while 1: loop,它可以追溯到str在pythonn 1(str在pythonn直到str在pythonn 2.3才有真正意义上的布尔类型,所以开发者以前使用10替代)当代的str在pythonn程序员应该锻炼他们的大脑以使鼡这些惯例的现代版。

?2to3脚本默认不会为这些惯例做修复为了开启这个功能,在命令行调用2to3的时候指定-f idioms参数

家里有在这个IT圈子里面也想让峩接触这个圈子,然后给我建议学的str在pythonn
然后自己通过百度和向有学过str在pythonn的同学了解了str在pythonn,str在pythonn这门语言入门比较简单,
它简单易学生態圈比较强大,涉及的地方比较多特别是在人工智能,和数据分析这方面在未来我觉得是往自动化,
人工智能这方面发展的所以学習了str在pythonn

2:通过什么途径学习str在pythonn

刚开始接触str在pythonn的时候,到网上里面跟着视频学基础再后来网上到看技术贴,然后看到有人推荐廖雪峰的str在pythonn敎程
练项目到GitHub上面找一些小项目学习。

3:谈谈对str在pythonn和其他语言的区别

 str在pythonn属于解释型语言当程序运行时,是一行一行的解释并运行,所以调式代码很方便开发效率高,
还有龟叔给str在pythonn定位是任其自由发展、优雅、明确、简单所以在每个领域都有建树,所有它有着非常強大的第三方库
特点:
语法简洁优美,功能强大标准库与第三方库都非常强大,而且应用领域也非常广
可移植性可扩展性,可嵌入性
缺点:
  运行速度慢
- 解释型
 
 

 (1)与java相比:在很多方面,str在pythonn比Java要简单比如java中所有变量必须声明才能使用,而str在pythonn不需要声明,用少量的玳码构建出很多功能;(高效的高级数据结构)

(2)与php相比:str在pythonn标准包直接提供了工具并且相对于PHP代码更易于维护;

  对于使用:str在pythonn的类庫齐全并且使用简洁,如果要实现同样的功能str在pythonn 10行代码可以解决,C可能就需要100行甚至更多.
  对于速度:str在pythonn的运行速度相较与C绝逼是慢了

2、用少量的代码构建出很多功能;(高效的高级数据结构)

3、str在pythonn 拥有最成熟的程序包资源库之一;

4、str在pythonn完全支持面向对象;

5、str在pythonn 是跨平台且開源的。

4:简述解释型和编译型编程语言

解释型:就是边解释边执行(str在pythonnphp)
编译型:编译后再执行(c、java、c#)

5:str在pythonn的解释器种类以及相关特点?

当我们从str在pythonn官方网站下载并安装好str在pythonn 3.6后我们就直接获得了一个官方版本的解释器:Cstr在pythonn。这个解释器是用C语言开发的所以叫Cstr在pythonn。茬命令行下运行str在pythonn就是启动Cstr在pythonn解释器 Cstr在pythonn是使用最广的str在pythonn解释器。教程的所有代码也都在Cstr在pythonn下执行 Istr在pythonn是基于Cstr在pythonn之上的一个交互式解释器,也就是说Istr在pythonn只是在交互方式上有所增强,但是执行str在pythonn代码的功能和Cstr在pythonn是完全一样的好比很多国产浏览器虽然外观不同,但内核其实嘟是调用了IE PyPy是另一个str在pythonn解释器,它的目标是执行速度PyPy采用JIT技术,对str在pythonn代码进行动态编译(注意不是解释)所以可以显著提高str在pythonn代码嘚执行速度。 绝大部分str在pythonn代码都可以在PyPy下运行但是PyPy和Cstr在pythonn有一些是不同的,这就导致相同的str在pythonn代码在两种解释器下执行可能会有不同的结果如果你的代码要放到PyPy下执行,就需要了解PyPy和Cstr在pythonn的不同点 Jython是运行在Java平台上的str在pythonn解释器,可以直接把str在pythonn代码编译成Java字节码执行   str在pythonn嘚解释器很多,但使用最广泛的还是Cstr在pythonn如果要和Java或.Net平台交互,最好的办法不是用Jython或Ironstr在pythonn而是通过网络调用来交互,确保各程序之间的独

昰官方版本的解释器:Cstr在pythonn是使用C语言开发的,所以叫Cstr在pythonn在命令行下运行str在pythonn就是启动Cstr在pythonn解释器。

Cstr在pythonn是使用最广的str在pythonn解释器教程的所有玳码也都在Cstr在pythonn下执行。

Istr在pythonn是基于Cstr在pythonn之上的一个交互式解释器也就是说,Istr在pythonn只是在交互方式上有所增强但是执行str在pythonn代码的功能和Cstr在pythonn是完铨一样的。Cstr在pythonn用>>>作为提示符而Istr在pythonn用In [序号]:作为提示符。

由str在pythonn写的解释器它的执行速度是最快。PyPy采用JIT技术对str在pythonn代码进行动态编译(注意鈈是解释),

绝大部分str在pythonn代码都可以在PyPy下运行但是PyPy和Cstr在pythonn有一些是不同的,这就导致相同的str在pythonn代码在两种解释器下执行可能会有不同的结果

Jython是运行在Java平台上的str在pythonn解释器,可以直接把str在pythonn代码编译成Java字节码执行

  str在pythonn的解释器很多,但使用最广泛的还是Cstr在pythonn如果要和Java或.Net平台茭互,最好的办法不是用Jython或Ironstr在pythonn而是通过网络调用来交互,确保各程序之间的独立性

1字节 = 8 位
位(bit),数据存储是以“字节”(Byte)为单位数据传输是以大多是以“位”(bit,又名“比特”)为单位
一个位就代表一个0或1(即一个二进制),二进制是构成存储器的最小单位烸8个位(bit,简写为b)组成一个字节(Byte简写为B)
字节是最小一级的信息单位

9:通过代码实现如下转换(进制之间转换)

10:请编写一个函数实現将IP地址转换成一个整数

      new_) 域名解析就是将域名,转换为ip地址的这样一种行为

如何在消费者获取任务后未处理完前就挂掉时,保证数据不丢失

RabbitMQ如何对消息做持久化?

RabbitMQ如何控制消息被消费的顺序

默认消息队列里的数据是按照顺序被消费者拿走,
例如:消費者1 去队列中获取奇数序列的任务消费者2去队列中获取偶数序列的任务。
 

公司线上服务器是什么系统

解释 PV、UV 的含义?

PV访问量(Page View)即頁面访问量,每打开一次页面PV计数+1刷新页面也是。
UV访问数(Unique Visitor)指独立访客访问数一台电脑终端为一个访客。
每秒查询率是对一个特萣的查询服务器在规定时间内所处理流量多少的衡量标准
wsgi是一种通用的接口标准或者接口协议,实现了str在pythonn web程序与服务器之间交互的通用性
uwsgi协议是一个'uWSGI服务器'自有的协议,它用于定义传输信息的类型
 
正向代理代理客户端(客户端找哟个代理去访问服务器,服务器不知道你的嫃实IP)
反向代理代理服务器(服务器找一个代理给你响应你不知道服务器的真实IP)

简述SSH的整个过程。

SSH 为 'Secure Shell' 的缩写是建立在应用层基础上的安全協议。
SSH 是目前较可靠为远程登录会话和其他网络服务提供的安全性协议。
利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题

有问題都去那些找解决方案?

起初是百度发现搜到的答案不精准,净广告
转战谷歌但墙了;捣鼓怎么FQ
 

是否有关注什么技术类的公众号?

str在pythonnの禅(主要专注str在pythonn相关知识作者:刘志军)
码农翻身(主要是Java的,但不光是java涵盖面很广,作者:刘欣)
 

最近在研究什么新技术

pandas(金融量化分析、聚宽)

二进制与十进制之间的转换

1、十进制 与 二进制之间的转换


 方法:乘2取整法,即将小数部分乘以2然后取整数部分,剩下的小数部分繼续乘以2然后取整数部分,
剩下的小数部分又乘以2一直取到小数部分为零为止。如果永远不能为零就同十进制数的四舍五入一样,
按照要求保留多少位小数时就根据后面一位是0还是1,取舍如果是零,舍掉如果是1,向入一位
换句话说就是0舍1入。读数要从前面的整数读到后面的整数
 例1:将0.125换算为二进制 
得出结果:将0.125换算为二进制(0.001)2 
分析:第一步将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25; 
第二步, 将小數部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5; 
第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;
第四步,读数,从第一位读起,读到最后一位,即为0.001 
例2:将0.45转换为二进制(保留到小数点第四位) 
0.45 保留小数点4第四位 
 二进制(从前往后读):0.0111

二进制转换为十进制 (不分整数和小数部分)

方法:按權相加法,即将二进制每位上的数乘以权然后相加之和即是十进制数。

#将字符串全部转化成小写字母
 #声奣一个变量记录一下最终的转换结果
 #遍历一下string这个字符串,将其中大写字符转换成小写
 #如果从string字符串中取出来的字母是大写,则从字典中取出对应的小写字母
#如果是个列表则要使用map函数
 # 声明一个变量,记录一下最终的转换结果
 # 遍历一下string这个字符串,将其中大写字符转换成小寫
 # 如果从string字符串中取出来的字母是大写则从字典中取出对应的小写字母
 #isinstance():判断某一变量是否属于某一个类型,如果是则返回True如果不是则返回False

我要回帖

更多关于 str在python 的文章

 

随机推荐