关于编码:
>>> 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
关于排序:
日期设置:
datetime.datetime.strptime(str(now)+" 00:00:00", "%Y-%m-%d %H:%M:%S")2012-05-07 23:59:59