语法部分:
标识符的命名:
● 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)
● 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成
● 标识符名称是对大小写敏感的
字符串【不可变的】:
● 使用单引号(')
你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制表符都照原样保留。
● 使用双引号(")
在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。
● 使用三引号('''或""")
利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。例如:
'''This is a m ulti-line string. This is the first line.
This is the second line.
"W hat's your nam e?," I asked.
H e said "Bond, Jam es Bond."
'''
● 转义字符(\)
值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继
续,而不是开始一个新的行。
逻辑行与物理行:
Python希望每行都只使用一个语句,这样使得代码更加易读。
如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这
种用法。分号表示一个逻辑行/语句的结束。
运算符与用法:
运算符 |
名称 |
说明 |
例子 |
---|---|---|---|
+ | 加 | 两个对象相加 | 3 + 5得到8。'a' + 'b'得到'ab'。 (注意:6+'a'这样是错误的,但在PHP里这样是可以运行的) |
- | 减 | 得到负数或是一个数减去另一个数 | -5.2得到一个负数。50 - 24得到26。 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 | 2 * 3得到6。'la' * 3得到'lalala'(但PHP里这样运算返值为0)。 在PHP中要实现相同功能,有函数: str_repeat(),str_pad() |
** | 幂 | 返回x的y次幂 |
3 ** 4得到81(即3 * 3 * 3 * 3) |
/ | 除 | x除以y | 4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333 |
// | 取整除 | 返回商的整数部分 | 4 // 3.0得到1.0 |
% | 取模 | 返回除法的余数 | 8%3得到2。-25.5%2.25得到1.5 (在PHP中:-8%3 = -2 与 8%-3 = 2 ) |
<< | 左移 | 把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1) | 2 << 2得到8。——2按比特表示为10 |
>> | 右移 | 把一个数的比特向右移一定数目 | 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。 |
& | 按位与 | 数的按位与 | 5 & 3得到1。 |
| | 按位或 | 数的按位或 | 5 | 3得到7。 |
^ | 按位异或 | 数的按位异或 | 5 ^ 3得到6 |
~ | 按位翻转 | x的按位翻转是-(x+1) | ~5得到6。 |
< | 小于 | 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | 5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。 |
> | 大于 | 返回x是否大于y | 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。 |
<= | 小于等于 | 返回x是否小于等于y | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y | x = 4; y = 3; x >= y返回True。 |
== | 等于 | 比较对象是否相等 | x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 |
!= | 不等于 | 比较两个对象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布尔“非” | 如果x为True,返回False。如果x为False,它返回True。 | x = True; not y返回False。 |
and | 布尔“与” | 如果x为False,x and y返回False,否则它返回y的计算值。 | x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。 |
or | 布尔“或” | 如果x是True,它返回True,否则它返回y的计算值。 | x = True; y = False; x or y返回True。短路计算在这里也适用。 |
控制流:
if...[elif]...[else]...
while...[else]...
for item in list:...[else]...
beak语句:用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。
continue语句:用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环。
函数:
默认参数值:
在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。如:
def say(message, times = 1):
print m essage * times
使用关键参数:
如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参
数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使
用的方法)来给函数指定实参。如:
def func(a, b=5, c=10):
print 'a is', a, 'and b is', b, 'and c is', c
func(3, 7)
func(25, c=24)
func(c=50, a=100)
return:用来从一个函数返回 即跳出函数。我们也可选从函数 返回一个值 。
DocStrings:文档字符串 如:XX.__doc__
数据结构:
列表:【可变的】
list = ['apple', 'm ango', 'carrot', 'banana']
list.append() / list.sort() / del list[index]
元组:【不可变的】
zoo = ('wolf', 'elephant', 'penguin')
new_zoo = ('m onkey', 'dolphin', zoo)
print new_zoo[2][2] 注:列表同样可以这样
元组与打印语句:
age = 22
name = 'Swaroop'
print '% s is % d years old' % (name, age)
print 'Why is % s playing with that python?' % name
字典【key-value】:
只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以把不可变或可变
的对象作为字典的值。
ab = { 'Swaroop' : 'swaroopch@ byteofpython.info',
'Larry' : 'larry@ wall.org',
'Matsumoto' : 'matz@ ruby-lang.org',
'Spammer' : 'spam m er@ hotmail.com '
}
print "Swaroop's address is % s" % ab['Swaroop']
# 添加键值对
ab['Guido'] = 'guido@ python.org'
# 删除键值对
del ab['Spam m er']
print '\n There are % d contacts in the address-book\n' % len(ab) # 计算长度
for name, address in ab.items():
print 'Contact % s at % s' % (name, address)
if 'Guido' in ab: # O R ab.has_key('Guido')
print "\n Guido's address is % s" % ab['Guido']
序列:
列表、元组和字符串都是序列。序列的两个主要特点是索引操作符和切片操作符。
切片中,开始位置是包含在序列切片中的,而结束位置被排斥在切片外。
切片示例:
list = [1,2,3,4]
print list[0:-1]
对于字符串,还有一些其他操作:
.startswith() / if 'a' in str / .find() /
对象与引用:
当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都 引用 同一个对象,那么如果你不小心的话,可能会引来各种麻烦。
面向对象:
类成员:
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。
*注:使用类的静态方法,在方法上加@staticmethod
继承:
使用继承,我们把基本类的名称作为一个元组跟在定义类时的类名称之后。然后,我们注
意到基本类的__init__方法专门使用self变量调用,这样我们就可以初始化对象的基本类部分。
这一点十分重要——Python不会自动调用基本类的constructor,你得亲自专门调用它。
我们在方法调用之前加上类名称前缀,然后把self变量及其他参数传递给它。
输入/输出:
文件:
可通过创建一个file类的对象来打开一个文件,使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式(r/w)。最后,调用close关闭对文件的使用。
# coding=utf-8 poem = '''\ Programming is fun When the work is done if you wanna make your work also fun use Python! ''' #创建一个写模式('w')的文件 f = file('poem.txt','w') #把poem写入 f.write(poem) #关闭文件 f.close() #得到名为'poem.txt'的文件 f = file('poem.txt') #循环读出每一行并输出 while True: line = f.readline() if len(line) == 0: break print line #关闭文件 f.close()储存器 :
# coding=utf-8 #导入用于持久化对象的Python标准模块 import cPickle as p shoplist = ['apple','orange','carrot'] #创建写模式的文件 f = file('shoplist.data','w') #将对象序列化化到文件中[数据持久] p.dump(shoplist,f) #关闭文件 f.close() del shoplist #载入并反序列化文件'shoplist.data'中的数据 shoplist = p.load(file('shoplist.data')) print shoplist
异常:
引发异常:raise XXException
捕获异常:try...except XXException [as x]...[finally]...
class MyException(Exception): def __init__(self,msg): Exception.__init__(self) self.msg = msg try: s = raw_input('Enter something -->') if 'sex' in s: raise MyException("Don't input sex!") except EOFError: print '\nWhy did you do an EOF on me?' except MyException as e: print 'MyException:',e.msg else: print 'input right'