《Python简明教程》学习笔记
《python简明教程》python入门的一个非常好的文档。如需下载,请点击这里(密码:grjj)。最近又看了一遍,把里面一些容易忽略的知识点记录下来。
运算符
**
乘方,2**3=8//
取商的整数部分, 10//3=3&
按位与, 5&3=1|
按位或,5|3=7^
按位异或,5^3=6~
按位取反,~5=-6,取反后数的正负反转,且正数要比负数绝对值小1and、or、not
就是Java里面的&&、||、!
,但是在python里面&&、||、!
是非法字符
数据结构
- python里面常用的数据结构有列表(list)、元组(tuple)、字典(dic)和集合(set)
- list,用方括号
[]
括起来,里面元素用逗号分隔,元素有序可变- 增加元素用
append()
方法,删除元素用del
方法
- 增加元素用
- tuple,用圆括号
()
括起来,里面元素用逗号分隔,元素有序不可变- 仅有一个元素时也要加
,
,避免与运算符优先级混淆 - 常用于打印语句,如
print "name:%s,age: %d" %(name,age)
- 仅有一个元素时也要加
- dic,用花括号
{}
括起来,里面元素用逗号分隔,元素无序可变,每个元素是用冒号:
分隔的键值对- 通过
dic[k]
访问元素,dic[newK]=newV
增加元素,del dic[k]
删除元素 - 遍历的方法为
for k,v in dic.items():
,实际上dic.items()
会返回一个元组的列表 - 判断某一个k是否在dic
if k in dic:
- 通过
- 序列,序列不是一种具体的数据结构,而是一类数据结构,字符串,列表和元组均属于序列,序列有一些通用的方法
- 通过
len()
获取序列的长度 - 表示序列的范围:
[a:b]
表示下表a到b-1,[a:]
表示从下标a到最后一个,[:b]
表示从第一个(也就是0)到下标b-1,[:]
表示所有元素,默认步长为1,也可以添加多一个参数变为[a:b:c]
,这时步长为c,与range()函数相似 - 对于一个序列,复制这个序列与给这个序列使用一个别名不同,详见下面代码
- 通过
1 | list1=[1,2,3] |
控制语句
- 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 | range(1,5) --> 1,2,3,4 |
函数
- 函数没有return语句时默认返回一个None(没有任何东西的特殊类)
- pass语句表示一个空的语法句
- 文档字符串:用来描述函数或者类的功能,一般格式:首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述
1 | def printMax(x, y): |
文档字符串也可以通过函数或类的__doc__
属性获取
- 一些常见的函数
range()
,一般用于for循环dir(module)
,返回module的名称列表,不提供module值时默认是当前modulelen(arr)
,用于获取序列arr的长度,arr可以是list、tuple、dic或者是stringos.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 | try: |
其他一些用法
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 | list1=[1,2,3,4,5] |
也可从一个列表导出一个字典(dict只能接受一个参数,这里为一个列表)
1
2l1=[1,2,3]
timesten=dict([(v,v*10) for v in l1 if i >1])#timesten={2:20,3:30}
- 函数形参为元组和字典:可用*和**加在形参前,代表这是元组和字典,但是不加也能够正常使用。加上的目的是为了能让函数接受不定参数,例子如下:
1 | def add(x, *args): |
这里的 *args
表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素。运行
1 | >>>print add(1, 2, 3, 4) |
这样定义的函数不能使用关键词传入参数,要使用关键词,可以这样:
1 | def add(x, **kwargs): |
这里的 **kwargs
表示参数数目不定,相当于一个字典,关键词和值对应于键值对。运行如下
1 | >>>print add(10, y=11, z=12, w=13) |