.py文件生成.exe
1. 把Python脚本生成windows可执行文件
pip install pyinstaller
pyinstaller -F "此处放你的脚本"
cx_freeze: http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html
2.安装virtualEnv 后,如何激活环境
virtualenv (--no-site-packages ) envname ##创建一个新的隔离环境 ,并且不会把原来的包拷过来
cd envname
Scripts\activate ##激活并切换到virtualenv环境
3. 当前文件的名字不能和导入的包名字相同(当前文件夹也可默认为一个包)
比如:创建一个selenium的文件夹
然后再导入selenium库,默认搜索的是selenium文件夹
sys.path.append("path")
4. 日志输出
os.system("F:\\autotest\\test_case\\%s 1>>log.txt 2>&1" %a)
2>&1是什么意思?2>&1应该分成两个部分来看,
一个是2>以及另一个是&1,其中2>就是将标准出错重定向到某个特定的地方;
&1是指无论标准输出在哪里。所以2>&1的意思就是说无论标准出错在哪里(哪怕是没有?),
都将标准出错重定向到标准输出中。
‘>’ 会覆盖
‘>>’ 不覆盖产生在一个文件内
Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表示将错误信息输出到文件a.txt中
>& log 表示把标准输出和错误输出都定向到文件log中,相当于 >log 2>&1
5. raw_input 乱码
raw_input(unicode('请输入文字','utf-8').encode('gbk'))
6. "python魔法方法:__getattr__,__setattr__,__getattribute__"
6.1 __getattr__:访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理
这实际上可以把一个类的所有属性和方法调用全部动态化处理了
如果要写SDK,给每个URL对应的API都写一个方法,那得累死,而且,API一旦改动,SDK也要改。
利用完全动态的__getattr__,我们可以写出一个链式调用:
6.2 __setattr__(self, item, value):当试图对象的item特性赋值的时候将会被调用
6.x:__iter__():迭代器,生成迭代对象时调用,返回值必须是对象自己,然后for可以循环调用next方法
7. __str__()
只需要定义好__str__()方法,返回一个好看的字符串就可以了
def __str__(self):
return 'Student object (name: %s)' % self.name
print Student('Michael')
Student object (name: Michael)
8. __repr__()
两者的区别是__str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。
__repr__ = __str__
重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了
# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了
9. __iter__
返回一个可迭代对象,拥有next()方法
10. __getitem__()
要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:
11. __call__()
只需要定义一个__call__()方法,就可以直接对实例进行调用
def __call__(self):
print('My name is %s.' % self.name)
>>> s = Student('Michael')
>>> s()
My name is Michael.
12
__new__: 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self)
__init__ : 对象的初始化, 是一个实例方法,第一个参数是self。
__call__ : 对象可call,注意不是类,是对象。
13. __contains__()
__contains__():当使用in,not in 对象的时候 调用(not in 是在in完成后再取反,实际上还是in操作)
14. for 循环的性能优化
s=''
L=[some_function(i) for i in list]
s=''.join(L)
options = [1,2,3,4,5,6]
print [opt for opt in options]
option ={"key1":'222',"key2":"33333"}
print [(name, opt) for name, opt in option.items()]
dict((name, opt) for name, opt in option.items())
a if a>b else b
if a>b:
c = a
else:
c = b
[对(x)的操作 for x in 集合 if 条件]
[对(x,y)的操作
for x in 集合1
for y in 集合2 if 条件]
15. sys._getframe(0) 为获取当前栈信息
###
16. python库下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 把.whl 改成.zip 解压即可
###
17 pyenv python 版本管理
####
18 解决pycharm问题:module 'pip' has no attribute 'main' https://segmentfault.com/q/1010000014743128 /Applications/PyCharm.app/Contents/helpers
网友评论