Python教程

Python核心编程(第二版)

一、欢迎来到Python世界

'#!/usr/bin/env python指定解释器

二、快速入门

print调用str函数显示对象,而交互式解释器则调用repr()函数来显示对象。_在解释器中表示最后一个表达式的值。格式化输出:print("%s is number %d" % ("python", 1))。输入:input()。文档、模块、类、函数注释可直接用"This is a doc string.",可在运行时访问,除法:/是传统除,//是浮点除法,乘方,逻辑连接and,or,not,可以print(3<8>5)比较,结果为True。
python动态语言,不需要预先声明变量。没有自增、自减,--n即-(-n)相当于变负再变正,结果仍是n。Python类型有:整数、长整型、布尔、浮点、复数。字符串中+用于连接,
用于重复,如str='abc',print(str
3)。三单(双)引号可用于换行,列表用[],里面值可改,无组用(),值不可改。字典可输出aDict.keys(),for key in aDict: print (key, aDict[key)。if elif else,print不换行:print('a', end=' ')。range(3)。for输出字符串:a='abc' for i in a:输出,同时循环索引、元素:for i, ch in enumerate(a): print(i, ch)。列表解析:squared=[x ** 2 for x in range(8) if not x % 2]。fobj=open(filename, 'r') for eachLine in fobj: print eachLine fobj.close()。try except IOError: ...
函数参数可有默认值。类class ClassName(base_class[es]):static_member_declarations method_declarations,可提供父类,如果没有就用object作为基类。def init(self, nm):self.name=nm。输出类名:self.class.name。使用包含模块及变量:module.function(), module.variable,内置函数dir([obj])显示对象的属性。

三、Python基础

用“\”可将代码连成一行,但闭包如括号或三引号不用\。赋值是将对象引用(并不是值)赋值给变量。赋值语句不是合法的表达式,不会返回值,如y=(x=x+1)报错,链式赋值是可以的如y=x=x+1。多元赋值,(x,y,z)=(1,2,'a b')。多元赋值可直接交换两变量,如x=1,y=2可x,y=y,x进行交换。私有变量(只在模块或类内使用用_xxx)。可通过doc动态获得文档字串,在模块、类声明、函数,如obj.doc(module.doc,class.doc,function.doc)来访问。name系统变量:如果模块是被导入的,此值是模块名字,如果模块是直接被执行的,name值为'main'。引用计数:被创建时为1,赋值给其他变量或作参数传递时加1,如x=1,创建的对象是1而不是x,如果x=2,则1被引用的数量减少1个,del语句可直接删除对象。os.path.exists,os.linesep。

四、Python对象

type()。None对象。步进切片:sequence[::-1],对象引用计数,可用a is( not) b来测试是否为同一对象,也可id(a)==id(b)。cmp函数。获取字符串:str,repr,``(反引号)。if isinstance(num, (int,long,float,complex)): type(num).name。from types types.IntTyep。类型工厂函数,如int()。列表、字典为可变类型,数字、字符串、无组为不可变对象。

五、数字

删除,del。复数.conjugate(),,.real,.imag。coerce转换为相同类型返回为元组,divmod。进制转换:oct,hex。ord字符转为整型对应chr。

六、序列:字符串、列表和元组

对象 [not] in 序列。列表扩展用extend。内建函数list(),tuple(),unicode,basestring。zip。'bc' in 'abc'会返回True。for...else,只有在for循环完整结束,没有遇到break时才执行else。对+操作,Python为每个参加连接操作的字符串分配新的内存,包括新产生的字符串,性能不好,可用%拼接或把所有字符串放到序列中再用join,如''.join(('ab','cc','d')),结果为abcc*d。Unicode字符串前加'u'。格式化控制:#,0,(var)字典,m.n。‘%(num)d %(lang)s' % {'lang':'python','num':3}。字符串模板:from string import Template s=Template('{lang}') print(s.substitute(lang='Python', num=3)或safe_substitute。原始字符串(r/R)。string方法:string.endswith(obj,beg=0,end=len(string)),strip,partition(分成三个元组),replace,split。一般UTF-16编码都需要BOM(位顺序标记Byte Order Mark)或显示定制大小端。Unicode写文件时encode,读时decode。把string转成unicode,unicode()。格式化输出:u"%s %s" % (u"abc", "abc")结果为u"abc abc"。正规表达式:compile,match,search,sub。列表中类型值可是不同的,可用append,remove,index,insert(index,obj),pop(index),extend,sort,reverse。只有一个元素的元组(a,)。元组对象本身不可变,但其包含的可变对象是可变的。所有的多对象的、逗号分隔的、没有明确用符号定义的集合默认都是元组,如x,y=1,2,则x,y为(1,2)。深拷贝:import copy a=copy.deepcopy(b)。

七、映像和集合类型

字典中方法:Keys(),values(),items(),创建:dict,{}.fromkeys(seq,val=None)。删除并返回:dict_a.pop('b')。用sorted(dict_a)可返回键排序后的序列,dict1.update(dict2)会把dict2添加到dict中。dict1.get('xxx',定义返回值),dict1.setdefault('port','tcp),列表和是可变的,是不可哈希的。集合包括可变集合set与不可变集合frozenset。方法:add,update,remove,-=,==,!=,<,<=,|,&,-,^,issubset,isuperset,union等。

八、条件和循环

只能有一个else,但可有多个elif。三元操作X if C else Y。xrange生成生成器。for i in reversed(X)/sorted(X)。pass语句。while和for循环后都可用for,若未break则会执行。字典和文件是可迭代的数据类型,对文件myfile=open()之后,即可调用迭代对象for line in myfile,会自动调用readline()方法,而不用for line in myfile.readlines。g=lambda x:x+1,然后可g(1),g(2),或lambda x:x+1(1)。map,lambda,filter。如map(lambda x:x**2,range(6))。fileter(lambda x:x%2, seq)。矩阵:[(x,y] for x in range(3) for y in range(5)]。生成器表达式是一种延迟的计算,它在内存上比列表解析(计算出全部列表)在内存上更有效,格式(expr for inter_var in iterable if cond_expr)。

九、文件主输入输出

writelines没有writeline。os模块平台无关属性:linesep,sep,pathsep,curdir,pardir。文件内建属性:file.name,file.mode。参数:import sys sys.argv,os.listdir(cwd)查看当前目录下所有文件,os.chdir,getcwd,mkdir,rename,os.path.join,os.path.split,so.path.splitext,remove,rmdir.

十、错误和异常

try except IOError,e。try except (Exception1[, Exception2[, ... ExcN]])[,reason]:。with context_expr [as var]: with_suite。触发异常:raise [SomeException [,args]]。assert expression[, arguments]。

十一、函数和式编程

在函数内创建另外一个函数叫内部/内嵌函数。函数也可作为参数被传递。可变长参数:def fun([formal_args,] vargs_tuple),或采用字典方式:def fun([formal_agrs,][vargst,] **vargsd)。reduce()使用二元函数,运算两个值的结果后再迭代第三、四个。关键字参数,按参数名字,而不一定是顺序,对参数组,元组是非关键字参数,字典是。偏函数:如add1 = partial(add, 3)为add1(x)=add(3,x)。全局变量global。闭包。生成器:def simpleGen():yield 1 yield 'abc',然后for each in simpleGen()。

十二、模块

加载模块会导致模块直接被执行,如全局变量。globals(),locals()返回调用者全局和局部名称空间的字典,reload()重新导入。

十三、面向对象编程

子类最好定义自己的构造器,不然基类的构造器就会被调用,如果子类定义了构造器,基类的就不会执行,需要显示调用,同时显示传入子类的self参数。

十四、执行环境

十五、正则表达式

|.^$+?{}[],特殊字符\d\D\w\W\s\S\b\B\nn\c\A\Z。compile,match,search,findall,finditer,sub,group,groups。贪婪匹配(正则表达式默认是)会抓取尽可能大的匹配,可在+?前加?。

十六、网络编程

十七、网络客户端编程

from ftplib import FTP,f=FTP(),f.login。

十八、多线程编程

十九、图形界面编程

二十、Web编程

二十一、数据库编程

二十二、扩展Python

二十三、其他话题

你可能感兴趣的:(Python教程)