简明Python教程_学习笔记

语法部分:

标识符的命名:

●     标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)
●     标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(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类的readreadlinewrite方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式(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'


你可能感兴趣的:(python)