初识Python(简要基础)
逻辑控制
if: elif: elif: [else:] 代替switch
for item in list: 迭代 exp: for(i in range(list)): print i,list[i]
for item in tuples
for key in dic
for char in string
for line in file
for k,v in dict.iteritems():
for k,v in dict.items();
for i, v in enumerate(list):
for i, j in zip(list/dict,list/dict):
exp:
>>> s = 'abc'
>>> it = iter(s) ##迭代 原理
>>> it
<iterator object at 0x00A1DB50>
>>> it.next()
'a'
>>> it.next()
迭代器与生成器
函数:
function(param1 = 1,param2 = list) list 默认是静态的, 可用 param2 = None ... if param2 is None: param2 = []
lambda pram1,pram2: expression 类似于嵌套函数定义,lambda 形式可以从包含范围内引用变量
数据结构:
list 应用: list=[item,item,...] 动态对象 list[:]
堆栈: list.append(item) list.pop()
队列: list.append(item) list.pop(0)
"filter(function, sequence)"返回一个序列(sequence),包括了给定序列中所有调用function(item)后返回值为true的元素.
"map(function, sequence1,[sq2])" 为每一个元素依次调用function(item)并将返回值组成一个链表返回。
"reduce(func, sequence, [index])" 返回一个单值,它是这样构造的:首先以序列的前两个元素(index开始)调用函数,再以返回值和第三
个参数调用,依次执行下去
链表推导式 [returnExpression for param in list [if expression]]
del list[index] del list[:] del list
tuples元组: tuples = item, item, ... 静态对象 总是有括号的
dictionary: dic.copy()
dict([(*,*),(*,*),...]) >>> {*:*, *:*, ...} 链表中存储关键字-值对元组>>>字典
for k,v in dict.iteritems():
for i ,v in enumerate(list):
逻辑关系:
"" or "1" >>> "1"
dic<list<string<tuple
部分高级技巧:
1.以 -O 参数调用Python解释器时,会生成优化代码并保存在 .pyo 文件中。现在的优化器没有太多帮助;它只是删除了断言(assert )语
句。使用 -O 参参数,所有的代码都会被优化;.pyc 文件被忽略, .py文件被编译为优化代码。
2.向Python解释器传递两个 -O 参数(-OO)会执行完全优化的二进制优化编译,这偶尔会生成错误的程序。现在的优化器,只是从二进制
代码中删除了 __doc__ 符串,生成更为紧凑的 .pyo 文件。因为某些程序依赖于这些变量的可用性,你应该只在确定无误的场合使用这一
选项。
3.来自 .pyc 文件或 .pyo 文件中的程序不会比来自 .py 文件的运行更快; .pyc 或 .pyo 文件只是在它们加载的时候更快一些。
4.通过脚本名在命令行运行脚本时,不会将为该脚本创建的二进制代码写入 .pyc 或.pyo 文件。当然,把脚本的主要代码移进一个模块里
,然后用一个小的解构脚本导入这个模块,就可以提高脚本的启动速度。也可以直接在命令行中指定一个 .pyc 或 .pyo 文件。
5.对于同一个模块(这里指例程 spam.py --译者),可以只有 spam.pyc 文件(或者 spam.pyc ,在使用 -O 参数时)而没有 spam.py
文件。这样可以打包发布比较难于逆向工程的Python代码库。
6.compileall 模块 可以为指定目录中的所有模块创建 .pyc 文件(或者使用 .pyo 参数创建.pyo文件)。
包:
from package import item [as otherName] (item级别无限制)
from package import * 引用的是__all__链表
import item.subitem.subsubitem (subsubitem最低是模块)
字符串操作:
repr()[解释器读取] str()[人阅读] 转化成字符串 int() 转化成数字
rjust(n)空格
zfill(n)相数值的字符串表达式左侧填充0
print '%nd %md' % (vn,vm) n,m是空格数 %s %n.mf 格式化
print 'form %(key)format' % dict >>> form value
文件操作:
f = open(file, mode) mode: r,w,a,r+ / rb,wb,r+b
f = file(file)
f.read() readline write seek tell close
pickle(持久化):
pickle.dump(object,file)
x = pickle.load(file)
异常:
try:
except [ErrorType/(RuntimeError,TypeError,NameError...)]:
[else:] 没有异常时候执行
[finally:]
raise [Exception(param)] == raise Error(异常名称),param(异常参数)
raise Class, instance
自定义异常:
class B:
pass
class C(B):
pass
class D(C):
pass
for c in [B, C, D]:
try:
raise c()
except D:
print "D"
except C:
print "C"
except B:
print "B"
类:
class Class:
List = [] ##静态变量
def __init__(self, param, param): ##类的实例化操作会自动为新创建的类实例调用 __init__() 方法
self.list = []... ##直接使用不需声明
def __del__(self): ##类内定义的函数第一个参数必须是self,但是调用时不用输入此参数
class Class2(Class1,Class2):
def __init__(self): ##不会自动调用父类的init函数
实例对象:数据属性 ins.Property 方法 ins.Func()
方法对象:T = ins.f; >> T()
标准库:
exec("code")
eval("expression")
os.system()
os.getcwd() #返回当前工作路径
dir(os)
help(os)
shutil.copyfile(src,dst) #文件操作
shutil.move(src,dst)
glob.glob() #从目录通配符搜索中生成文件列表
sys.exit()
re.findall(pattern, string, flags=0) # 正则表达式
re.sub(pattern, repl, string, count=0)
string.replace(str,str)
math.*
random.choice(seq) #从序列里随即选一个
random.sample( population, k) exp: sample(xrange(100),10) #返回不重复的10个数[1,100]
random.random() #float
random.randrange(int) #在range(6)中选一个
?a=sample(range(100),10).sort() #某些函数返回值在赋予前无法调用新函数?
urllib2.urlopen(url, data=None, timeout=<object object at 0x01EF0488>)
server = smtplib.SMTP('localhost')
server.sendmail('soothsayer@tmp.org', 'jceasar@tmp.org',""" """)
server.quit()
datatime.date.today().strftime()
zlib.compress(str) # gzip bz2 zipfile tarfile 压缩
zlib.decompress(t)
timeit.Timer('a,b = b,a', 'a=1; b=2').timeit() #用来测试性能 profile、pstats代码块
doctest.testmod() #自动测试
浙公网安备 33010602011771号