编码类型
当Python解释器读取源代码时,我们通常在文件开头写上这两行:
1 | #!/usr/bin/env python |
line 1 : 这行是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释
这样在Linux/OS X系统命令行运行时,则可直接输入
./xx.py
运行脚本,而不需要输入python xx.py
line 2 : 这行会让Python解释器按UTF-8编码读取源代码。当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。
程序输出
print
语句用于输出,与字符串格式操作符%
结合使用,可实现字符串替换功能。
%s
字符串替换%d
整型替换%f
浮点型替换- …
print
也支持将输出重定向到文件,用符号>>
来重定向
1 | logfile = open('/tmp/mylog.txt', 'a') |
print
语句默认会给每一行添加一个换行符,只要在print
语句的最后添加一个,
逗号,就可以改变它这种行为。
e.g. print item,
带逗号的print
语句输出的元素之间会自动添加一个空格。
e.g. print 'We are the', 'King.'
程序输入和raw_input()函数
从用户那里得到数据输入的最容易的方法是使用raw_input()内建函数。它读取标准输入,并将读取到的数据赋值给指定的变量。
1 | name = raw_input('Enter your name:') |
文件和open()、file()函数
open(file_name, access_mode = 'r | w | a')
file_name
变量包含我们希望打开的文件的字符串名字access_mode
中r
表示读取,w
表示写入,a
表示添加,其他可能用到的标识可能还有+
表示读写,b
表示二进制访问等等。如果未提供access_mode
则默认值为r
file()
功能等同于
open()
,不过file()
这个名字可以更确切地表面它是一个工厂函数(生成文件对象)。
代码块及缩进对齐
代码块通过缩进对齐表达代码逻辑。
模块
- 使用
import
语句导入模块 - 一个模块的属性(函数和变量)可以通过
.
句点属性标识法访问
注释
#
为注释符号,从它开始直到一行结束的内容都是注释。
还有一种叫文档字符串的特别注释。你可以在模块、类或者函数的起始添加一个字符串,起到在线文档的功能。与普通注释不同,文档字符串可以在运行时访问,也可以用来自动生成文档。
1 | def foo(): |
错误和异常
要添加错误检测及异常处理,只要将它们放在try-except
语句当中。try
之后的就是你打算管理的代码组,except
之后的则是你处理错误的代码组
1 | try: |
操作符
标准运算操作符
+
加-
减*
乘/
传统除法(去尾取整)//
浮点数除法(四舍五入)%
取余**
乘方
标准比较操作符
<
<=
>
>=
==
!=
不等于<>
同样表示“不等于”,但它慢慢被淘汰了。
- 逻辑操作符
and
or
not
变量和赋值
python的变量名规则与C语言类似,而且是大小写敏感的。
python不需要预先声明变量的类型,变量类型和值在赋值那一刻被初始化。
=
为赋值号,python也支持增量赋值,但不支持C语言中的自增(++)或自减(–)操作符。
e.g.
n = n*10
等效于n *= 10
数字
类型有
- 有符号整型
- 长整型
- 布尔值
- 浮点值
- 复数
- 十进制浮点型(不是内建类型,需先导入
decimal
模块)
字符串
'
or "
用来包含特殊字符
'''
用来包含多行特殊字符
r'xxxxx'
引号前加原始字符串操作数r
/R
,则内部字符串默认不转义
[]
索引操作符
[:]
切片操作符
第一个字符的索引是0,最后一个字符的索引是-1
+
字符串连接
*
字符串重复
list和tuple
- 区别
- list列表:元素个数和值可改,用
[]
包裹,… - tuple元组:元素个数和值不可改 ,用
()
包裹,…
- list列表:元素个数和值可改,用
共同点
都可以通过切片运算(
[]
and[:]
)得到子集切片运算: 以
L[0:3]
为例,它从索引0开始取,直到索引3为止,但不包括索引3。如果第一个索引是0,还可以省略。L[:10:2]
表示前10个数,每两个取一个。…
只有1个元素的tuple定义时必须加一个逗号,来消除歧义。
list具有列表解析,表示可以在一行中使用一个for循环将所有值放到一个列表当中或更复杂的东西
e.g.
squared = [x ** 2 for x in range(4)]
dict和set
dict字典
python中的映射数据类型。
工作原理类似perl关联数组或哈希表,由key-value对构成。一个key只能对应一个value。
用
{}
包裹需要牢记的第一条就是dict的key必须是不可变对象 。
set集合
- 和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
- set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。
- 用
()
包裹
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
类
使用class
关键字定义类,class
之后是可选的文档字符串、静态成员定义、方法定义。
e.g.
1 | class ClassName(object): |
当一个类实例被创建时,__init__()
方法会自动执行,类似构造器。它并不创建实例,它的目的是执行一些该对象的必要的初始化工作。通过创建自己的__init__()
方法,你可以覆盖默认的__init__()
方法(默认的方法什么也不做)
__init__()
需要一个默认的参数,self
—— 它是类实例自身的引用(类似其他面向对象语言的this
标识符)。
self.__class__.__name__
对一个实例来说,它表示实例化它的类的名字;self.__class__
则是引用实际的类。
创建一个类实例就像调用一个函数,类实例使用.
函数操作符调用一个函数或方法。
函数
定义一个函数由def
关键字,紧随其后的函数名,再加上该函数需要的几个参数组成,然后由一个:
结束,之后是代表函数体的代码组。
函数在调用之前必须先定义。
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数.
e.g.
1 | def function_name([arguments]): |
suite
意为代码组 ,是python的术语
如果函数没有return
语句,就会自动返回None
对象。函数也可以同时返回多个值,但其实就是一个tuple。
pass
语句什么都不做,可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。
在函数定义中,参数的默认值以赋值语句的形式提供。默认参数必须指向不变对象。
在参数前面加了一个*
号,把函数的参数改为可变参数, 调用该函数时,可以传入任意个参数,包括0个参数。在list或tuple前面加一个*
号,把list或tuple的元素变成可变参数传进去。
e.g.
1 | def person(name, age, **kw): |
**extra
表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw
参数,kw
将获得一个dict,注意kw
获得的dict是extra
的一份拷贝,对kw
的改动不会影响到函数外的extra
。
if语句
语法如下。
条件表达式也不需要用括号括起来。
1 | if expression: |
while循环
语法如下。
1 | while expression: |
for循环
python中的for
接受可迭代对象作为其参数(如序列、迭代器),每次迭代其中一个元素。
由于我们要使用的数值范围可能会经常变化,python提供了一个range()
内建函数来生成这种列表。
e.g.
1 | for eachNum in range(3): |
这些循环有一个约束,要么循环索引,要么循环元素,这就导致了enumerate()
函数的产生。enumerate
函数可以把一个list变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身
实用的函数
函数 | 描述 |
---|---|
dir([obj]) | 显示对象的属性,如果没有提供参数,则显示全局变量的名字 |
help([obj]) | 以一种整齐美观的形式,显示对象的文档字符串,如果没有提供任何参数,则会进入交互式帮助 |
int(obj) | 将一个对象转换为整型 |
len(obj) | 返回对象的长度 |
open(fn, mode) | 以mode(’r’ = 读,’w’ = 写)方式打开一个文件名为fn的文件 |
range([start,] stop [,step]) | 返回一个整型列表。起始值为start,结束值为stop-1,start默认值为0,step默认值为1 |
raw_input(str) | 等待用户输入一个字符串,可以提供一个可选的参数str用作提示信息 |
str(obj) | 将一个对象转换为字符串 |
type(obj) | 返回对象的类型(返回值本身是一个type对象) |
map() | 接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回 |
reduce() | 把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算 |
filter() | 把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素 |
refer:Python教程 - 廖雪峰的官方网站