Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58993
  • 博文数量: 30
  • 博客积分: 1211
  • 博客等级: 中尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 14:14
文章分类

全部博文(30)

文章存档

2011年(1)

2010年(22)

2009年(7)

我的朋友

分类: Python/Ruby

2010-04-10 17:52:00

格式化字符串

主要有两种方式:
a = "Author:%s Email:%s" % ('username','usermail@gmail.com')
print a输出:
Author:username Email:usermail@gmail.com

#使用字典的方式
b = "Author:%(user)s Email:%(email)s" % {'user':'username','email':'usermail@gmail.com'}
print b输出:
Author:username Email:usermail@gmail.com


int和char的转化
C语言中,可以用指针分别访问int型中的每个字节,在python中可以使用struct来实现类似功能,如下:

import struct
aint = 358
chars = struct.pack(">i", aint)
bint = struct.unpack(">i", chars)

结果:
chars = '\x00\x00\x01f'
bint = (358,)
说明:pack按照第一个参数给定类型的字节数,将aint转换成对应的字节表示,其中“i”表示有符号整型,“>”表示big endian;unpack和pack刚好相反,从chars中读取一定的字节数,转换成第一个参数指定的类型。
关于pack()和unpack()第一个参数的详细内容可以通过
import struct
print struct.__doc__
查看。

字符串中的每个字符转化为对应的ASCII
返回char的ASCII,asc = ord(char),例如ord('a')返回97
返回ASCII对应的char,char = chr(asc),例如chr(97)返回'a'
str2asc = lambda str: [ord(char) for char in str]
例如str = '123',str2asc(str)返回[49, 50, 51]

zip
()
将几个序列打包,变成一个list,其中每个元素是一个tuple,tuple的元素分别来自各个序列。
例如:zip((1,2,3),('a','b','c'))返回 [(1, 'a'), (2, 'b'), (3, 'c')]。


map()
可以用来多次调用一个函数,最常用的比如从一个dictionary中取多个值:
adict = {1:'a',2:'b',3:'c'}
values = map(adict.get, adict.keys())
values为['a', 'b', 'c']
如果map(adict.get, [1,2])则返回['a','b']
使用map时要注意一点,第二个参数始终被当成序列来解释,看下面几个例子:


import string

map(string.split, 'a b c')
#返回[['a'], [], ['b'], [], ['c']]
map(string.split, ('a b c'))
#返回[['a'], [], ['b'], [], ['c']]
map(string.split, ['a b c']]
#返回[['a', 'b', 'c']]
map(string.split, ('a b c', 'd e f'))
#返回[['a', 'b', 'c'], ['d', 'e', 'f']]


可以看出,当只有一个元素时,元组与列表的行为并不一样,通常将输入转换为列表能够避免这种特殊情况下产生与预期不一致的结果。


getopt使用方法

getopt模块保持了Unix中getopt的风格,下面是手册里给的一个最常见的使用方法:




import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError, err:
        # print help information and exit:
        print str(err) # will print something like "option -a not recognized"
        usage()
        sys.exit(2)
    output = None
    verbose = False
常用的比如从一个dictionary中取多个值:
    for o, a in opts:
        if o == "-v":
            verbose = True
        elif o in ("-h", "--help"):
            usage()
            sys.exit()
        elif o in ("-o", "--output"):
            output = a
        else:
            assert False, "unhandled option"
    # ...

if __name__ == "__main__":
    main()


说明:
1、getopt第一个参数为输入参数的列表,通常为sys.argv[1:]。
2、第二个参数为短选项,如果该选项需要传入参数的话,跟一个“:”。
3、第三个参数为长选项,如果该选项需要传入参数的话,跟一个“=”。
4、assert语句判断表达式的值,如果为False则抛出一个AssertionError。
5、usage()用于打印帮助,通常可以简单的print __doc__,打印出定义在最开始处的doc string。

被调用模块访问主函数模块
module = __import__('__main__')
则module就是主函数模块。


timeit模块
用于测试代码运行时间,有两种用法,分别是命令行用法和函数库用法。
命令行用法:进入timeit.py所在文件夹(通常为/usr/lib/pythonx.x),运行       
python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-h] [statement],statement为python语句。
函数库用法:


import timeit

t = Timer(...) # outside the try/except
    try:
        t.timeit(...) # or t.repeat(...)
    except:
        t.print_exc()


阅读(379) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~