python学习笔记(一)

来源:互联网 发布:2016网络在逃犯名单 编辑:程序博客网 时间:2024/05/29 04:01
基础语法

1. 标识符以下划线开头和结尾有特殊意义
2. 严格缩进
3. 通过 \ 换行,同C的宏,[], {} 或 () 括号和三引号( ''' 或 """ ) 就不需要使用多行连接符
4. print默认换行,逗号(,)可以取消换行
5. Python有五个标准的数据类型:
Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)

其中数字,字符串,元组和None为不可变对象。不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。
此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

6. 数字数据类型:
int, long, float, complex. 
改变数字数据类型会分配一个新的对象.
使用del删除引用
7. 字符串
可以从左到右(0)或者从右到左(-1)索引
[start:end]可以取字串,包括下边界,不包括上边界
加号(+)是字符串连接运算符,星号(*)是重复操作
原始字符串:在字符串的引号前加 r 或者 R,关闭\的转义功能
字符串格式化:print "My name is %s and weight is %d kg!" % ('Zara', 21) 
各种字符串内置函数:split() find() count() replace()

8. 列表

list = ['runoob',786 , 2.23,'john',70.2]

同样可以取子列表,+ 和 * 也适用

二维列表:

list_2d = [[0 for col in range(cols)] for row in range(rows)] # 把cols和rows替换成列数和行数

例如:

list_2d = [ [0 for i in range(3)] for i in range(4)] # 4行3列

对list实现类似于java的下标循环: for i, value in enumerate(list)

列表生成式:

生成1-10的序列:

list = range(1, 11)

生成列表 [4, 16, 36, 64, 100]:

list = [x * x for x in range(1, 11) if x % 2 == 0]

利用两个变量生成列表:

dict = {'1':'hello', '2':'world'}list = [k + '=' + v for k, v in dict.iteritems()]print list

结果是:

['1=hello', '2=world']

通过if语句来保证列表生成式能正确地执行,如下面的语句执行时会报错:

origin = ["Hello", 18]list = [s.lower() for s in origin]


可以通过修改为:
origin = ["Hello", 18]list = [s.lower() for s in origin if isinstance(s, str)]print list

9. 元组
   元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表

10. 字典
字典用"{ }"标识。字典数据类型通过key-value来进行存储,相当于C++的Map。
dict['one'] = "This is one"
dict[2] = "This is two"
tinydict = {'name':'john','code':6734,'dept':'sales'}
通过keys()/values()方法取出所有的键/值
dict默认情况下迭代的是key
如果要迭代value,可以用 for value in d.itervalues()

如果要同时迭代key和value,可以用 for k, v in d.iteritems()


插入:

生成器(Generator):

假设列表有100万个元素,而我们前期只需要用到列表的前几个元素,把列表的所有元素一次性全部计算出来是很浪费内存的,因此我们可以考虑在需要的时候再把元素的值计算出来,从而节省大量的空间。在python中这种一边循环一边计算的机制,称为生成器。

① 创建生成器最简单的方法是:把列表生成式的[]改成()

在列表生成式中可以通过next()方法获得列表的下一个值,也可以通过for循环遍历列表。

g = (x *  x for x in range(5))print g print g.next()print g.next()for i in g:    print i

运行的结果是:

<generator object <genexpr> at 0x025AE508>014916

② 创建生成器的第二个方法:yield关键字

def fibs(max):    n, a, b = 0, 0, 1    while n < max:        yield b        a, b = b, a+b        n = n + 1g = fibs(5)print g.next(), g.next(), g.next()print fibs(5).next(), fibs(5).next(), fibs(5).next()for i in fibs(5):    print i,

输出的结果为:

1 1 21 1 11 1 2 3 5

不是生成器的时候,yield的位置可能是print。函数式顺序执行的,直到遇到return或者最后一条语句。而generator的函数,在每次next()的时候执行,遇到yield语句返回,再次执行时从上一次返回的yield语句处继续执行。



11. 数据类型转换
各种数据类型的转换函数,数据类型名称即为函数名。
int(x, [,base]),str() chr(), ord(), hex()

12. 运算符
** 幂
// 整除(返回商的整数部分,9//2 = 4, 9.0//2.0 = 4.0

13. 逻辑运算符
and or not

14. 成员运算符
in/ not in

15. 身份运算符
is / is not

16. 条件语句
if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……

17. 循环语句
循环控制:break continue pass

while 判断条件:
    执行语句……

for iterating_var in sequence:
   statements(s)

while 和 for循环都支持搭配else使用,可以在循环正常执行完的时候执行指定代码。
大部分时候跟没有else是一样的,区别在于当通过break退出循环的时候,else中的语句不会被执行。

使用range(len())获取元组/列表下标
使用enumerate()遍历元组/列表,同时返回下标和值


·异常处理
try:    passexcept:    passfinally:    pass

except后可以接一个或多个类型的异常(用圆括号围起来),默认处理所有异常
finally的语句无论有无发生异常,最后一定会被执行

·主动抛出异常
raise exception_name







原创粉丝点击