1.1. 标识符
- 标识符由字母、数字、下划线组成,不能以数字开头。
- 以下划线开头的标识符是有特殊意义的。
- 以单下划线开头
_foo的代表不能直接访问的类属性protected,需通过类提供的接口进行访问,不能用from xxx import *而导入。
- 以双下划线开头的
__foo代表类的私有成员private。
- 以双下划线开头和结尾的
__foo__代表Python里特殊方法专用的标识,如__init__()代表类的构造函数。
1.2. 变量
- Python 中的变量赋值不需要类型声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
- 多变量赋值
a = b = c = 1
a, b, c = 1, 2, "john"
- 删除对象的引用
1.3. 标准数据类型
Number数字
- 整型 int,例如:
10。
- 长整型 long,例如:
10L。
long类型只存在于Python2.X版本中,int型数据溢出后会自动转为long型。在Python3.X版本中long类型被移除,使用int替代。
- 浮点型 float,例如:
10.0。
- 复数型 complex,例如:
10+3.14j。
String字符串
- 引号
- Python 可以使用引号
'、双引号"、三引号'''或"""来表示字符串,引号的开始与结束必须的相同类型的。
- 其中三引号可以由多行组成(字符串中换行)。
- 原始字符串:例如
r"\n",不对字符串进行转义。
- 注释
- 单行注释采用
#开头。
- 多行注释使用三个单引号
'''或三个双引号"""。
# -*- coding: UTF-8 -*-。
- 截取与拼接
- 索引下标:从左到右索引从0开始,最大范围是n-1;从右到左索引从-1开始,最大范围-n。
- 使用
[头下标:尾下标]来截取相应的字符串,截取区间左闭右开[)。
- 使用加号
+来拼接字符串,使用乘号*来生成重复拼接的字符串。
- 格式化
- 例如:
a = "%d, %s" % (111, "test")。
List列表
- 用
[]标识,元素类型可以不同,支持列表嵌套。
- 支持截取、拼接,参考字符串截取。
- 用
[下标]取值。
Tuple元组
- 用
()标识,元组不能二次赋值(指定下标赋值),相当于只读列表。
- 新建元组中只包含一个元素时,需要在元素后面添加逗号
tup1 = (50,)。
Dictionary字典
- 用
{}标识,key-value结构。
- 用
[key]取值。
- 字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的。但键必须不可变(可以用数字、字符串或元组充当,用列表就不行)。
1.4. 运算符
- 算术运算符:
+、-、*、/、次幂**、取模%、地板除//(即处理浮点时,1.//2=0.0)。
=及运算符与=连用。
- 无
++,因为在 Python 里的数值和字符串之类的都是不可变对象,对不可变对象操作的结果都会生成一个新的对象,而不是把某内存地址数据值增加 。
- 位运算符:
&、|、^、~、<<、>>。
- 比较运算符:
==、!=、另一种不等于<>、>、<、>=、<=。
- 逻辑运算符:
and、or、not。
- 成员运算符:
in、not in。
- 身份运算符:
is、is not。
- 是否引用同一内存。
- 例如a为List,b=a与b=a[:]的区别,前者为传递引用,后者为拷贝。
2.1. 缩进
Python的代码块不使用大括号{}来控制类,函数以及其他逻辑判断。Python最具特色的就是用缩进来写模块。
2.2. 条件控制
1 2 3 4 5 6
| if expression : suite elif expression : suite else : suite
|
2.3. 循环
- 支持
continue、break。
pass为空语句,占位语句。
while循环
1 2 3 4
| while expression : suite else : suite
|
for循环
1 2 3 4
| for iterating_var in sequence: suite else : suite
|
- 直接迭代元素:
for letter in 'Python';或迭代下标:for index in range(0, 10)。
- 使用
for index, item in enumerate(sequence),同时获取下标和值。
2.4. 函数
1 2 3 4
| def functionname( parameters ): "函数_文档字符串" function_suite return [expression]
|
- 参数传递
- 数字、字符串、元组是不可变类型,而列表、字典等则是可变类型。参数传递时,不可变类型的对象传值,可变类型的对象传引用。
- 默认参数,例如
def printinfo( name, age = 35 ):。
- 不定长参数,加了星号
*的变量名会存放所有未命名的变量参数,例如def printinfo( arg1, *vartuple ):。
- 全局变量想作用于函数内,需加关键字
global。
- 匿名函数lambda
lambda [arg1 [,arg2,.....argn]]:expression。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
2.5. 异常处理
1 2 3 4 5 6 7 8 9
| raise [Exception [, args [, traceback]]] try: <语句> except: <语句> else: <语句> finally: <语句>
|
2.6. 模块
- 模块导入
import module1,使用函数:module1.func1()。
from module1 import func1,使用函数:func1()。
from module1 import *,使用函数:func1()。
3.1. 面向对象
定义类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
class Employee: '所有员工的基类' empCount = 0
def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1
def displayCount(self): print "Total Employee %d" % Employee.empCount
def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary
|
empCount变量是一个类变量,它的值将在这个类的所有实例之间共享。在内部类或外部类使用Employee.empCount访问。
- 方法
__init__()是构造函数。
self代表类的实例,self在定义类的方法时是必须有的,但在调用时不必传入相应的参数。
- 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是
self。
使用实例
1 2 3
| emp1 = Employee("Zara", 2000) emp1.displayEmployee() print "Total Employee %d" % Employee.empCount
|
- 无
new关键字,使用的是构造函数__init__。
- 用点号
.访问属性、方法。
继承
1 2
| class SubClassName (ParentClass1[, ParentClass2, ...]): ...
|
- 在调用基类的方法时,需要加上基类的类名前缀,且需要带上
self参数变量。
- 调用方法时,先在本类中查找调用的方法,找不到才去基类中逐个查找。