《Python简明教程》学习笔记

《python简明教程》python入门的一个非常好的文档。如需下载,请点击这里(密码:grjj)。最近又看了一遍,把里面一些容易忽略的知识点记录下来。

运算符

  • ** 乘方,2**3=8
  • // 取商的整数部分, 10//3=3
  • & 按位与, 5&3=1
  • | 按位或,5|3=7
  • ^ 按位异或,5^3=6
  • ~ 按位取反,~5=-6,取反后数的正负反转,且正数要比负数绝对值小1
  • and、or、not就是Java里面的&&、||、!,但是在python里面&&、||、!是非法字符

数据结构

  • python里面常用的数据结构有列表(list)、元组(tuple)、字典(dic)和集合(set)
  1. list,用方括号[]括起来,里面元素用逗号分隔,元素有序可变
    • 增加元素用append()方法,删除元素用del方法
  2. tuple,用圆括号()括起来,里面元素用逗号分隔,元素有序不可变
    • 仅有一个元素时也要加,,避免与运算符优先级混淆
    • 常用于打印语句,如print "name:%s,age: %d" %(name,age)
  3. dic,用花括号{}括起来,里面元素用逗号分隔,元素无序可变,每个元素是用冒号:分隔的键值对
    • 通过dic[k]访问元素,dic[newK]=newV 增加元素,del dic[k] 删除元素
    • 遍历的方法为 for k,v in dic.items():,实际上dic.items()会返回一个元组的列表
    • 判断某一个k是否在dic if k in dic:
  4. 序列,序列不是一种具体的数据结构,而是一类数据结构,字符串,列表和元组均属于序列,序列有一些通用的方法
    • 通过len()获取序列的长度
    • 表示序列的范围:[a:b]表示下表a到b-1,[a:]表示从下标a到最后一个,[:b]表示从第一个(也就是0)到下标b-1,[:]表示所有元素,默认步长为1,也可以添加多一个参数变为[a:b:c],这时步长为c,与range()函数相似
    • 对于一个序列,复制这个序列与给这个序列使用一个别名不同,详见下面代码
1
2
3
4
5
6
7
list1=[1,2,3]
list2=list1 #别名
list3=list1[:] #复制
del list1[1]
print list2
print list3

控制语句

  • python的控制语句有if,while,for,continue,break,但是没有switch
  • if、while判断条件的判断条件均没有括号
  • while、for语句均有一个 可选的 else语句,while语句条件不成立时退出while并执行else语句;for语句中的else语句则在for循环后执行一次;但是如果在while和for循环里面遇到break退出程序,则不会执行else语句
  • for i in k:语句里,k可以是任何序列,包括字符串、列表、元组、字典等
  • for里面常用的range函数的范围不包括第二个参数,默认步长为1,可通过第三个参数选择步长
1
2
range(1,5) --> 1,2,3,4
range(1,5,2)-->1,3

函数

  • 函数没有return语句时默认返回一个None(没有任何东西的特殊类)
  • pass语句表示一个空的语法句
  • 文档字符串:用来描述函数或者类的功能,一般格式:首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述
1
2
3
4
5
def printMax(x, y):
'''Prints the maximum of two numbers.

The two values must be integers.'''

文档字符串也可以通过函数或类的__doc__属性获取

  • 一些常见的函数
    • range(),一般用于for循环
    • dir(module),返回module的名称列表,不提供module值时默认是当前module
    • len(arr),用于获取序列arr的长度,arr可以是list、tuple、dic或者是string
    • os.system(command),执行系统命令command
    • time.strftime(),按指定格式输出当前系统时间,如time.strftime("%Y-%m-%d %H:%M:%S")
    • time.sleep(t),一般用于循环,让系统休眠t秒
    • string.startswith(str),字符串对象的方法,判断字符串string是否以 str开头
    • string.find(str),字符串对象的方法,判断 str是否在字符串string里面
    • string.join(list),字符串对象的方法,用字符串 string 连接list列表

模块

  • 可以导入的模块有两种:(1)标准模块,常见的有os、sys(2)自定义模块,就是.py结尾的python文件
  • import操作会在sys.path列出的目录列表里面查找需要import的模块
  • 为了使导入模块的操作更快,会在第一次导入模块时创建模块的pyc文件(字节编译文件)
  • 每个模块都有一个__name__,当模块被直接执行时,该值为__main__

  • 语法 class 类名:
  • 类方法与普通函数形式上最大区别在于类方法的第一个形参必须为self,且该形参不需要实参,self类似于Java中的this指针
  • __init__为构造函数,__del__为析构函数
  • 所有的类成员都是公开的,而以双下划线开头的成员是属于类的,是私有的,作为惯例,一般属于类的成员都以单下划线开头
  • 继承,语法 class son(father):,注意子类不会自动调用父类的构造函数,因此必须显示调用,但是不调用时也没有报错。

异常捕获

  • 语法
1
2
3
4
5
6
7
try:
可能抛出异常的方法
except (错误或异常的元组): #没有指定异常时捕获所有的错误异常
处理
finally:
无论是否有异常均要执行

其他一些用法

  • python 程序第一行的 #! 目的是确定使用哪个解释器,一般在Linux平台下写的是 #!/usr/bin/env python 而不是直接写python解析器的位置,目的是即使程序在其他机子上跑时也能够找得到python解析器;而且程序迁移到windows下也不会报错问题,但是 #!/usr/bin/env python 并不适用于Windows默认的cmd窗口,假如直接在dos/powershell下输入python的文件名,是会用文件关联的程序打开(关联程序可以通过右键设置打开方式来设定)。也可在Windows下安装一个git shell,在git shell 下输入python的文件名即可执行。

  • 可以通过内置的help( )函数来找到函数和类的帮助信息,实际上help( )是通过抽取文档字符串(DocStrings,也就是函数和类的__doc__属性)并打印输出的

  • 字符串或者程序在一行放不下时通过反斜杠\可以在下一行继续写,

  • 字符串前加上u或者U表示采用Unicode编码,字符串的连接可以使用加号+

  • print语句的一些技巧:在for循环的print最后加逗号可以避免分行;print str*i可以重复输出i个str

  • 强制类型转换一般形式是被转换的内容用圆括号括起来,类型不用扩。如str(5) 是从整数转为字符串 ,int(raw_input('input an integer')) 是从字符串转为整形

  • 列表综合:从一个已有的列表导出一个新的列表。实例如下:

1
2
list1=[1,2,3,4,5]
list2=[i*2 for i in list1 if i>2] #list2=[6,8,10]

也可从一个列表导出一个字典(dict只能接受一个参数,这里为一个列表)

1
2
l1=[1,2,3]
timesten=dict([(v,v*10) for v in l1 if i >1])#timesten={2:20,3:30}
- 函数形参为元组和字典:可用*和**加在形参前,代表这是元组和字典,但是不加也能够正常使用。加上的目的是为了能让函数接受不定参数,例子如下:

1
2
3
4
5
def add(x, *args):
total = x
for arg in args:
total += arg
return total

这里的 *args 表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素。运行

1
2
3
4
>>>print add(1, 2, 3, 4)
10
>>>print add(1, 2)
3

这样定义的函数不能使用关键词传入参数,要使用关键词,可以这样:

1
2
3
4
5
6
def add(x, **kwargs):
total = x
for arg, value in kwargs.items():
print "adding ", arg
total += value
return total

这里的 **kwargs 表示参数数目不定,相当于一个字典,关键词和值对应于键值对。运行如下

1
2
3
4
5
>>>print add(10, y=11, z=12, w=13)
adding y
adding z
adding w
46