python 精灵
大家好,本人愿意把python精灵独家秘籍真诚地奉献给大家,希望对大家有所帮助,如果有错误之处欢迎大家指正,在此表示感激。
同时也希望大家加入到我的python高级应用,积极提问,一起探索python的奥妙之处,真的很pythonic。
**************************************************************************************************
*                  号:169388140(python高级应用)                                            *
*                  本人是专门做开发工具的。                                                      *
**************************************************************************************************
1, 下划线_在解释器中有特别的含义:表示最后一个表达式的值。注意:仅仅是表达式的值,对语句都不成立。
如 print "hello,world" 是语句,不是表达式。而表达式分为函数表达式和算术表达式。
2,  print语句也支持格式字符串化,  %s  %d  %f
print语句有个默认特性:在输出时自动会加一个换行符。但是,只要你在输出添加一个逗号,就可以
改变它这种自动换行的特性。而是自动添加一个空格。
3,  print语句也支持输出重定向:符号>>用来重定向输出到屏幕,也支持输出重定向到文件。
import sys
print >> sys.stderr,"Fatal error:invalid input"
*****************************************************
logfile=open("");
print >> logfile,"Fatal error:invalid input";
logfile.close()
4,  有个模块叫__builtin__,只要一打开解释器,就自动导入了,里面的内建函数,如len,int()等
int()可以用来强制类型转换,只支持数字字符的抓换,否则报错,可见python也支持强制类型转换。
5,  普通注释 #  ; 文档字符串注释,在函数,类,模块的起始行加入,可以在运行时访问。
6,  一个模块有dynamic objects , static objects , functions 只有访问函数需要带括号,对象还可以继续
访问她的属性和方法。
7,  运算符:算术运算符,比较运算符,逻辑运算符
在逻辑运算符与别的表达式一起使用,先执行表达式,在进行逻辑判断。
not 2<3  <<==>> not (2<3)
8,  python支持增量赋值  a+=1    a*=10 等    但不像c那样支持自增和自减。
9,  支持5种数据类型 int long bool  float  complex
decimal用于十进制浮点数。不过它不是内建,需先导入decimal模块。
10, 字符串特有的索引规则:首字符的索引从0开始,最后一个字符索引是-1
字符串 “+” 表示连接,*表示重复。
空格是一个单独字符。 换行\n也是一个字符
对于print语句,碰见\n就是
换行,原样显示,但是原生态的时候就是显示\n。
只能存放一个一个字符组成的串。
11, 数据结构:
列表和元祖可以当成普通的数组,但是他们可以存放任意数量,任意类型(不同类型)的对象。、
如;tuple  t=("hello",[1,2,3],1,"world")
list  l=[(1,"abcd"),2,"hello"]
元祖与列表主要区别:元祖的常量列表,不可以更改。
元祖和列表一样,都可以进行切片,切片之后还是原来的类型。
12, 字典(哈希表):映射数据类型,键值对,它的值可以是任意的python对象。
如: d={"a":1,"b":"hello"}
d.keys()  这个函数的作用是返回所有的键。
13, range函数输出的就是一个列表。常与len()函数一起使用,用于循环
enumerate()函数既可以循环索引,又可以循环元素。
14, 列表解析,也就是生成的还是一个列表,但是对值进行了挑选。
如 l=[ x**2 for x in range[8] if not x%2 ]
元祖保存 t=( x**2 for x in range[8] if not x%2 )
15,  句点属性标识符访问。
什么是属性:属性是与数据有关的项目, 属性可以是简单的数据值, 也可以是可执行对象, 比如函数
和方法。
16,  异常和错误  try  except
17,  函数:函数没有return语句,自动返回None对象。
18,  类,有个魔法方法。__init__()会自动被执行,相当于构造方法,但不会创建实例,仅仅是你的对象
创建后第一个执行的方法。主要是做一些初始化工作,可以自己写一个__init__()覆盖默认的。
什么是 self ? 它是类实例自身的引用。其他语言通常使用一个名为 this 的标识符。
创建一个类实例就像调用一个函数
self.__class__引用实际的类
19,  模块:包含函数和变量,主要是为了让代码复用。
20,  如何在python中调用shell脚本?
import os
os.system("shell脚本文件全称")
21,  内建函数
函数 描述
dir([obj]) 显示对象的属性
str(obj) 将一个对象转换为字符串
type(obj) 返回对象的类型(返回值本身是一个type 对象!)
习题总结:对于除法,为了得到更加精确的结果,我们可以借助内建函数float进行强制转换。
22,  文件操作
1,打开文件f=open("url","mode")
2, 读取或写入文件,记住只能操作一次,下次操作会返回空。
3,关闭文件f.close()
相关函数:f.tell()返回一个整数
,返回当前文件的位置
f,seek(偏移量,起始位置)用来移动文件指针:
0起始  1当前  2末尾
23,  在写表达式的时候,加括号也许更能体现出良好的阅读性
技巧:\用于换行书写,但是,我们可以通过括号等封闭操作符实现不需要反斜杠。
24,  python语言中赋值理解:并不是像其它语言,将一个值赋给变量。在python语言中,对象都是通过引用
传递的。也就是传递的是一个地址。所以,深刻理解:传递对象的引用(而不是值)。
在python中,将多个对象,赋给多个变量是可以的, a,b,c=1,2,3    必须一一对应。
25,  关键字列表和iskeyword()函数都已经加入到keyword模块中。
有效标识符的判断在 idcheck.py脚本中
26,  专用下划线标识符。Python 用下划线作为变量前缀和后缀指定特殊变量
_xxx 不用'from module import *'导入    私有,不可以被模块使用
__xxx__系统定义名字                    系统变量
__xxx 类中的私有变量名                  私有,不可以被类外使用
神奇的__name__
如果模块是被导入, __name__ 的值为模块名字
如果模块是被直接执行, __name__ 的值为 '__main__'
27,  模块被执行有哪些方式,直接执行,命令执行,批处理执行,定时执行或web服务器调用。
又知道一个模块 unittest单元测试模块。它是python测试框架,大项目时可以做回归测试。
28,  内存管理 
python是一门动态语言,变量无须声明,随时都可以。
变量无须指定类型
程序员不用关心内存管理
变量名会被“回收”
del 语句能够直接释放资源
29,  学会写文档字符串,就看 cgi 模块的例子。
成为优秀python程序员:必看的模块:
Debugger:    module-----pdb
Logger:      module-----logging
Profiles:    hotshot,cProfile
30,  学会高效处理代码,比如  os.linesep  解释器需要做两次查询:(1)查os 以确认它是一个模块,
(2)在这个模块中查 linesep 变量。因为模块也是全局变量, 我们多消耗了系统资源。
如何高效:为它区别别名,变成本地变量  ls = os.linesep
31,  while循环,结束的两种方法:一是给初始变量,通过比较判断借宿,而是在循环体通过if判断,break结束。
for循环也可以与break搭配。
32,  ists(filename) 是 os 模块中一个有用的函数, 帮助我们确认这一点。 当有输
入一个不存在的文件名时, ists() 才会返回 False.
判断的是当前目录下的文件是否存在,存在返回True。
33,  文件打开失败原因归纳:权限问题
,网络驱动器突然连接失败,产生异常IOError
34,  使用字符串对象的 strip()方法:可以删除每行的首尾空白。
35,  所有的python对象都拥有三个特性:身份,类型和值
身份:唯一标识,可以用id(obj)得到,被认为是该对象的内存地址。
类型:决定了保存什么类型的值,遵循什么样的规则,用type(obj)看以查看。由于类型也是对象,
所以返回的是对象而不是字符串。如<type 'int'>说明是一个int型对象
type类型是所有类型对象的根。
值:  对象的内容,可改变。前面两个是只读。
36, 类型:分为标准类型和其他内建类型
其他内建类型:类型,文件,集合,函数/方法 模块 类 None对象
37, 明白:对象比较 分为 对象值比较和对象身份比较(is / is not)
38,  内建函数 cmp(obj1,obj2)  返回值  <0  obj1<obj2  依次类推    cmp比较的是ASCII值。
内建函数eval()获得对象
39, 再接触个模块 types 模块,主要是处理类型
>>> import types
>>> if type(num) ==
40, insinstance(num,type)
41,  所谓工厂函数看似函数,实质上他们是类,当你调用他们时,其实生成了他们的实例。就像工厂生产货物一样。
int()  float()  long()  complex()  type()  list()  tuple()
*********************************************************************************************************
第五章省略
42,相关模块:decimal  十进制浮点运算类
array    高效数值数组(字符,整数,浮点数等)
math    数学相关 复数运算在cmath
operator 数字运算符函数相关实现
random  多种伪随机数生成器
*********************************************************************************************************
43, 序列长度计算公式  len(序列),求的是实际长度。
序列类型是其元素被顺序放置的一种数据结构类型,它允许你通过小标的方式获得某一数据元素。
44, 连接操作:都可以使用 + 直接连接
但是更好地通过对象来操作,速度更快,占用空间更小。字符串用join  列表用extend方法。
45, 序列切片操作,[::-1]可以视作翻转操作。
[::2]隔一个去一个操作
归纳:[::k]k为正,隔k个数开始取值;k为负,反向隔k个数取值。
46, 序列类型转换工厂函数
list(iter)把可迭代对象转换为列表
str(obj)把obj对象转换为字符串
unicode(obj)把obj对象转换为unicode字符串
basestring()抽象工厂函数,其作用仅仅是为str 和unicode 函数提供父类
tuple(iter)把可迭代对象转换为元组
45, 所谓浅拷贝就是只拷贝了对对象的索
引,而不是重新建立了一个对象!
而深复制,也是一种拷贝,会创建新的对象,有返回值。
删除对象的方法:del 对象
46, 字符串的相关操作,可以借助模块string来实现。
连接符+操作,是在运行时刻连接
切片就是从字符串里切出来。
序列连接操作,都是创建了新的对象
47, 字符串的连接:还有一种编译时连接  如 foo= "hello" "world"
48,  格式化字符串除了用元组作为参数,还可以用字典。
>>> 'There are %(howmany)d %(lang)s Quotation Symbols' % \
... {'lang': 'Python', 'howmany': 3}
'There are 3 Python Quotation Symbols'
49, 原始字符串操作符( r/R )
内建函数  cmp  max  min 都比较的是字符串
50,  创建列表,可以通过工厂函数list创建,参数必须是可迭代的。
如果列表中包含列表可以通过多维类表访问,如aList = [123, 'abc', 4.56, ['inner', 'list'], 7-9j]
aList[3][0]这样访问。
有些函数没有返回值,只是改变了源对象的索引,不会创建新的对象,这就是所谓的浅复制。如 extend 和 append
它俩的区别:append函数是什么参数都可以加,extend只能添加可迭代的参数。
列表的比较,实质上是比较内建的cmp()函数。
51, 元组和列表都是容器类型。
列表:方括号 , 可变类型
元组:圆括号 , 不可变类型(不能更新或改变元组中的元素)  像 排序,替换,添加等等,因为元组是不可变的,所以这些操作对元组来说就是多余的,这些方法没有被实现。
不可变怎么用?
数字,字符串,元组都是不可变类型。但元组影响力最大
记住一点:元组也有变得时候,比如元组里的元素有列表,那么它就可以变了。
例如:>>> t=([1,"abc"],500,"hello")
>>> t
([1, 'abc'], 500, 'hello')
>>> t[0][1]="xu"
>>> t
([1, 'xu'], 500, 'hello')
>>>
默认情况下,所有多对象的,用逗号分隔的,都可以看成一个元组。
奇怪:>>> 4,2<3,5
(4, True, 5)    所以为了避免出现这种情况,元组总用圆括号括起来更好。
浅拷贝:完全切片,工厂函数,py()
深拷贝:copy.deepcopy()            id(obj)相同
注意:非容器类型(数字,字符串和其它原子类型对象)没有拷贝的说法,但是对于元组变量只包含原子类型对象,也没有深拷贝说法。
核心模块: copy
我们刚才描述的浅拷贝和深拷贝操作都可以在copy 模块中到.其实copy 模块中只有两
个函数可用:copy()进行浅拷贝操作,而deepcopy()进行深拷贝操作。
52, 字典是无序容器。
工厂函数创建字典:    dict()  d1=dict(([
1,2],[3,4]))
可以用一个很方便的内建方法fromkeys() 来创建一个"默认"字典, 字        d={}.fromkeys(("x","y"),-1)
典中元素具有相同的值 (如果没有给出, 默认为None):
53, d.keys()  返回字典的所有keys。
现在更高级的方法,到处key  可以这样做: for key in d
判断某一个键是否在字典中,可以用in /not in  或has_key()方法
字典中的键可以是任意类型或对象。
删除字典:del d[name]
d.clear()
del d
d.pop(name)
54,  字典的比较大小:首先是字典的大小(也就是字典的元素个数比较),然后是键,最后是值。
内建函数hash()本身并不是为字典设计的方法,但它可以判断某个对象是否可以做一个字典的键。将一个对象作为参数传递给 hash(),
会返回这个对象的哈希值。
55, 集合set :本身无序,所以不能创建索引和切片操作。  s=set("hello")
1,无序性
2,唯一性
56,  三元运算符写法
x,y=4,3
smaller = x if x<y else y
small    >>>3
57, 循环方式:计数循环  主要针对while循环
而for循环,需要有个可迭代对象(字符串,列表,元祖,字典)
循环原理:迭代器对象有一个 next() 方法, 调用后返回下一个条目. 所有条目迭代完后, 迭代器引发一
个 StopIteration 异常告诉程序循环结束. for 语句在内部调用 next() 并捕获异常.python怎么读取py文件
58, 序列相关的4个重要内建函数:sorted(), reversed(), enumerate(), zip()
sorted(),zip()返回列表,其中zip里面的参数是多个元组。在一一对应组成列表,先解压再压缩。
reversed(), enumerate()返回迭代器
59, break,终止整个循环,break语句后面的一切都不执行
continue,终止当前循环,continue语句后面的一切都不执行,然后开始下一次循环。
if 与 else 搭配时,不是else离最近的那个了,而是看代码缩进,else与哪个if对齐就与哪个if是一对。
pass 空语句,主要是起到扩展的作用。
69, 哈哈,在c中你会发现,else只会在条件语句中使用,但是在python中,你会发现它在while和for也是可以
搭配的。
在循环中使用时, else子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.
70, 迭代器:类序列对象提供了一个类序列的接口。
从根本上说, 迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数.迭代完成引发一个StopIteration.
reversed() 内建函数将返回一个反序访问的迭代器.
迭代器工厂函数:  iter()    方法:  next()
字典:字典的迭代器会遍历它的键(keys).  for eachkey in d.keys()    ===== for eachkey in d
文件:文件对象生成

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。