Just a little smile ^ ^

yoyo_zeng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.     数据类型

Python是动态语言,运行期确定类型,但是是强类型语言,类型确定后不可改变

不支持行内赋值

 

1.1 List

list = [“a”, “b”, “c”] #help(list)各元素的数据类型可以不同

list.append(1) #追加一个元素

list.remove(“a”) #移除元素值为”a”的元素

list[0     ]     #”a”

list[-1]   # “c”

lsit[0:-1]      #[“a”, “b”]

list[:1]   #[“a”]

list[1:]   #[ “b”, “c”]

del list[0] #删除元素

list.extend(list2)      #追加一个list

list2 = list    #列表赋值类似指针

del list[0]

list2      #[ “b”, “c”]

但是如果:

list2 = list[:] #复制

del list[0]

list2  #[ “b”, “c”]

list的解析

for elem in list:

       #代码

 

1.2 Dictionary

dictionary = {“key1”:”value1”, “key2”:”value2”}

key不可变,value可变,类型也可变

del dictionary[“key1”]    #删除元素

dictionary.items()     #[(“key1”,”value1”),( “key2”,”value2”)]

dictionary的解析

(k,v)for k, v in dictionary.items()

 

1.3 Truple

Truple = (1,2,3)

元素不能修改,但是读取速度快,可以作为dictionarykey(因为不可变,list不可),可以和list相互转换

 

# 注释

print #打印,逗号隔开 例如“%s = %s”%(k,v)  %c相同

data = input(“说明”) #输入

** #幂运算符

Sleep(seconds)

 

2语法

if表达式:

       #代码

elif 表达式:

       #代码

else:

       #代码

 

while 表达式:

       #代码

 

for in:

       #代码

for num in range(0,100): #range [)  

print num

for char in [“a”, “b”]:

       print char

 

过滤列表 for in if

 

and

or

and or: 有点类似c中的bool?a:b

 

3.函数

def function(paramter): #parameters以逗号隔开, 可以使用默认值,规则同C

“””doc string “”” #可以不用给出,用来说明函数可以做什么,键入函数名时的提示工具

       #代码 return 可返回一个值

def func(a, b=0, c=1):

       #代码

可以有如下调用调用

func(0)

func(0, 1)

func(0, c=2)

func(c=2, a = 1)

 

函数局部变量和全局变量

函数中的局部变量会屏蔽全局变量, 使用global

age = 0

def setAge():

       global a

       a = 2

locals 返回列表, 元素为dict, 值为: 局部变量明 =

 

type函数:返回变量类型 type1 #<type ‘int’>

 

dir函数: 返回对象的属性和方法列表

 

callable函数: callable(x) 如果x时可调用的(方法),则返回True

 

getattr函数: getattr(object, property)返回object的方法或属性的引用.

 

lambda函数: 内联单行函数

例如 lambda x: x*2 #参数为x, 返回x*2

 

str(obj) 返回obj对象的字符串,如果x为空,则返回None”

4.类

4.1 类定义

class classname(superclass): #继承

    classdata = {} #一个类属性, 它在创建任何类实例之前就有效了.相当于java/c++static data

    def _init__(self, parameters): #构造

        self.data = {} #数据属性,像局部变量一样,当你首次赋给它值时产生.

        superclass.__inti__(self)  #要调用父类的函数

    def __del__(self):

        superclass.__del__(self) #析构

 

obj = classname() #定义对象

如果一个 Python 函数,类方法,或属性的名字以两个下划线开始 (但不是结束),它是私有的;其它所有的都是公有的。

所有的专用方法 ( __setitem__) 和内置属性 ( __doc__) 遵守一个标准的命名习惯:开始和结束都有两个下划线. 它是公有的.

严格地说,私有方法在它们的类外是可以访问的,只是不容易处理。在 Python 中没有什么是真正私有的;在内部,私有方法和属性的名字被忽然改变和恢复,以致于使得它们看上去用它们给定的名字是无法使用的.你可以通过 _MP3FileInfo__parse 名字来使用 MP3FileInfo 类的 __parse 方法.

4.2 userdict封装类

是一个有着像字典一样的行为方式的类.

一些方法:

clear 方法删除它的所有关键字和关键字相应的值.

update 方法是一个字典复制器:它把一个字典中的键和值全部拷贝到另一个字典.

__setitem__ 设置关键字触发__setitem__ 方法

__getitem__ 获取关键字触发__ getitem __ 方法

__repr__ 是一个专用的方法,在当调用 repr(instance) 时被调用。repr 函数是一个内置函数,它返回一个对象的字符串表示。它可以用在任何对象上.

__cmp__ 在比较类实例时被调用。通常,你可以通过使用== 比较任意两个Python对象

__len__ 在调用 len(instance) 时被调用。

__delitem__ 在调用 del instance[key] 时调用

5.异常

KeyError  使用不存在的字典关键字

ValueError 搜索列表中不存在的值

AttributeError 调用不存在的方法

NameError 引用不存在的变量

TypeError 未强制转换就混用数据类型

IOError 文件打开异常

ImportError 模块导入异常

 

try

except:

#处理之后将正常继续,从 try...except 块的下一行代码/finally开始.

finally:

raise Exception(“description”) #抛出异常

6.文件读写

f = open(filename, mode, bufferparameter)  #可以接收三个参数:文件名, 模式(r w a b)和缓冲区参数(可选)

f.tell()  #打开文件中的当前位置

f.seek(-128, 2)  #0表示移动到一个绝对位置0 (从文件起始处算起)1 表示移到一个相对位置 (从当前位置算起),还有 2 表示相对于文件尾的位置。因为我们搜索的

tagData = f.read(128)     #readline读一行 readlines读全文到一个列表,每一行为列表元素

f.write('line 2')

f.close()

f.closed       #False or True

7.模块Module

.py结尾, 每一个模块都是对象, python的任何东西都是对象

__name__ == “__main__”模块被运行,否则模块被import

import othermodule       #模块导入,需要使用othermodule. 调用othermodule中的属性或方法

from …import    othermodule      #将其他模块中的属性导入到自己模块

7.1 OS模块

>>> os.path.join("c:\\music\\ap\\", "mahadeva.mp3") #把一个或多个部分路径名连接成一个路径名.

"c:\\music\\ap\\mahadeva.mp3"

>>> os.path.expanduser("~") #将对使用 ~ 来表示当前用户根目录的路径名进行扩展

'c:\\Documents and Settings\\mpilgrim\\My Documents

>>> (filepath, filename) = os.path.split("c:\\music\\ap\\mahadeva.mp3") #分割路径

'c:\\music\\ap''mahadeva.mp3'

>>> (shortname, extension) = os.path.splitext(filename) #分割文件名

'mahadeva''‘.mp3'

>>> os.listdir("d:\\") #返回目录的内容的 list

['$RECYCLE.BIN', 'CCShare', 'Info.csv', 'Info.xls', 'Program Files', 'share', 'sina.html', 'SoftWare', 'System Volume Information', 'Users', 'Work']

os.path.isdir(dirpath)

os.path.isfile(filepath)

os.path.normcase(f) #根据操作系统的缺省值对大小写进行标准化处理

os.system(command) #执行系统命令

os.sep #会根据你的操作系统给出目录分隔符

7.2 Time模块

time.strftime('%Y%m%d%H%M%S') #得到当前时间

8.正则表达式

所有和正则表达式相关的功能都包含在 re 模块中.

8.1 紧凑正则表达式

string$         string 结尾

^string        string开头

 

r\bstring\b              \b为边界,string为单独出现的字符串 r表示字符串中所有字符都不转义,否则必须为\\bstring\\b

 

string?string?string?      string是可选匹配,最多可以匹配三次

 

(A|B|C) 这个语法的含义是“精确匹配AB 或者 C 其中的一个

例如: '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$'

 

{n,m}

例如: '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'

 

\d{3}           \d:(09)任何一个数字,{3}精确匹配三个数字

 

r'^(\d{3})\D+(\d{3})\D+(\d{4})\D+(\d+)$'       \D 匹配任意字符,除了数字位,+ 表示1个或者多个,*表示0个或者多个

 

>>> phonePattern = re.compile(r'^(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') (1)

>>> phonePattern.search('80055512121234').groups() (2) ('800', '555', '1212', '1234')

8.2 松散正则表达式

pattern = """

^ # beginning of string

M{0,3} # thousands - 0 to 3 M's

(CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),

# or 500-800 (D, followed by 0 to 3 C's)

(XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),

# or 50-80 (L, followed by 0 to 3 X's)

(IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),

# or 5-8 (V, followed by 0 to 3 I's)

$ # end of string

"""

忽略注释,换行,空白,回车,制表符. 如果正则表达式中包含上述字符,需要在前面加上\进行转义.当使用松散正则表达式时,最重要的一件事情就是:必须传递一个额外的参数 re.VERBOSE,该参数是定义在 re 模块中的一个常量,标志着待匹配的正则表达式是一个松散正则表达式。正如你看到的,这个模式中,有很多

re.search(pattern, 'M', re.VERBOSE)

8.3 re模块方法

re.sub(regex, newstr, str) str中用newstring替代regex

re. search (regex, str)            str中寻找regex

 

9HTML处理

9.1 SGMLParser

 1 from sgmllib import SGMLParser
2
3 class BaseHTMLProcessor(SGMLParser):
4
5 def reset(self):
6
7 SGMLParser.reset(self)
8
9 def handle_data(self, text):
10
11 # called for every block of text in HTML source
12
13 def start_pre(self, attrs):
14
15 # called for every <pre> tag in HTML source
16
17 def end_pre(self):
18
19 # called for every </pre> tag in HTML source
20
21
22
23 from sgmllib import SGMLParser
24
25 class URLLister(SGMLParser):
26
27 def reset(self):
28
29 SGMLParser.reset(self)
30
31 self.urls = []
32
33 def start_a(self, attrs):
34
35 href = [v for k, v in attrs if k=='href']
36
37 if href:
38
39 self.urls.extend(href)



9.2 urllib

1 >>> import urllib
2
3 >>> sock = urllib.urlopen("http://diveintopython.org/")
4
5 >>> htmlSource = sock.read()
6
7 >>> sock.close()
8
9 >>> print htmlSource


posted on 2011-09-29 16:04  yoyo_zeng  阅读(255)  评论(0编辑  收藏  举报