python 备忘

来源:互联网 发布:淘宝代码怎么用 编辑:程序博客网 时间:2024/05/16 00:48

关于编码:

 >>> ord('a')

97
>>> chr(97)
'a'
>>> chr(ord('a')+3)
'd'
>>>

There is also a unichr function, returning the Unicode character whose ordinal is theunichr argument:

>>> unichr(97)
u
'a'
>>> unichr(1234)

u'\u04d2'


调用基类,构造函数:

class A():

    pass

class B(A):

    pass

(1) A.__init__()

(2)super(B,self).__init__() 

使用super的好处在于,如果改变继承关系,如类名A改变了,则使用super无需改动,而(1)需要改动,当很多地方使用(1)时,显然没有(2)有优势


自定义迭代器

class Fib():
    def __init__(self):
        self.a = 0
        self.b = 1
    def next(self):
        self.a, self.b = self.b, self.a + self.b
        return self.a
    def __iter__(self):
        return self
    
fibs=Fib()
it = fibs.next()
for f in fibs:
    if f>100:
        break
    print f

从迭代器到列表

class TestIter():
    value = 0
    def next(self):
        self.value+=1
        if self.value>10:
            raise StopIteration
        return self.value
    def __iter__(self):
        return self
ti = TestIter()
l=list(ti)
print l

简单迭代生成器

def flatten(nested):
    try:
        for sublist in nested:
            for item in flatten(sublist):
                yield item
    except:
        yield nested
            
l1 = [[1,2,['a',[8,0],'b'],3],[4,5],[6]]
for item in flatten(l1):
    print item

关于切片

num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print num[3:6]

[4,5,6]

1. 下标从0开始,左闭右开,即3位置上的数取到,而6位置上的数不在范围内.

2. 当分片中左边的索引比右边的玩出现时,结果位空,如: num[-3 : 0], -3表示列表中的倒数第三个数值8,而0表示第一个数值1, 此时满足左边的8晚出现于右边的0,所以得到空列表

3. 当右边的数值大于最大列表个数时,默认等于最大列表个数 如: num[3:100] ,100 远大于num的个数,则默认取最大的10,结果为: [ 4, 5, 6, 7, 8, 9, 10]

4. 如果分片所得部分包括序列结尾的元素,那么只需置空最后一个索引即可,如: 取最后三个数值, num[-3:] 结果: [8,9,10], 同理,可以使用 num[:3]获取前面3个元素

5. 取所有的元素: num[:]

OS 模块

os.getcwd() #获取前文件所在的工作目录

os.path.join('path1','path2','path3') #将路径用“\”拼凑起来,path1\path2\path3

print os.path.join(os.getcwd(), 'templates','index.html').replace('\\','/')  和

print os.path.join(os.path.dirname(__file__),'templates','index.html').replace('\\','/') 可以实现相同的效果,django 的settints中 TEMPLATES_DIRS使用 dirname(__file__)才行

自定义import * 导入的模块

包中的 __init__.py 代码定义了一个名为 __all__ 的链表,就会按照链表中给出的模块名进行导入。新版本的包发布时作者可以任意更新这个链表。如果包作者不想 import * 的时候导入他们的包中所有模块,那么也可能会决定不支持它(import *)。例如,Sounds/Effects/__init__.py 这个文件可能包括如下代码:

__all__ = ["echo", "surround", "reverse"]

这意味着 from Sound.Effects import * 语句会从 Sound 包中导入以上三个已命名的子模块。

探究模块的工具函数

dir([obj]) : 显示obj对象的所有属性,无参数,显示【全局变量的名字】

help([obj]):规定格式显示obj文档字符串,无参数,【进入交互式帮助】

int(obj):将obj转化成int类型

len(obj):返回对象长度

open(filename,mode) 以mode模式打开filename文件

[x]range([start,]stop[,step]) 返回int类型列表,起始值为start,结束值为stop-1,间隔值为step;默认setp为1,start为0

raw_input([string]) 接收用户输入的一个字符串,string参数用作提示信息

str(obj) 将以对象转化成字符串

type(obj) 获取对象的类型(返回值本身属于type对象)

同一行书写多条语句

import sys; x = 'foo'; sys.stdout.write(x);

检查变量名是否是关键字

import keyword;pprint.pprint(keyword.kwlist);print keyword.iskeyword('not')

诗歌Pythonic

cmd -- > python --> import this

引用计数

引用计数决定着,变量的生命周期,一般情况下0时,被垃圾回收。

增加计数:

(1)对象被创建 x = 1

(2)另外别名被创建 y = x

(3)当作参数传递 foo(x)

(4)成为容器元素 [ x,2,3,4]

减少计数:

(1)离开作用范围。当对象的引用被销毁时,引用计数减少,如函数运行结束时,离开其作用域范围,所有的局部变量都被销毁,则引用计数随之减少

(2)引用改变。x = 1; y = x; 此时 1 对象的引用计数是2,x = 3,此时 x 的引用改为3对象,1减少为1个引用计数

(3)对象引用显示删除。del x

(4)从容器中移除,list1.remove(x)

(5)容器本身销毁,del list1


关于排序:

temp_list.sort(key=lambda x:x.report_date)
根据,元素的report_date属性排序temp_list
原:
2012-01-05
2012-01-04
2012-01-03
新:
2012-01-03
2012-01-04
2012-01-05

日期设置:

datetime.datetime.strptime(str(now)+" 00:00:00", "%Y-%m-%d %H:%M:%S")
2012-05-07 00:00:00

datetime.datetime.strptime(str(now)+" 23:59:59", "%Y-%m-%d %H:%M:%S")
2012-05-07 23:59:59


>> 'my_name'.title()
>>My_Name