六角括号在word里怎么打 小括号怎么打( 二 )



1.6.6 列表推导产生的变量泄漏问题

python2

>>> x = 'my precious'>>> dummy = >>> x'C'>>> dummy<'A', 'B', 'C'>

python3

>>> x = 'my precious'>>> dummy = >>> x'my precious'>>> dummy<'A', 'B', 'C'>

python2中,在列表推导中同名变量的赋值可能会影响上下文环境;而在python3中,都有自己的局部作用域 。使用生成器则不会出现这种变量泄漏的问题 。
1.6.7 import

python2默认是按照相对路径导入模块和包,python3默认则是按照绝对路径导入 。
python2引入一个module时会先在当前目录搜索,然后再去搜索路径(sys.path)搜索;而python3直接在搜索路径搜索,为了导入,使用显式路径导入 。
Python2.x 缺省为相对路径导入,Python3.x 缺省为绝对路径导入 。绝对导入可以避免导入子包覆盖掉标准库模块(由于名字相同,发生冲突) 。如果在 Python2.x 中要默认使用绝对导入,可以在文件开头加入如下语句:
from __future__ import absolute_import

这句 import 并不是指将所有的导入视为绝对导入,而是指禁用 implicit relative import(隐式相对导入), 但并不会禁掉 explicit relative import(显示相对导入) 。
from .foo import Foo#python2、3都适用from .bar import Bar#python2、3都适用#from mdl.foo import Foo#python2、3都适用#from mdl.bar import Bar#python2、3都适用#from foo import Foo#python3不适用#from bar import Bar#python3不适用

1.6.8 Exception

py2 : except exc, var
py3 : except exc as var,使用 as 作为关键词
1.6.9 不等运算符

Python 2.x中不等于有两种写法 != 和 <>
Python 3.x中去掉了<>, 只有!=一种写法
1.6.10 dict方法

py2中dict的keys()、items()、values() 是列表,iteritems()返回迭代器
py3中dict的keys()、items()、values() 是类或迭代器,非基础数据类型,执行json的加解密时,需要注意
py3中iteritems() 和 viewitems() 这两个方法都已经废除了,而items()得到的结果是和py2里面viewitems()一致的 。在py3里用items()替换iteritems() ,可以用于for来循环遍历
1.6.11 数据类型

在Python2中long是比int取值范围更大的整数,Python3中取消了long类型,int的取值范围扩大到之前的long类型范围 。
python3版本中增加了bytes类型
1.6.12 重载

当我们想对python中原有的模块进行覆盖,又不希望退出当前的程序,就需要用到重载的概念
# python2 内置函数reload(module)# python3 from importlib import reloadreload(module)

1.7 项目依赖库安装

pip freeze > requirements.txt 导出项目的依赖 。pip install -r requirements.txt 在项目中一次性安装依赖

1.8 用venv 配置不同的开发环境

pip install virtualenv进入到项目目录,执行virtualenv --no-site-packages venv(虚拟环境到名字) no-site-packages意思是不复制系统到安装包,得到的是纯净的环境激活虚拟环境 source venv/bin/activate 。进入了venv环境,pip包时只安装到该环境下,系统python环境不受任何影响(windows系统venv\Scripts\activate),激活后Python 解释器的路径就被添加进PATH 中 。退出虚拟环境 deactivate,回到系统python环境

python3内置了用于创建虚拟环境的venv,可直接使用python3 -m venv .venv(Linux下)
py -3 -m venv .venv
virtualenv --python=/usr/local/bin/python3 env3 #创建指定python版本的虚拟环境 --python 指定python解释器
1.9.代码风格

折叠长行的首选方法是在小括号,中括号,大括号中使用Python隐式换行 。长行可以在表达式外面使用小括号来变成多行 。连续行使用反斜杠更好 。和None比较用is缩进使用4个空格,而不要用tab不要在for和while后面用else为变量赋值时,赋值符号的左右侧应该各自写上一个空格 。文件中的函数和类之间应该用两个空行隔开 。在同一个类中,各方法之间应该用一个空行隔开 。

1.10.新式类和旧式类

python2中既有新式类又有旧式类,并且默认为经典类,只有显示继承object才是新式类 。
class a(Object):pass#新式类写法class a():pass#经典类(旧式类)写法class a:pass#经典类写法类.mro()#查看解析顺序列表,只有新式类有该属性 。----------------------------------------------------------------------class a():passc=a()print dir(c)---------------------------------out<'__doc__', '__module__'>class a(object):passc=a()print dir(c)-------------------------------out<'__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'>*:在编写python类时,尽量使用新式类,其包含更多属性 。