初识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() #自动测试

posted on 2010-01-10 23:28  郑洋  阅读(400)  评论(1)    收藏  举报

导航