Python学习笔记
1.List
[起始:结束:步长] 步长可以为负数,要求结束>起始
倒序 a = b[::-1]
相乘 [42] * 3 = [42, 42, 42]
强制转成list list('abc') = ['a', 'b', 'c']
元组,不可变的list,(2,5,6)
可作为dict的key或者函数的多个返回值
可用函数 max(a)
min(a)
len(a)
del a[2]
method:
append
& pop
L.reverse()
L.count(item)
L.insert(5, item)
效果为item插入到L[5]
L.sort()
L2 = sorted(L1)
L.sort(cmp, key=len, reverse=True)
2.string
something about formatting…
method:
find
,join
,split
,strip
replace
str.replace(ori, new)
3.dict
del d[key]
method:
pop
& popitem
pop(key)
return value,del item popitem()
return (key, value), del item get
& setdefault
get(key, defaultValue)
找到key返回value,找不到返回defaultValue setdefault(key, defaultValue)
找到key返回value,找不到返回defaultValue,并且插入键值对(key,defaultValue) items()
keys()
values()
返回列表 iteritems()
iterkeys()
itervalues()
返回迭代器
for key, value in sorted(dict.items(), key=lambda x:x[1], reverse=False)
print key + '\t' + value
4.导入
import xxx
from xxx import yyy, zzz
import xxx as x
from xxx import yyy as y
5 赋值
#序列解包
x,y = y,x
key, value = d.popitem()
6.if and for
三元运算 a if b else c 如果b为true执行a否则c
while xxx:
pass
for item in xrange(100):
pass
# xrange(n) == [0,1,...,n-1]
一些迭代方式
#1.并行迭代
names = ["A", "B", "C"]
ages = [12, 55, 33]
for name, age in zip(names, ages):
pass
#zip 取最短的list
#2. 编号迭代:
names = ["A", "B", "C"]
for index, item in enumerate(names):
pass
#break-else
for item in dict:
if xxxx:
break #find something and break the loop
else:
pass # didn't find
7.函数&参数
def xxx(a):
'this is a introduction for xxx'
pass
#函数的注释 xxx.__doc__ == xxx.func_doc== 'this is a introduction for xxx'
#指定参数
def xxx(arg1="a", arg2="b"):
pass
#收集参数
def xxx(x, y, z=3, *t, **d):
pass
# *t 接收剩余的未指定的参数,组成元祖
# **d 接收剩余的指定的参数,组成dict
#函数内修改全局变量
x = 1 #global val
def change_global():
global x
x += 1
#函数内局部变量名字会覆盖全局变量,调用全局变量时应用global()['val_name']
map()
接受一个单参数函数,和序列作为参数 filter()
接受一个bool返回型的单参数函数 和序列,留下序列中true的值 reduce()
接受一个双参数函数 和序列,依次迭代下去 lambda x,y:x+y
8.面向对象
__metaclass__ = type #使用新式类
class Person:
def setName(self, name):
self.name = name
def getName(self):
return self.name
def __inaccessible(self):
#__开头方法表示私有
pass
member = 0
def init(self):
Person.member += 1 #所有实例共享变量,注意区别于self.member += 1
# something about superClass
class Filter:
def init(self):
self.blocked = []
def filter(self, sq):
return [x for x in sq if x not in self.blocked]
class SPAMFilter(Filter): #SPAMFilter is subClass of Filter
def init(self): # rewrite init()
slef.blocked = ['aa']
#查看一个类是否是另一个类的子类
issubclass(SPAMFilter, Filter)
#查看一个instance是否属于一个类
isinstance(f, Filter)
#查看一个类的基类们
SPAMFilter.__bases__
#查看一个对象属于哪个类
f.__class__
#多个superClass
class Test(Class1, Class2):
pass
# Test 继承了Class1和2,其中Class1的优先级高(覆盖Class2的方法)
9.模块
__name__
字段在主程序中为__main__
在导入的模块中显示为模块的名字
# hello.py
def hello():
print "hello world!"
def test():
hello()
if __name__ == "__main__":
#如果我是主函数,则从这里运行,否则作为被导入的模块,以hello.test()的形式被调用
test():
导入自己的模块
# python解释器一般寻找模块的路径
import sys
print sys.path
# 添加新路径
sys.path.append('xxx dir')
导入包
# 假设有如下结构的包drawing
# /drawing/
# /drawing/__init__.py
# /drawing/a.py
# /drawing/b.py
import drawing
#只能使用__init__.py
import drawing.a
#可使用drawing.a.xxx()
from drawing import a, b
#可直接使用a.xxx()
探索包与模块dir()
__all__
help()
__doc__
__file__