print: 输出
raw_input: 获得输入值
数字类型
类型 | 描述 |
整数 | 一般意义上的数,包含八进制(以数字0开头)及十六进制(以0x开头) |
长整数 | 无限大小的数,在其结尾添加小写字母1或者大写字母L |
浮点数 | 小数或者用E或e表示的幂 |
复数 | 复数的虚部以字母j或者J结尾 |
例如:
>>> 2.30-1.30
0.99999999999999978
>>> 07+05 # 八进制
12
>>> print "%o" % (07 + 05)
14
>>> prtin "%x" % (0x7 + 0x5)
c
>>> m = 9 + 3j
>>> n = 15 - 2j
>>> m + n # 复数
(24 + 1j)
运算符
运算符 | 描述 |
乘法运算符 | |
/ | 除法运算符 |
% | 取余运算符 |
加法运算符 | |
减法运算符 | |
位或运算符(化成二进制,两个二进制若同一位数上其一有 1 则该位为1 否则为0) | |
^ | 位异或运算符(化成二进制,对比二进制各位数上的字数一样的该位数上为0否则为1) |
& | 位与运算符(化成二进制,应对的两个位数均为1时,该位为1) |
<< | 左移运算符(左移1相当于乘2,左移2相当于乘4) |
>> | 右移运算符(右移1相当于除以2,右移2相当于除以4 ) |
** | 乘方运算符 |
运算符优先级:
转义字符 | 含义 |
n | 换行符 |
t | 制表符 |
r | 回车 |
\ | 表示 |
' | 表示一个单引号,而不是字符串结束 |
" | 表示一个双引号,而不是字符串结束 |
只有使用 print 输出字符串时,才会解释字符串中的转义字符
常用字符串操作 (模块 string ) ======================== =========================================================================== 字符串操作 描述 string.capitalize() 将字符串的第一个字母大写 string.count() 获得字符串中某一子字符串的数目 string.find() 获得字符串中某一子字符串的起始位置 0为第一位 -1表示未找到 string.isalnum() 检测字符串是否仅包含0-9 A-Z a-z string.isalpha() 检测字符串是否仅包含A-Z a-z string.isdigit() 检测字符串是否仅包含数字 string.islower() 检测字符串是否均为小写字符 string.isspace() 检测字符串中所有字符是否均为空白字符 string.istitle() 检测字符串中的单词是否为首字母大写 string.isupper() 检测字符串是否均为大写字母 string.join() 连接字符串 将字符串插入到括号内每两个字符之间 string.lower() 将字符串全部转换为小写 string.split() 分割字符串 string.swapcase() 将字符串中大写字母转换为小写,小写字母转换为大写 string.title() 将字符串中的单词 首字母大写 string.upper() 将字符串中全部字母转换为大写 len(string) 获取字符串长度 string * num 表示将字符串重复输出 num 次 ======================== ===========================================================================
格式化字符串
%c | 单个字符 |
%d | 十进制整数 |
%o | 八进制整数 |
%s | 字符串 |
%x | 十六进制整数,其中字母小写 |
%X | 十六进制整数,其中字母大写 |
将字符串 s 转换为整数: string.atoi(s[,base])
获得绝对路径:
import os
os.listdir(r'absoulte-path') # r(或R) 表示不转义
列表操作 | 描述 |
list.append() | 追加成员 |
list.count(x) | 计算列表中的参数x出现的次数 |
list.extend(L) | 向列表中追加另一个列表L |
list.index(x) | 获得参数x在列表中的位置 |
list.insert() | 向列表中插入数据 |
list.pop() | 删除列表中的成员,括号中为位置 |
list.remove() | 删除列表中的成员,括号中为成员 |
list.reverse() | 将列表中的成员顺序颠倒 |
list.sort() | 将列表中成员排序 |
字典操作 | 描述 |
dic.clear() | 清空字典 |
dic.copy() | 复制字典 |
dic.get(k) | 获得键k的值 |
dic.has_key(k) | 是否包含键k |
dic.items() | 获得由键和值组成的列表 |
dic.keys() | 获得键的列表 |
dic.pop(k) | 删除键k |
dic.update({‘键’:值}) | 更新成员 |
dic.values() | 获得值的列表 |
常用文件操作:
打开文件: open(file_name, mode, buffer_size) # 文件名,模式(r,w,b),缓存区大小
操作 | 描述 |
file.read() | 将整个文件读入字符串中 |
file.readline() | 读入文件的一行字符串中 |
file.readlines() | 将整个文件按行读入列表中 |
file.write() | 向文件中写入字符串 |
file.writelines() | 向文件中写入一个列表 |
file.close() | 关闭打开的文件 |
循环:
for num in [...]:
continue
break
else:
# 未被 break 时执行的代码
range([start,] stop [,step])
函数声明:
def <function_name> (param=default_value[,...]):
<function_statement>
return <return_value>
调用函数时,只能一次对参数赋值,不能用(, , x) 之类的赋值。使用下面的例子可以解决:
def example(x=None, y=None, z=None):
if x is None:
x = 1
if y is None:
y = 2
if z is None:
z = 3
return (x + y + z)
另外,调用函数的时候,可以直接对参数赋值而不考虑参数的顺序:
def fun(x, y):
return x - y
>>> fun(1, 2)
-1
>>> fun(y=1, x=2)
1
只输入函数名,不加括号,则返回函数在内存中的地址
若想将函数所有参数都放到一个元组里,可以使用: def fun(*params) 若想要函数所有参数都放在一个字典中,可以使用:def func(**params) 在 Python 中,使用可变对象(如列表)来表达改变参数值的目的。
Python 作用域分为:
- 内置作用域
- 局部作用域
- 全局作用域
global x # 定义全局作用域
用 lambda 声明匿名函数(没有函数名的函数):
fun = lambda x : x * x - 1
>>> fun(3)
8
lambda 适用于小函数,可以调用函数,不能使用 print
导入模块
>>> import module
>>> import module as new_name
>>> from module import func
修改模块查找路径
>>> import os
>>> import sys
>>> os.getcwd() # 当前工作目录
>>> sys.path # Python 的查找路径。列表形式。
手动编译
>>> import py_compile
>>> py_compile.compile("/path/to/python/file")
手动优化编译
>>> python -o file/to/output
>>> python -oo file/to/output
Python 脚本中的 ``__name__`` 属性:
__dir()__ : 可以获得导入模块中的所有定义的名字、函数。
Python 路径区分大小写!
模块包
** Python 中的正则表达式 **
元字符 | 含义 |
. | 除换行外任何单个字符 |
位于*之前的任意个字符 | |
位于+之前的一个或多个字符(不能0个) | |
位于|前后的字符 | |
^ | 匹配行首 |
$ | 匹配行尾 |
? | 位于?之前的零个或者一个字符. |
表示位于之后的转义字符 | |
[] | 匹配位于[]之中的 |
() | 将位于()内的内容当作一个整体 |
{} | 重复操作次数 |
pattern: 匹配模式
string: 要进行匹配的字符串
flags:可选参数,进行匹配的标志
flags:
re.sub(pattern, replacement, string [,maxcount]) 用于替换字符串中符合正则表达式的内容,它返回替换后的字符串。 re.subn(pattern, replacement, string [,maxcount]) 与 re.sub() 函数相同,只不过返回的是一个元组 re.split(pattern, string [,maxsplit=0]) 用于分割字符串 re.compile(pattern [,flags]) 将正则表达式编译生成正则表达式对象实例后,可以使用正则表达式对象实例提供的属性和方法对字符串进行处理。生成一个 RegexObject 对象实例。
转义字符 | 含义 |
\b (b为退格) | 匹配单词头或者单词尾 |
\B | 与b含义相反 |
d | 匹配任何数字 |
D | 匹配任何非数字 |
s | 匹配任何空白字符 |
S | 匹配任何非空白字符 |
w | 匹配任何字母,.数字,以及下划线 |
W | 匹配任何非数字,字母,下划线. |
使用组
有关面向对象的思想
在Python中可以使用类建立一个对象模型,以及对象所拥有的属性和方法等。该模型能够较好地反应实物的本质,以及其相互之间的关系,其本质是更接近于人类认知事物所采用的计算模型。
类与对象
** 类的定义 **
>>> class class_name:
>>> statements
>>> class sub_name(parent_name):
>>> statements
类的使用
类在定义后必须先实例化才能使用。类的实例化与函数调用类似,只要使用类名加圆括号的形式就可以实例化一个类。类实例化以后会生成一个对象。一个类可以实例化多个对象,对象与对象之间并不互相影响。类实例化以后可以使用其属性和方法等。
类的属性和方法
每一个类都具有自己的属性和方法。属性和方法是面向对象程序设计所独有的概念。属性是类所封装的数据,而方法则是类对数据进行的操作。
类的属性
类的专用方法(Specail Methods)
在PY中有一类以两条下弧线开始并且以两条下划线结束的类的方法,称之为类的转悠方法。专有方法是针对类的特殊操作。(private)
方法名 | 描述 |
_init_ | 构造函数,生成对象时调用 |
_del_ | 析构函数,释放对象时调用 |
_add_ | 加运算 |
_mul_ | 乘运算 |
_cmp_ | 比较运算 |
_repr_ | 打印、转换 |
_setitem_ | 按照索引赋值 |
_getitem_ | 按照索引获取值 |
_len_ | 获得长度 |
_call_ | 函数调用 |
类的继承
多重继承是指创建的类同时拥有几个类的属性和方法。多重继承与单重继承不同的是在类名后边的圆括号中包含多个父类名,父类名之间用逗号分开。
class class_name(parent1, parent2):
pass
多重继承需要注意圆括号中的父类名字的顺序。如果父类中有相同方法名,而在类中使用是未定义父类名,则使用前面的父类的方法。
*重载 !*
重载允许通过继承而创建的类重新定义父类的方法。不仅可以重载方法,而且还可以重载运算符,以使用自创建的类。
方法重载
运算符重载
Python中运算符都有相对应的函数,在类中运算符都有相对应的专有方法。因此运算符的重载实际上是对运算符对应的专有方法的重载。
运算符 | 专有方法 |
_add_ | |
_sub_ | |
_mul_ | |
/ | _div_ |
% | _mod_ |
** | _pow_ |
模块中的类
类与函数一样,也可以写到模块中。在其他的脚本中可以通过导入模块名使用定义的类。模块中类的使用方式与模块中函数类似。实际上可以将模块中的类当作函数一样使用。
异常与调试
使用``try``语句处理异常。和 Python 中其他语句一样,try``语句也要使用缩进结果。``try 语句也有一个可选的 else 语句块。
try:
pass
except<exception1>:
pass
except<exception2>:
pass
else:
pass
try语句还有另外一种特殊的形式:
try:
pass
finally:
pass
不管try语句中是否发生异常,都将执行finally 语句块。
常用异常名 | 描述 |
AttributeError | 调用不存在的方法引发的异常 |
EOFerror | 遇到文件末尾引发的异常 |
ImpoertError | 导入模块出错引发的异常 |
IndexError | 列表越界引发的异常 |
IOError | I/O操作引发的异常,如打开文件出错等. |
KeyError | 使用字典中不存在的关键字引发的异常 |
NameError | 使用不存在的变量名引发的异常 |
TabError | 语句块缩进不正确引发的异常. |
ValueError | 搜索列表中不存在的值引发的异常 |
ZeroDivision | 除数为零. |
多重异常处理
在Python中可以在try语句中嵌套另外一个try语句。由于Python将try语句放在堆栈中,一旦引发异常,Python将匹配最近的except语句。如果except忽略该异常,则异常将被外围try语句捕获。
引发异常
除了内置的异常意外,在Python中还可以通过使用raise语句手工引发异常。在类中也可以使用raise 引发异常,并向异常传递数据。使用raise可以定义新的错误类型,以适应脚本的需要。例如对用户输入数据的长度有要求,则可以使用raise引发异常,以确保数据输入符合要求。
使用raise引发异常
raise exception
raise exception, data
raise class_name
assert simplified_raise_statement
assert condition_test, exception_data
自定义异常类
在 Python 中可以通过继承 Exception 类来创建自己的异常类。异常类和其他的类并没有区别,一般仅在异常类中定义几个属性信息。
使用pdb调试
在 Python 中脚本的语法错误可以被 Python 解释器发现,但是脚本出现的错误,或者其他的一些变量使用错误却不容易被发现。如果脚本运行后没有获得预想的结果,则需要对脚本进行调试。pdb模块是Python自带的调试模块。使用该模块可以为脚本设置断点、单步执行、查看变量值等。pdb模块可以以命令行参数的形式启动,也可以通过 import 将其导入使用。
运行语句
run(statement [,global[, localst]])
statement: 要调试的语句块,以字符串的形式。
globals 可选参数,设置statement 运行的全局环境变量.
locals 可选参数 设置statement运行的局部环境变量
运行表达式
在 Python 中可以使用 pdb 模块的 runeval 函数来调试表达式。
runevel(expression[,globals[,locals]])
expression:要调试的表达式,以字符串的形式。
globals:可选参数,设置statement运行的全局环境变量。
locals:可选参数,设置statement运行的局部环境变量。
运行函数
在 Python 中可以使用 pdb 模块的 runcall` 函数来调试函数。
runcall(function[, argument,...])
function 函数名
argument 函数的参数
设置硬断点
在Python中可以使用pdb模块的set_trace函数在脚本中设置硬断点.set_trace 函数一般在".py"脚本中使用。
set_trace()
(Pdb) list 列出脚本内容
(Pdb) continue 继续执行
完整命令 | 简写命令 | 描述 |
args | a | 打印当前函数的参数 |
break | b | 设置断点 |
clear | cl | 清除断点 |
condition | 无 | 设置条件断点 |
continue | c或者cont | 继续运行,直到遇到断点或者脚本结束 |
disable | 无 | 禁用断点 |
enable | 无 | 启用断点 |
help | h | 查看pdb帮助 |
ignore | 无 | 忽略断点 |
jump | j | 跳转到指定行数运行 |
list | l | 列出脚本清单 |
next | n | 执行下条语句,遇到函数不进入其内部 |
p | p | 打印变量值,也可以用print |
quit | q | 退出pdb |
return | r | 一直运行到函数返回 |
tbreak | 无 | 设置临时断点,断点只中断一次 |
step | s | 执行下一条语句,遇到函数进入其内部 |
where | w | 查看所在的位置 |
! | 无 | 在pdb中执行语句 |
Python扩展和嵌入