xrange
xrange和range函数的区别只在于节省空间,而且xrange是一个不透明的序列结构,range在使用的时候就已经创建了所有的序列,而xrange在使用到的时候才会有真正的值,常用于loop结构。它实际上只支持了索引,迭代和长度函数。
strip
string类型对应的函数,用于去除一些特殊符号,例如 \n \t 等,没有参数的话会去除多个,如果有参数的话则会根据参数去除。但是按照2.7版本的官方文档来说只是去除了空格,但是实际上还去除了换行符等,不知道是不是版本的问题。
argument parse
- getopt(C stytle)
argparse
初始化
1
2
3
4
5
6
7import argparse
#新建一个解析器(应该是这么翻译的)
parser=argparse.ArgumentParser()
#增加一个开关变量
parser.add_argument("-v","--verbose",help="increate output verbosity",action="store_true")
#获得变量
args=parser.parse_args()这个变量有一个缩写的名字-v,完整的名字是–verbose,并且是个开关变量,即标志,这里因为’action=”store_true”‘,因此有这个参数出现的时候,就代表了args.vebosity=True,当’action=count’时,会是一个计数器
使用
args是一个带有所有参数变量的结构体(类)限定输入参数的类型
1
parser.add_argument("-v","--verbosity",type=int,help="balabalabala")
位置参数和可选参数
暂时还没搞懂这个区别,甚至是翻译是否正确也不知道(positional argument and optional argument)默认参数
可以用一个默认的和args相同尺寸的结构体来代替1
2
3
4
5parser=argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
parser.add_argument('--foo')
parser.add_argument('bar',nargs='?')
parser.parse_args(['--fool','1','BAR'])
parser.parse_args([])还没实验,有问题
还有另外一个方法,就是在parser.add_argument的最后加一个dafault=默认值
获得路径
- 获得当前工作路径
1
2import os
os.getcwd()
编码错误
如果碰到这个问题1
'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
可以用下面的代码来解决1
2
3import sys
reload(sys)
sys.setdefaultencoding('utf8')
修改开源组件
因为项目需要加打log,所以需要修改开源组件webpy来进行纪录log。默认情况下webpy会被安装在’/usr/local/lib/python2.7/dist-packages’这个目录下,你需要删除webpy相关的几个东西,看名字就可以知道了,如果只是重新编译并安装的话是没有用的,有些地方无法覆盖
内存分析工具meliae
安装
1 | sudo apt-get install python-pip |
dump内存
1 | from meliae import scanner |
分析内存
1 | from meliae import loader |
排序算法
文件锁
最近遇到一个问题,我需要跑N个进程的训练程序,然后我想有序地输出结果到文件中,并且是以追加的形式,因此我要在打开文件之前就
非root安装third party modules
1 | pip install --user <包名> |
*和**的用法
这是两种方便的做法,比如
1 | def foo(a,b): |
这里把a
中的两个分开,分别给了a
和b
。
而**
则可以把dict
中的value
赋给key
,然后传到函数中。