1,python特点
python 注重的是如何解决问题,而不是语法和结构简单高效、扩展性
2,安装 python
python -V 检测是否安装pythonctrl+d 退出python提示符python是大小写敏感的
任何#号后面的都是注释
特殊形式的注释 #!,被称为组织行,这行的目的是告诉系统在执行程序时,应该运行哪个解释器
第一行的注释不能是中文
解释器中运行python
退出:linux ctrl + d window ctrl + z 然后 enter回车
帮助: help(str),在linux中,通过 env 设置pythondocs 环境变量,就可以使用 help 命令了
3,基本概念
字符串、常量、变量
4种类型的数:整数、长整数、浮点数和复数
单引号显示字符串,所有的空格、制表符都会显示
三引号显示多行的字符串,在三引号中可以自由使用单引号和双引号
单引号、双引号、三引号
在字符串中,行末单独的反斜杠 表示字符串在下一行继续
自然字符串 r"" 或 R"",指示某些不需要如转义符那样的特别处理的字符串
python 允许处理unicode文本,只需要在字符串前面加上 u"中文"
字符串是不可变的
按字面意思自动连接,例如 'this is a' 'book is good?' 会连接为一句
python没有char数据类型,单引号和双引号意思一样,
可以用自然字符串处理正则表达式,要不会需要很多的反斜杠
4,基本概念
变量可以存储任何东西,变量是你计算机中存储信息的一部分内存
python变量标识符由字母数字下划线组成,首字母必须是下划线或者字母
变量可以处理不同类型的值,称为数据类型
python 标识符区分大小写
python是完全面向对象的,对于数字、字符串、函数都可以是对象,python把在程序中用到的任何东西都称为对象
使用变量时,只需要赋值,不需要声明变量或数据类型
逻辑行与物理行=====物理行是你在编写程序时所看见的,逻辑行是python看见的单个语句
默认的python希望每行都只有一条语句
强烈建议,每个物理行,只有一个逻辑行
如果你想在一个物理行显示多个逻辑行,可以使用分号; ,分号表示一个逻辑行的结束
如果逻辑行太长,可以使用明确的行连接, 使用反斜杠
python程序扩展名为.py
在解释器中运行: python program.py
python中行首的空白最重要,用来决定逻辑层的缩进层次,从而决定语句的分组
同一层次的语句必须有相同的缩进,每一组这样的语句称为一个块
何时你能够使用新块,在控制流中详细介绍
选择一种缩进风格使用,然后一贯的使用它
5,运算符和操作数
运算符 +、-、,一个表达式可以分解为运算符和操作数
http://www.kuqin.com/abyteofpython_cn/ch05s02.html
赋值运算符的运算是从右向左的
控制流
python中三种控制流语句 if、for、while,python中没有switch语句
raw_input 内建函数,提交一个字符串,等待用户输入,并给出提示
if elif else
while
while 语句有一个可选的else 从句
python 严格注重缩进和大小写,就连True和False 首字母必须大小,否则都是错误的
range 生成第一个数到第二个数之前的序列,第三个参数是步长
for i in range(1,5) 等于 for i in [1,2,3,4]
for i in [序列]
for in 循环语句,逐一使用队列中的每一项目
len 函数,获取字符串的长度 len(str)
break 终止循环
如果在循环中终止,else块将不执行
continue 跳出当前循环,继续下一次循环,使用于循环中
int 把字符串转换为整数,事实上int是一个类
6,函数
def sayHello(): 定义函数
def 关键字定义函数,
函数内部定义的变量是局部的,
有默认参数值必须在无默认参数值的后面声明,否则是无效的,也就是先声明无默认值形参,再声明有默认值的形参
global 用来声明全局变量,可以同时声明多个全局变量
如果一个函数有许多参数,可以通过命名为函数添加实参,也就是指定的值传递参数
没有返回值的return,等价于return None
pass 在python中表示一个空的语句块
docStrings 文档字符串
【文档字符串的惯例】是一个多行字符串,它的首行以大写字母开始,第二行是空行,从第三行开始时详细的描述 句号结尾。
print func.__doc__ 打印文档字符串
第二行是空行,从第三行开始是描述
建议自己所写的函数都要写文档字符串
7,模块
模块是一个包含了你定义的函数和变量的文件,为了在其他程序中重用模块,模块的文件名必须以.py为扩展名
学习使用标准库模块
字节编译的 .pyc 文件,使输入模块更快一些
import 模块名,告诉python,我们将要使用这个模块
sys.argv 包含了命令行参数的列表,列表的第一个参数总是脚本的名称
from .. import
直接使用argv变量到你的程序中,from sys import argv
避免使用 from..import,而使用import语句,因为这样可以使你的程序更加易读
模块的 __name__
假设我们只想在程序本身运行的时候,执行,而在被别的模块输入的时候不运行
每个python模块都有一个__name__,如果它是 '__main__' ,说明这个模块是被单独运行的
制造你自己的模块----每个python程序也是一个模块
内建的dir 函数
使用内建的dir函数列出模块定义的标识符,标识符有函数、类和变量
dir() 提供一个模块名,返回模块定义的名称列表 不提供参数时,提供模块名时,返回当前模块中定义的名称列表
del 删除一个变量
8,数据结构
数据结构是指程序可以处理的数据 和 结构
python有三种内建的数据结构:列表、元组、字典
列表 --处理一组有序项目的数据结构
list = ['apple','banner']
append方法 向列表末尾添加一个项目、sort方法,del 删除列表中的一个元素,指定列表,第几个元素
元组也是一个序列,元组和字符串一样是不可变的
元组通过圆括号中用逗号分割的项目定义
含有0个项目的元组 empty = ()
含有1个项目的元组 myone = (2,) 项目后必须跟一个逗号
元组最常用的用法是用在打印语句中---- %s 表
例如 zoo = ('apple','people')
字典,由键和值组成的序列,中间用冒号,一般称为json
d = {key1:value1,key2:value2}
字典是dict类的实例/对象
字典的items()方法,for in 循环
for name,address in ab.items(): 打印键和值
a in ab: 检测一个键值是否存在
序列
列表、元组、和字符串都是序列,序列的特点就是 索引操作符 和 切片操作符,
索引就是从序列中抓取特定项目
切片操作符让我们能够获取序列的一个切片,即一部分序列
变量名指定计算机中存储那个对象的内存,这被称作名称到对象的绑定
【序列的神奇:可以用相同的方法访问元组、列表和字符串】
根据索引取得序列中的值,可以是负数,-1 是最后一个元素
切片操作符 是 序列名后跟一个方括号,方括号中有一对可选的数字,数是可选的,冒号是必须的
冒号之前的数表示切片开始的位置,冒号之后的数表示到哪里结束,开始位置被包含在序列切片中,结束位置被包含在序列切片外
[:] 返回整个序列的拷贝
列表的赋值语句不创建拷贝,必须使用切片操作符list[:]来创建序列的拷贝
[:] 这种写法是拷贝当前对象,赋值的化是引用
字符串也是对象,在程序中使用的字符串是str类的对象
startswith() 测试字符串是否以给定字符串开始 name.startwith("war")
in 用来检验给定字符串是否为另一个字符串的一部分 a in name
find 找出给定字符串在另一个字符串中的位置,返回-1 表示找不到子字符串
join() 将序列用分隔符拼接的字符串 分隔符.join(序列)
python 备份程序
使用 os模块、time模块
time.strftime() 定制时间%Y%m%d%H%M%S
zip -q 表是zip命令安静的工作 -r 表示zip命令对目录递归的工作
os.path.exists 检验是否有以当前日期作为名称的目录
os.mkdir 创建目录
os.sep变量用法 根据操作系统给出目录分隔符,window \ linux / ,具有可移植性
os.system() 运行命令 命令运行成功,返回0
最理想的创建备份的方法是使用 zipfile 和 tarfile
软件开发过程
1,什么(分析)
2,如何(设计)
3,编写(实施)
4,测试(测试与调试)
5,使用(实施或开发)
6,维护(优化)
9,面向对象
属于一个对象或类的变量被称为域,
域和方法合称为类的属性
类使用class创建,类的域和方法被列在一个缩进块中
对象本身 self
类的方法必须有一个额外的第一个参数名称 self
假如一个类为 MyClass 和这个类的实例 MyObject
python 调用对象方法 MyObject.method(arg1,arg2)
会由python自动转为 MyClass.method(MyObject, arg1, arg2) ,
__init__ 方法,对象初始化操作,类的对象被建立时,马上运行
__del__ 方法,对象消逝的时候被运行
def __init__(self)
def __del__(self)
类与对象的方法
两种类型的域:类的变量和对象的变量
类的变量由一个类的所有对象共享使用
对象的变量由类的每个实例拥有
__privatevar 私有变量
只想在类或对象中使用 应该以单下划线前缀
继承---通过继承,提高代码的重用性
class Children(Parent): 继承父类
python 不会自动继承基类的 constructor ,这里指__init__
__base__
输入/输出
使用file类的对象打开一个文件,file("open.txt","w")
'r' 读模式,'w' 写模式,'a' 追加模式
write() 方法写入文件
close 关闭文件,readline() 方法来读文件的每一行
储存器====储存和取储存
python提高的一个标准模块,称为pickle,可以持久的储存对象,完美无缺的取出来
还有另一个模块称为 cpickle,和pickle功能一样,比pickle快1000倍
import cpickle as p 使用更短的模块名
p.dump(filelist,f)
用储存器模块的dump函数,把对象储存到打开的文件中,这个过程称为储存
p.load(f)
使用 pickle模块的load函数的返回来取回对象,这个过程称为取储存
异常
错误是由错误处理器所做的工作
处理异常
try .. except
把可能引发错误的语句放入try中
把错误处理语句放入 except中
except 可以处理单一的错误与异常
如果没有给出错误或异常的名称,它会处理所有的错误和异常
引发异常:
使用raise语句引发异常,Error 或 Exception类
try..finally
在一个try块下,可以同时使用except从句和finally块
python 标准库
python标准库是随python附带安装的,包含大量及其有用的模块
sys模块包含系统对应的功能
os模块包含普遍的操作系统功能
os.name 显示你正在使用的平台
os.system 函数用来运行shell命令
os.path.split 函数返回一个路径的目录和文件名,返回元组
os.path.isfile() 检验给出的路径是否是一个文件
os.path.isdir() 检验给出的路径是否是一个目录
os.path.exists() 检验给出的路径真的存在
*********************************************************************************************************
软件开发过程
1,什么(分析)
2,如何(设计)
3,编写(实施)
4,测试(测试与调试)
5,使用(实施或开发)
6,维护(优化)
我想要一个可以为我的所有重要文件创建备份的程序
我们如何确定该备份哪些文件?备份保存在哪里?我们怎么样存储备份?
1,需要备份的文件和目录由一个列表指定。
2,备份应该保存在主备份目录中。
3,文件备份成一个zip文件。
4,zip存档的名称是当前的日期和时间。
5,我们使用标准的zip命令,它通常默认地随Linux/Unix发行版提供。
Windows用户可以使用Info-Zip程序。注意你可以使用任何地存档命令,只要它有命令行界面就可以了,那样的话我们可以从我们的脚本中传递参数给它。