1.显示类型(2012-07-09)
1 test=(1,2,3,4) 2 print str(type(test))
2.Python的文件类型分为3种,即源代码、字节代码和优化代码。这些都可以直接运行,不需要进行编译或连接。
源代码以.py为扩展名,由python来负责解释;源文件经过编译后生成扩展名为.pyc的文件,即编译过的字节文件。这种文件不能使用文本编辑器修改。pyc文件是和平台无关的,可以在大部分操作系统上运行。经过优化的源文件会以.pyo为后缀,即优化代码。它也不能直接用文本编辑器修改.
3.python中的变量不需要声明,变量的赋值操作就是变量声明和定义的过程。
4.在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。全局变量建议在文件的开头定义,也可以把全局变量放到一个专门的文件中,然后通过import来引用.
5.python内部没有普通类型,任何类型都是对象。
6.python不支持自增运算符和自减运算符。例如i++/i–是错误的,但i+=1是可以的。
7.python程序由包(package)、模块(module)和函数组成。包是由一系列模块组成的集合。模块是处理某一类问题的函数和类的集合。包就是一个完成特定任务的工具箱。包必须含有一个__init__.py文件,它用于标识当前文件夹是一个包。模块把一组相关的函数或代码组织到一个文件中,一个文件即是一个模块。模块由代码、函数和类组成。导入模块使用import语句。
8.python用class保留字来定义一个类,类名的首字符要大写。当程序员需要创建的类型不能用简单类型来表示时,就需要定义类,然后利用定义的类创建对象。
9.类的方法也分为公有方法和私有方法。私有函数不能被该类之外的函数调用,私有的方法也不能被外部的类或函数调用。
10.python使用函数”staticmethod()“或”@ staticmethod“指令的方法把普通的函数转换为静态方法。静态方法相当于全局函数。
11.类和对象的关系
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
12.ascii
print ord('a')
13.显示目标的编码方式
import urllib
rawdata = urllib.urlopen('http://www.google.cn/').read()
import chardet
print chardet.detect(rawdata)
14.
在python中,方法定义在类中,但只能被实例所调用。调用一个方法的最终途径是:(1)定义类(2)创建一个类(3)用这个实例调用方法。
15.
在一个函数中对参数名赋值不影响调用者。 >>> a=1 >>> def test(a): ... a=a+1 ... print a ... >>> test(a) 2 >>> a 1 # a值不变 在一个函数中改变一个可变的对象参数会影响调用者。 >>> a=1 >>> b=[1,2] >>> def test(a,b): ... a=5 ... b[0]=4 ... print a,b ... >>> test(a,b) 5 [4, 2] >>> a 1 >>> b [4, 2] # b值已被更改
16.>>> int(12.0) 12
int()函数可以将一个数转化为整数
>>> int('12',16) 18
这里有两个地方要注意:1)12要以字符串的形式进行输入,如果是带参数base的话
这里并不是将12转换为16进制的数,而是说12就是一个16进制的数,int()函数将其用十进制数表示
17.在程序运行中设置延迟,是程序运行变慢
import time
time.sleep(2)
暂停2秒再运行。
18.首先判断是否已存在这样的记录:
1 select count * from Table where 条件 2 3 if(count >0) 4 { 5 数据相加; 6 //数据库语句来实现 7 } 8 else 9 { 10 修改; 11 }
19.
1 a = 'ab' 2 b = ('a', 'c') 3 print [x for x in a if x not in b]
20.正则匹配,忽略大小写,两种写法
1 a = 'aA' 2 p = re.compile('a', re.IGNORECASE) 3 print p.findall(a)
4 print re.findall(r'a', a, re.IGNORECASE)
21.编写的另一种格式。(捕捉异常)
1 test = 'a' 2 if not isinstance(test, int): raise TypeError, "Not type of int"
22.条件判断,选择赋值
a if b else c ; 如果b为真,则返回a,否则返回c
1 b = 'b' 2 a = 0 if b == 'a' else 1 3 print a
23.repr()函数
str()一般是将数值转成字符串。
repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。
24.字符串的title方法,将字符串转换为标题,也就是所有单词的首字母大写,而其他字母小写。string = "that's all folks.";string.title()=="That'S All Folks."
25.strip方法返回去除两侧(不包括内部)空格的字符串。
26.Python的字典的items(), keys(), values()都返回一个list
1 >>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'world' } 2 >>> dict.values() 3 ['b', 2, 'world'] 4 >>> dict.keys() 5 ['a', 1, 'hello'] 6 >>> dict.items() 7 [('a', 'b'), (1, 2), ('hello', 'world')] 8 >>>
27.使用dict的小Demo:
1 people = { 2 'Alice':{ 3 'phone':1234, 4 'address':'beijing' 5 }, 6 'Peter':{ 7 'phone':4567, 8 'address':'shanghai' 9 }, 10 'Micheal':{ 11 'phone':9012, 12 'address':'hangzhou' 13 } 14 } 15 name = raw_input("please input the name : \n") 16 if(people.has_key(name)==False): 17 print "Not exist" 18 else: 19 profile = people[name] 20 print profile 21 #use dict to format the string 22 print "Phone is : %(phone)s \nAddress is : %(address)s" % profile
结果:
please input the name :
Alice
{'phone': 1234, 'address': 'beijing'}
Phone is : 1234
Address is : beijing
28.模块的导入:
1 import somemodule 2 from somemodule import somefunction 3 from somemodule import somefunction, anthorfunction, yetanthorfunction 4 from somemodule import * 5 使用别名,避免冲突:import math as foobar
29.遍历字典
1 d = {'x':1,'y':2,'z':3} 2 #Method1 3 for key in d: 4 print key ,'----->',d[key] 5 #Method2 6 for key in d.keys(): 7 print key ,'----->',d[key] 8 #Method3 9 for (key , value) in d.items() : 10 print key , '----->' , value
>>>y -----> 2
x -----> 1
z -----> 3
30.zip(), dict()
zip函数可以用来进行并行迭代,可以将多个序列"压缩"在一起,然后返回一个元组的列表
1 names = ['Peter','Rich','Tom'] 2 ages = [20,23,22] 3 d = dict(zip(names,ages)) 4 print zip(names,ages) 5 print dict(zip(names,ages)) 6 for (name,age) in zip(names,ages): 7 print name ,'----', age 8 print d['Peter'] 9 10 >>>[('Peter', 20), ('Rich', 23), ('Tom', 22)] 11 >>>{'Peter': 20, 'Rich': 23, 'Tom': 22} 12 >>>Peter ---- 20 13 >>>Rich ---- 23 14 >>>Tom ---- 22 15 >>>20
31.del用于list列表操作,删除一个或者连续几个元素。示例程序如下:
1 >>> a = [-1, 3, 'aa', 85] # 定义一个list 2 >>> a 3 [-1, 3, 'aa', 85] 4 >>> del a[0] # 删除第0个元素 5 >>> a 6 [3, 'aa', 85] 7 >>> del a[2:4] # 删除从第2个元素开始,到第4个为止的元素。包括头不包括尾 8 >>> a 9 [3, 'aa'] 10 >>> del a # 删除整个list 11 >>> a 12 Traceback (most recent call last): 13 File "<stdin>", line 1, in <module> 14 NameError: name 'a' is not defined 15 >>>
32.使用del时候,删除的只是名称,而不是列表本身值,事实上,在python中是没有办法删除值的,系统会自动进行垃圾回收。
33.求斐波那契数列
1 def fibs(num): 2 'a function document' 3 result = [1,1] 4 for i in range(num-2): 5 result.append(result[-2]+result[-1]) 6 return result
34.抽象函数(参数可以缺省,可以通过*p传递任意数量的参数,传递的是元组;通过**p传递任意数量的参数,传递的是字典)
1 def a(*p): 2 print p 3 def b(**p): 4 print p 5 a(1,2,3) 6 b(a='1',b='2',c='3') 7 """ 8 result: 9 (1, 2, 3) 10 {'a': '1', 'c': '3', 'b': '2'} 11 """
35.string模块的join方法是split方法的逆方法。EG:seq = ['1','2','3','4','5'];sep = ',';s = sep.join(seq)
36.抛出异常
1 if not imethod in ("POST", "GET", "ALL"): 2 raise ValueError, "METHOD_NOT_SUPPORT [met='%s']" % method
37.捕捉异常,显示错误日志
1 except Exception, ex: 2 logger.error("GET_NEWS_HEALTH_FAIL [exp='%s']", str(ex)) 3 >>>ex : WriteException: Cannot write in JSON: datetime.datetime(2012, 1, 5, 15, 53)
38.共享引用和相等(python学习手册第四版P163)
1 >>>L = [1, 2, 3] 2 >>>M = L #M and L reference the same object 3 >>>L == M #Same value 4 True 5 >>>L is M #Same object 6 True 7 8 >>>M = [1, 2, 3] 9 >>>L == M #Same values 10 True 11 >>>L is M #Different objects 12 False
39.函数缩写全称
ord()--->order
chr()--->char
repr()--->representation
pprint()--->pretty printer
40.s.startswith()
做文本处理的时候经常要判断一个文本有没有以一个子串开始,或者结束。Python为此提供了两个函数:
S.startswith(prefix[, start[, end]]) -> bool
如果字符串S以prefix开始,返回True,否则返回False。start和end是两个可以缺省的参数。分别是开始比较的位置和结束比较的位置。这个函数也可以写成S[start:end].startswith(prefix)。
S.endswith(suffix[, start[, end]]) -> bool
如果字符串S以suffix结束,返回True,否者返回False。与startswith类似,这个函数也可以写成S[start:end].endswith(suffix)。start和end仍然是从左数起。
做个实例:
1 >>> “fish”.startswith(”fi”) 2 True 3 >>> “fish”.startswith(”fi”,1) 4 False 5 >>> “fish”.endswith(”sh”) 6 True 7 >>> “fish”.endswith(”sh”,3) 8 False
Python的这两个函数有个特别的地方——它的prefix和suffix参数不仅可以是字符串,还都可以是一个元组。只要其中一个成立,就返回True,也就是一种“或”的关系。比如:
1 if filename.endswith((’.gif’, ‘.jpg’, ‘.tiff’)): 2 print “%s是一个图片文件”%filename
上面两行代码根据文件扩展名是否是“gif”、“jpg”或“tiff”之一来决定文件是不是图片文件。
41.eval
eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果。
42.什么是原语,原语操作与原子操作
内核或微核提供核外调用的过程或函数称为原语(primitive)。
原语是一段用机器指令编写的完成特定功能的程序,在执行过程中不允许中断。
在多进程(线程)的操作系统中不能被其它进程(线程)打断的操作就叫原子操作,文件的原子操作是指操作文件时的不能被打断的操作。
原子还有一层意思,当该次操作不能完成的时候,必须回到操作之前的状态,原子操作不可拆分。
所有原子操作是同步的,而且不可被外部中断(内中断可以,不过一般是致命错误处理)。
也就是说,原子操作是中断安全的