2. 元组
tuple和list十分相似,但是tuple是不可变的,即不能修改tuple,元组通过圆括号中用逗号分割的项定义;支持索引和切片操作;可以使用 in
查看一个元素是否在tuple中。空元组();只含有一个元素的元组("a",)
优点:tuple比list速度快;对不需要修改的数据进行‘写保护’,可以是代码更安全
tuple与list可以相互转换,使用内置的函数list()和tuple()。
元组最通常的用法是用在打印语句,如下例:
name = "Peter Zhang"
age = 25
print "Name: %s; Age: %d" % (name, age)
# Name: Peter Zhang; Age: 25
函数如下:
count(value) ---返回元组中值为value的元素的个数
t = (1, 2, 3, 1, 2, 3)
print t.count(2) # 2
index(value, [start, [stop]]) ---返回列表中第一个出现的值为value的索引,如果没有,则异常 ValueError
t = (1, 2, 3, 1, 2, 3)
print t.index(3) # 2
try:
print t.index(4)
except ValueError, ve:
print "there is no 4 in tuple" # there is no 4 in tuple
字典由键值对组成,键必须是唯一的;eg:
一个特定的顺序,那么使用前需要对它们排序;d[key] = value,如果字典中已有key,则为其赋值为value,否则添加新的键值对key/value;使
用del d[key] 可以删除键值对;判断字典中是否有某键,可以使用in 或 not in;
d = {}
d["1"] = "one"
d["2"] = "two"
d["3"] = "three"
del d["3"]
for key, value in d.items():
print "%s --> %s" % (key, value)
#1 --> one
#2 --> two
dict函数如下:
clear() ---删除字典中所有元素
d1 = {"1":"one", "2":"two"}
d1.clear()
print d1 # {}
copy() ---返回字典的一个副本(浅复制)
d1 = {"1":"one", "2":"two"}
d2 = d1.copy()
print d2 #{'1': 'one', '2': 'two'}
dict.fromkeys(seq,val=None)
l = [1, 2, 3]
t = (1, 2, 3)
d3 = {}.fromkeys(l)
print d3 #{1: None, 2: None, 3: None}
d4 = {}.fromkeys(t, "default")
print d4 #{1: 'default', 2: 'default', 3: 'default'}
get(key,[default]) ---返回字典dict中键key对应值,如果字典中不存在此键,则返回default 的值(default默认值为None)
d5 = {1:"one", 2:"two", 3:"three"}
print d5.get(1) #one
print d5.get(5) #None
print d5.get(5, "test") #test
has_key(key) ---判断字典中是否有键key
d6 = {1:"one", 2:"two", 3:"three"}
print d6.has_key(1) #True
print d6.has_key(5) #False
items() ---返回一个包含字典中(键, 值)对元组的列表
d7 = {1:"one", 2:"two", 3:"three"}
for item in d7.items():
print item
#(1, 'one')
#(2, 'two')
#(3, 'three')
for key, value in d7.items():
print "%s -- %s" % (key, value)
#1 -- one
#2 -- two
#3 -- three
keys() ---返回一个包含字典中所有键的列表
values() ---返回一个包含字典中所有值的列表
pop(key, [default]) ---若字典中key键存在,删除并返回dict[key],若不存在,且未给出default值,引发KeyError异常
d9 = {1:"one", 2:"two", 3:"three"}
print d9.pop(1) #one
print d9 #{2: 'two', 3: 'three'}
print d9.pop(5, None) #None
try:
d9.pop(5) # raise KeyError
except KeyError, ke:
print "KeyError:", ke #KeyError:5
popitem() ---删除任意键值对,并返回该键值对,如果字典为空,则产生异常KeyError
d10 = {1:"one", 2:"two", 3:"three"}
print d10.popitem() #(1, 'one')
print d10 #{2: 'two', 3: 'three'}
setdefault(key,[default]) ---若字典中有key,则返回vlaue值,若没有key,则加上该key,值为default,默认None
d = {1:"one", 2:"two", 3:"three"}
print d.setdefault(1) #one
print d.setdefault(5) #None
print d #{1: 'one', 2: 'two', 3: 'three', 5: None}
print d.setdefault(6, "six") #six
print d #{1: 'one', 2: 'two', 3: 'three', 5: None, 6: 'six'}
update(dict2) ---把dict2的元素加入到dict中去,键字重复时会覆盖dict中的键值
d = {1:"one", 2:"two", 3:"three"}
d2 = {1:"first", 4:"forth"}
d.update(d2)
print d #{1: 'first', 2: 'two', 3: 'three', 4: 'forth'}
viewitems() ---返回一个view对象,(key, value)pair的列表,类似于视图。优点是,如果字典发生变化,view会同步发生变化。在
迭代过程中,字典不允许改变,否则会报异常
d = {1:"one", 2:"two", 3:"three"}
for key, value in d.viewitems():
print "%s - %s" % (key, value)
#1 - one
#2 - two
#3 - three
viewkeys() ---返回一个view对象,key的列表
d = {1:"one", 2:"two", 3:"three"}
for key in d.viewkeys():
print key
#1
#2
#3
viewvalues() ---返回一个view对象,value的列表
d = {1:"one", 2:"two", 3:"three"}
for value in d.viewvalues():
print value
#one
#two
#three
4. 序列
序列类型是指容器内的元素从0开始的索引顺序访问,一次可以访问一个或者多个元素;列表、元组和字符串都是序列;序列的两个主要特点是
索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列;
1 numbers = ["zero", "one", "two", "three", "four"]
2
3 print numbers[1] # one
4 print numbers[-1] # four
5 #print numbers[5] # raise IndexError
6
7 print numbers[:] # ['zero', 'one', 'two', 'three', 'four']
8 print numbers[3:] # ['three', 'four']
9 print numbers[:2] # ['zero', 'one']
10 print numbers[2:4] # ['two', 'three']
11 print numbers[1:-1] # ['one', 'two', 'three']
切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。 如果不指定第一个数,Python就从
序列首开始。如果没有指定第二个数,则Python会停止在序列尾。 注意,返回的序列从开始位置 开始 ,刚好在结束位置之前 结束。即开始位置是
包含在序列切片中的,而结束位置被排斥在切片外。 可以用负数做切片。负数用在从序列尾开始计算的位置。
5. 绑定
当创建一个对象并给它赋一个变量的时候,这个变量仅仅“指向”那个对象,而不是表示这个对象本身! 也就是说,变量名指向计算机中存储那个
对象的内存,这被称作名称到对象的绑定。
如果要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单对象),那么必须使用切片操作符来取得拷贝。
- 1.python是一个解释性语言:
- 一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。
- 而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码
运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。 -
- 2.查询机器是否安装python成功:python
-V -
- 3.得到类的帮助文档:
- help('str')#得到str类的文档
- help(list)#得到list类的文档字符串
-
- 4.python中有4中类型的数:整数、长整数、浮点数和复数。
#(-5+4j)和(2.3-4.6j)是复数的例子。 -
- 5.自然字符串通过在字符串全面添加前缀r或者R来指定。一定要用自然字符串处理正则表达式
- 例如:r"Newlines
are indicated by \n"。 -
- 6.字符串自动级连,例如,'What\'s'
'your name?'会被自动转为"What's your name?"。 -
- 7.在多个物理行写一个逻辑行的例子:
- s
= 'This is a string. \ - This
continues the string.' - print
s - 它的输出:This
is a string. This continues the string. -
- 8.有一个特殊的运算符号://
表示取整除。例如:4 // 3.0得到1.0 - lambda运算符!!
-
- 9.python自动为字符串中间添加一个空格:
- print
'Area is', area -
- 10.得到用户在屏幕的输入:raw_input('Enter
an integer : ') - 例如:guess
= int(raw_input('Enter an integer : ')) 将输入的数据转换为int -
- 11.在python中没有switch语句!使用
-
if True: -
elif 条件二: -
else: - 注意最后没有end
if!! -
- 12.while
条件: -
语句 -
else: -
语句 -
在while可以使用else从句,有点多余。 -
-
13.for语句: -
for i in range(1, 5): -
print i -
else: #也有else语句,有点多余。 -
print 'The for loop is over' -
-
14.得到字符串的长度:len(str) -
-
15.在循环中可以使用continue语句。。 -
-
16.在函数中定义全局变量:使用global关键字。 -
def func(): -
global x #全局的x变量。同一个global语句指定多个全局变量。例如global x, y, z -
参数中可以有默认的值,但是在形参末尾的那些参数才可以有默认参数:def func(a, b=5)是有效的,但是def func(a=5, b)是 无效 的。 -
函数的参数调用可以使用关键参数,使用名字来给函数指定实参。 -
-
17.文档字符串的管理:它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述 -
例如: -
'''''Prints the maximum of two numbers. -
-
The two values must be integers.''' -
查看文档字符串的方法:print printMax.__doc__ #调用文档字符串的属性!!注意双下划线!或者help(printMax) -
-
18.使用python的标准库:import sys -
可以通过help(sys)查看模块的内容! -
常用:sys.argv包含了 命令行参数 -
-
19..pyc文件:字节编译的文件 与平台无关,与python变换程序的中间态有关。 -
-
20.from .. import语句:可以from sys import argv #这样就只引入一个sys.argv这个变量。 -
-
21.小技巧:使用模块的__name__: -
if __name__ == '__main__': 做一些事情。。。。 -
-
22.dir():可以列出模块里面的定义的标识符。包括函数,类,变量等。 -
提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。 -
-
23.del 变量 #删除变量 -
-
24.python中有三种内建的数据结构:列表(list),元组,字典 -
-
25.元组:元组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。 -
元组也是一个“序列”!(列表,字符串,元组都是序列!!字典不是。。) -
一个空的元组由一对空的圆括号组成,如myempty = () -
只有一个成员的元组,必须在一个元素后面再加一个逗号,这样就“Python才能区分元组和表达式中一个带圆括号的对象” -
元组使用的示例: -
age = 22 -
name = 'Swaroop' -
print '%s is %d years old' % (name, age) -
print ‘name is %s’%name #注意这里只有一个变量的时候,可以这样使用,不用括号。 -
-
26.在python中使用汉字:在最上面写,#coding=gbk -
-
27.序列:主要两个特点是索引,切片。序列的索引是负数的话,表示取倒数第几个元素。 -
shoplist[1:3]:从位置1开始,包括位置2,但是停止在位置3的一个序列切片。只有两个元素。 -
-
28.关于对象的引用的老问题,创建一个对象并给它赋一个变量的时候,这个变量仅仅“参考”那个对象,而不是对象本身!如果要拷贝序列的话,就应该使用切片操作来进行序列的拷贝。 -
-
29.输出python中的全部汉字: - for
ch in xrange(0x4e00, 0x9fa6): -
print unichr(ch) -
-
30.str类是字符串的类。help(str) -
常用方法:len(str),str.endswith('q'),S.find(sub [,start [,end]]),S.index(sub [,start [,end]]),S.isdigit()#是否数字 -
-
31.对于时间的格式化函数:import time 然后就:time.strftime('%Y%m%d%H%M%S') 可以从python参考手册得到。 -
-
32.执行一个命令,import os 然后: os.system(“命令字符串”) 如果命令执行成功返回0,否则返回错误号!注意执行成功的时候返回0!! -
判断目录是不是存在,os.path.exists(目录名) 创建目录:os.mkdir(新目录名) 得到文件分割符:os.sep -
-
33.面向对象基本概念: -
类创建一个新类型,对象是这个类的实例; -
属于一个对象或者类的变量被称为域; -
属于类的函数称为类的方法; -
域有两种类型,属于每个实例/类的对象或者属于类本身,分别被称为实例变量和类变量; -
类使用关键字class创建。 -
-
34.self:在类的方法中,必须有一个额外的第一个参数,在调用这个方法的时候不为这个参数赋值,有Python自动进行赋值,类似于java的this。这个变量一般建议命名使用self。 -
注意:这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。 -
-
35.空白语句:pass -
-
36.类的定义: -
class Person: -
def sayHi(self): -
print 'Hello, how are you?' -
p = Person() -
p.sayHi() -
-
37.类里面的初始化函数:__init__(self,参数。。。) -
对应的还有一个__del__方法! -
-
38.类的变量(由一个类的所有对象(实例)共享使用),对象的变量(由类的每个对象/实例拥有)。 -
-
39.类的继承:class Student(SchoolMember):#括号里面是基类。python支持多重继承! -
-
40.类的存储:使用cPickle模块进行类对象到文件的存储和从文件的加载一个对象。 -
简单示例:import cPickle -
存储:f= file(文件名,'w'); o=对象; cPickle.dump(对象,f) -
取存储:f=file(文件名); o=cPickle.load(f) ; 使用对象。。。。 -
-
41.关于异常: - try:
-
s=raw_input('请输入一些东西:') -
if len(s)<</span>3: -
raise ShortInputException(len(s),3) #触发自定义异常 - except
EOFError: -
print '\n为什么要强制结束?' - except
ShortInputException,x: -
print '遇到ShortInputException异常,输入的长度是%d,\ - 不触发至少要输入位数是%d'%(x.length,x.atleast)
- else:
-
print '没有异常被捕获。' - finally:
-
print '无论是否异常都要执行这个语句!' - 自定义异常:
- class
ShortInputException(Exception): -
def __init__(self,length,atleast): -
Exception.__init__(self) -
self.length=length -
self.atleast=atleast -
-
42.使代码停留一会再执行 time.sleep(2) #要先import time -
-
43.查看变量的类型: -
from types import * -
再调用type(item) #返回的值是NoneType ,TypeType ,BooleanType ,IntType等等。详细见python自带的文档。 -
注意:布尔类型是True,False!首字母大写!! -
也有一个方法 if isinstance(item, int):看这个变量item是不是int类型 -
-
44.sys模块: -
option = sys.argv[1][2:]#比较特别的写法!! fetch sys.argv[1] but without the first two characters -
-
45. python中的一些特殊的方法 -
名称 说明 - __init__(self,...)
这个方法在新建对象恰好要被返回使用之前被调用。 - __del__(self)
恰好在对象要被删除之前调用。 - __str__(self)
在我们对对象使用print语句或是使用str()的时候调用。 - __lt__(self,other)
当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。 - __getitem__(self,key)
使用x[key]索引操作符的时候调用。 - __len__(self)
对序列对象使用内建的len()函数的时候调用。 -
-
46.列表综合:将一个列表映射为例外一个列表的快速方法: -
listone = [2, 3, 4] -
listtwo = [2*i for i in listone if i > 2] #新的列表中将原列表大于2的元素乘以2倍 -
print listtwo #[6, 8] -
-
47.函数参数使用*和**分别代表为列表或者元组。这个比较有用。 - def
powersum(power, *args): - ...
'''''Return the sum of each argument raised to specified power.''' - ...
total = 0 - ...
for i in args: - ...
total += pow(i, power) - ...
return total - 实例:
powersum(2, 3, 4) -
输出:25 -
-
48.lamdba语句:(用来创建函数的语句!!)很有特色的python语句! - def
make_repeater(n): -
return lambda s: s*n - twice
= make_repeater(2) - print
twice('string') - print
twice(2) -
- threeTimes
= make_repeat(3) - print
threeTimes('string') - print
threeTimes(2) -
-
49.动态执行python语句:exec 'print "Hello World"' 注意,这里没有括号!! -
eval用来计算存储在python中的表达式! eval_r('3*3') 这也是可以的: print eval_r('"str1"+"str2"') -
-
50.断言:assert语句,用来声明某个条件是真的。如果失败,就引发AssertionError。 -
-
51.repr函数:用来取得对象的规范化字符串表示,反引号也可以完成相同的功能。 -
大多数有:eval_r(repr(object))==object