python学习

xrange

xrange和range函数的区别只在于节省空间,而且xrange是一个不透明的序列结构,range在使用的时候就已经创建了所有的序列,而xrange在使用到的时候才会有真正的值,常用于loop结构。它实际上只支持了索引,迭代和长度函数。

strip

string类型对应的函数,用于去除一些特殊符号,例如 \n \t 等,没有参数的话会去除多个,如果有参数的话则会根据参数去除。但是按照2.7版本的官方文档来说只是去除了空格,但是实际上还去除了换行符等,不知道是不是版本的问题。

argument parse

  1. getopt(C stytle)
  2. argparse

    1. 初始化

      1
      2
      3
      4
      5
      6
      7
      import 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’时,会是一个计数器

    2. 使用
      args是一个带有所有参数变量的结构体(类)

    3. 限定输入参数的类型

      1
      parser.add_argument("-v","--verbosity",type=int,help="balabalabala")
    4. 位置参数和可选参数
      暂时还没搞懂这个区别,甚至是翻译是否正确也不知道(positional argument and optional argument)

    5. 默认参数
      可以用一个默认的和args相同尺寸的结构体来代替

      1
      2
      3
      4
      5
      parser=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. 获得当前工作路径
    1
    2
    import os
    os.getcwd()

编码错误

如果碰到这个问题

1
'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)

可以用下面的代码来解决

1
2
3
import sys
reload(sys)
sys.setdefaultencoding('utf8')

修改开源组件

因为项目需要加打log,所以需要修改开源组件webpy来进行纪录log。默认情况下webpy会被安装在’/usr/local/lib/python2.7/dist-packages’这个目录下,你需要删除webpy相关的几个东西,看名字就可以知道了,如果只是重新编译并安装的话是没有用的,有些地方无法覆盖

内存分析工具meliae

安装

1
2
3
sudo apt-get install python-pip
sudo apt-get install Cython
sudo pip install meliae

dump内存

1
2
from meliae import scanner
scanner.dump_all_objects('/opt/log/dump.txt')

分析内存

1
2
3
4
5
from meliae import loader
om = loader.load('/opt/log/dump.txt')
om.compute_parents()
om.collapse_instance_dicts()
om.summarize()

排序算法

文件锁

最近遇到一个问题,我需要跑N个进程的训练程序,然后我想有序地输出结果到文件中,并且是以追加的形式,因此我要在打开文件之前就

非root安装third party modules

1
pip install --user <包名>

*和**的用法

这是两种方便的做法,比如

1
2
3
4
5
6
def foo(a,b):
print(a)
print(b)

a=[1,2]
foo(*a)

这里把a中的两个分开,分别给了ab

**则可以把dict中的value赋给key,然后传到函数中。

分享到