Python基础
一、Python简介
Python是一种解释型、交互式、面向对象、初学者的脚本语言。
特点:易学习、易阅读、易维护、广泛的标准库、互动模式、可移植、可扩展、数据库、GUI编程、可嵌入。
二、Python安装
官网下载:Python安装,或这安装Anaconda;常用IDE:pycharm、sublime、jupyter notebook、scrapy。
三、中文编译
首行加:# -- coding: UTF-8 -- 或者 #coding=utf-8。
四、基础语法
(1)标志符:字母、数字、下划线组成,不能以数字开头、区分大小写。
注意:
单下划线开头:表示不能直接访问的类属性,需通过类提供的接口访问,不能用from xxx import *导入。
双下划线开头:代表类的私有成员
双下划线开头结尾:特殊专用标识。init()代表构造函数。
(2)保留字符:
(3)多行语句:
加“\”,有[]、{}、()的不用加’\’。
(4)引号:
‘ ’,” ”,’’’ ’’’。
(5)注释:
单行:#。多行:’’’ ’’’。
(6)同一行多条语句:分号隔开。
五、变量类型
变量在赋值过程,根据数据类型,自动分配内存。
(1) 赋值:=
(2) 多个变量赋值:a = b = c = 1, a, b, c = 1, 2, “john”
(3) 数据类型:Numbers(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)。
(4) 数字:number对象的创建:var1 = 1,删除:del var1。数字类型:int、long、float、complex。
(5) 字符串:从左到右索引默认0开始。从右到左索引默认-1开始。
(6) 列表:[头下标:尾下标],删除del。常用函数:cmp、len、max、min、list、append、count、extend、index、insert、pop、remove、reverse、sort。
(7) 元组:(),不能二次赋值。可以连接组合、删除del。函数:cmp、len、max、min、tuple。
(8) 字典:{},删除del,常用函数:cmp、len、str、type、clear、copy、fromkeys、get、has_key、items、keys、setdefault、update、values、pop、popitem。
(9) 数据类型转换:
六、运算符
(1)算术运算符
(2)比较运算符
(3)赋值运算符
(4)位运算符
(5)逻辑运算符
(6)成员运算符
(7)身份运算符
七、条件语句
if 判断条件: if 判断条件:
执行语句 执行语句
else: elif 判断条件:执行语句
执行语句 else: 执行语句
八、循环语句
While循环、for循环、嵌套循环。循环控制语句:break、continue、pass。
九、Number(数字)
类型:Int、long、float、complex。
模块:math:浮点数的数学运算函数。cmath:用于复数运算函数。dir(math)显示模块函数。
十、字符串
(1) 初始化:var1 = ‘Hello World!’,更新以及访问:同列表。
(2) 转义字符:\:续行符,\:反斜杠符号,\’:单引号,\”:双引号,\a:响铃,\b:退格,\e:转义,\000:空,\n:换行,\v:纵向制表符,\t:横向制表符,\r:回车,\f:换页,\oyy:八进制数,yy代表的字符,\xyy:十六进制,\other:其它的字符以普通格式输出。
(3) 字符串运算符:+:字符串连接,:重复输出字符串,[]:通过索引获取字符串中字符,[:]:截取字符串中的一部分,in:成员运算符,not in:成员运算符,r/R:原始字符串,所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符,%:格式字符串。
(4) 字符串格式化:%c:格式化字符及其ASCII码,%s:格式化字符串,%d:格式化整数,%u:格式化无符号整型,%o:格式化无符号八进制,%x:格式化无符号十六进制数,%X:格式化无符号十六进制数(大写),%f:格式化浮点数字,%e或%E:用科学计数法格式化浮点数,%g:%f和%e的简写,%G:%f和%E的简写,%p:用十六进制数格式化变量的地址。
辅助指令::定义宽度或者小数点精度,-:用做左对齐,+:在正数前面显示加号( + ),:在正数前面显示空格,#:在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’),0:显示的数字前面填充’0’而不是默认的空格,%:’%%‘输出一个单一的’%’,(var):映射变量(字典参数),m.n.:m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)。2.6版本以后,str.format()
(5) u’’:unicode编码。
(6) 内建函数:capitalize、center、count、decode、encode、endswith、expandtabs、find、format、index、isalnum、isalpha、isdecimal、isdigit、islower、isnumeric、isspace、islittle、isupper、join、ljust、lower、lstrip、maketrans、max、min、partition、replace、rfind、rindex、rjust、rpartition、rstrip、split、splitlines、startswith、strip、swapcase、title、translate、upper、zfill。
十一、日期和时间
时间戳:time.time(),获取当前时间:time.localtime(time.time()),获取格式化时间:time.asctime(time.localtime(time.time())),格式化日期:time.strftime(format,t),获取某月日历:calendar.month()。
(1) Time模块,
(2)Calendar模块
(3)其他相关模块和函数
Datetime模块、pytz模块、dateutil模块。
十二、函数
(1) 函数定义:def fun():
(2) 函数调用:fun()
(3) 参数传递:可变参数、不可变参数
(4) 参数:缺省参数(缺省参数的值如果没有传入,则被认为是默认值),不定长参数:def functionname([formal_args,] *var_args_tuple ):
(5) 匿名函数:lambda arg1, arg2: arg1 + arg2。
十三、模块
(1) 模块导入:import module,调用module.func();from import,调用func()。
(2) 搜索顺序:1、当前目录,2、PYTHONPATH下的每个目录,3、察看默认路径,UNIX下,默认路径一般为/usr/local/lib/python/。
(3) globals()和locals()用来返回全局和局部命名空间里的名字。reload()重新导入之前导入过的模块。
(4)包是一个文件夹,文件夹下必须存在__init__.py文件,这个文件的内容可以为空。
十四、文件I/O
(1) 读取键盘输入:raw_input只能传入字符串,input可以接受一个表达式。
(2) 打开文件:open函数,
(3) file的属性:
(4) 关闭文件:close函数
(5) 写入:write(),写入字符串
(6) 读取一个字符:read()。
(7) 重命名和删除文件:rename,remove
(8) 目录:os.mkdir(),os.chdir()改变目录,os.rmdir()删除目录。
十五、异常处理
(1)try-except
(2)try-finally:无论是否发生异常都将执行最后的代码,try finally raise
(3)触发异常:raise,触发异常后,后面的代码就不会执行。
十六、OS 文件/目录方法
os.access(path,mode):检验权限模式。os.chdir(path):改变当前工作目录。
Os.chflags(path,flags):设置路径的标记为数字标记,os.chmod(path,mode):更改权限。
os.chown(path, uid, gid):更改文件所有者。os.chroot(path):改变当前进程的根目录。
os.close(fd):关闭文件描述符 fd。os.closerange(fd_low, fd_high):关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略。
os.dup(fd):复制文件描述符 fd。os.dup2(fd, fd2):将一个文件描述符 fd 复制到另一个 fd2。
os.fchdir(fd):通过文件描述符改变当前工作目录。os.fchmod(fd, mode):改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
os.fchown(fd, uid, gid):修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
os.fdatasync(fd):强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
os.fdopen(fd[, mode[, bufsize]]):通过文件描述符 fd 创建一个文件对象,并返回这个文件对象。
os.fpathconf(fd, name):返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98,和其它)。
os.fstat(fd):返回文件描述符fd的状态,像stat()。
os.fstatvfs(fd):返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()。
os.fsync(fd):强制将文件描述符为fd的文件写入硬盘。
os.ftruncate(fd, length):裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
os.getcwd():返回当前工作目录。
os.getcwdu():返回一个当前工作目录的Unicode对象。
os.isatty(fd):如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
os.lchflags(path, flags):设置路径的标记为数字标记,类似 chflags(),但是没有软链接。
os.lchmod(path, mode):修改连接文件权限。
os.lchown(path, uid, gid):更改文件所有者,类似 chown,但是不追踪链接。
os.link(src, dst):创建硬链接,名为参数 dst,指向参数 src。
os.listdir(path):返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.lseek(fd, pos, how):设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效。
os.lstat(path):像stat(),但是没有软链接。
os.major(device):从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
os.makedev(major, minor):以major和minor设备号组成一个原始设备号。
os.makedirs(path[, mode]):递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
os.minor(device):从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
os.mkdir(path[, mode]):以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
os.mkfifo(path[, mode]):创建命名管道,mode 为数字,默认为 0666 (八进制)
os.mknod(filename[, mode=0600, device]):创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
os.open(file, flags[, mode]):打开一个文件,并且设置需要的打开选项,mode参数是可选的
os.openpty():打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
os.pathconf(path, name):返回相关文件的系统配置信息。
os.pipe():创建一个管道. 返回一对文件描述符(r, w) 分别为读和写。
os.popen(command[, mode[, bufsize]]):从一个 command 打开一个管道
os.read(fd, n):从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
os.readlink(path):返回软链接所指向的文件。
os.remove(path):删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
os.removedirs(path):递归删除目录。os.rename(src, dst):重命名文件或目录,从src到dst。
os.renames(old, new):递归地对目录进行更名,也可以对文件进行更名。
os.rmdir(path):删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.stat(path):获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
os.stat_float_times([newvalue]):决定stat_result是否以float对象显示时间戳
os.statvfs(path):获取指定路径的文件系统统计信息
os.symlink(src, dst):创建一个软链接
os.tcgetpgrp(fd):返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
os.tcsetpgrp(fd, pg):设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
os.tempnam([dir[, prefix]]):返回唯一的路径名用于创建临时文件。
os.tmpfile():返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
os.tmpnam():为创建一个临时文件返回一个唯一的路径。
os.ttyname(fd):返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
os.unlink(path):删除文件路径。os.utime(path, times):返回指定的path文件的访问和修改的时间。
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]):输出在文件夹中的文件名通过在树中游走,向上或者向下。
os.write(fd, str):写入字符串到文件描述符 fd中. 返回实际写入的字符串长度。
os.path 模块:获取文件的属性信息。
十七、内置函数
十八、面向对象
(1) 创建类:self代表类的实例,而非类。
(2) 创建实例对象,访问属性。
• getattr(obj, name[, default]) : 访问对象的属性。
• hasattr(obj,name) : 检查是否存在一个属性。
• setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
• delattr(obj, name) : 删除属性。
(3) 内置类属性
dict:类的属性(包含一个字典,由类的数据属性组成)。
doc:类的文档字符串。
name:类名
module:类定义所在的模块
bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)。
(4)init:构造函数,del:析构函数。del 对象实例。
(5)类的继承:class 类名(父类)
(6)方法重写
(7)单下划线:_foo:以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *。
foo:定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
十九、正则表达式
(1) re.match(pattern,string,flags=0):尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。group(num)和groups:获取匹配表达式。
(2) re.search(pattern,string,flags=0):扫描整个字符串并返回第一个成功的匹配。
(3) re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
(4) re.sub用于替换字符串中的匹配项。re.sub(pattern, repl, string, count=0, flags=0)
(5) compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
(6) findall(string[, pos[, endpos]]) 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
(7) re.finditer(pattern, string, flags=0) 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
(8) re.split(pattern,string,flags=0) 法按照能够匹配的子串将字符串分割后返回列表。
(9) start()返回匹配开始的位置,end()返回匹配结束的位置,span()返回一个元组包含匹配(开始,结束)的位置。
二十、CGI编程
二十、 CGI编程
(1)网页浏览:A、使用你的浏览器访问URL并连接到HTTP web 服务器。B、Web服务器接收到请求信息后会解析URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。C、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。
(2)CGI架构:
二十一、网络编程
使用socket类
二十二、多线程
(1) thread.start_thread(function,args,kwargs)创建新线程。
(2) 线程模块:
(3)线程同步
(4)线程优先级
二十三、GUI
Python GUI常用库:Tkinter、wxPython、Jython。
(1) 创建:
(2) 组件:
(3) 标准属性
(4) 几何管理
二十四、 Python 2.x和Python 3.x的区别
(1) print 3.0必须有括号。
(2) python2 默认Unicode,python3 默认UTF-8。
(3) python2的整数相除结果为整数,python3的相除都为浮点形式。
(4) python2捕获异常的语法:except exc,var。python3捕获异常的语法:except exc as var。
(5) python2中有xrange,且速度优于range,python3中只有range,用xrange会出现异常。
(6) python2 的八进制:0o开头或0开头,python3只有:0o。
(7) python2中的不等于有:!=和<>,python 3:!=。
(8) Python3中没有long类型,新增了bytes类型。.encode() (str -> bytes) or .decode() (bytes -> str)
二十五、 Python 中的装饰器、迭代器、生成器
(1)装饰器–闭包:
闭包定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)
(2)装饰器
现在有如下一段代码,需要测算出代码的执行时间。
对功能进行扩展:
由于代码执行太快,使用sleep暂停2s,此次修改没有执行开放封闭原则,修改了原代码。
此次修改改变了调用方式,差评!
利用装饰器,函数相当于被作为参数传入。
(3)生成器
生成器的作用:A、主要为了减少内存,不用像列表一样,需要保存所有历史纪录。B、下一次的迭代的参数均是由上一次迭代保留下来的参数。
生成器的两种方法:
A、(x*x for x in range(10))使用()替换[],
B、使用yield,每次调用完函数,函数会挂起在这一次的位置。下次调用的时候,使用这一次的参数。
缺点:只能遍历一次。
next()和next()逐个访问生成器,send()向生成器发送一个参数,返回包含这个参数和生成器原有的参数构成的新的生成器。
(4)迭代器
迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器只能往前不能后退。
可迭代对象:list 、tuple、dict、set、str 等,以及生成器和带yield的generator function。
如何判断: from collections import Iterable isinstance([ ],Iterable)
迭代器:迭代器是可以被next() 函数调用并不断返回下一个值的对象称为迭代器。因此生成器是迭代器的子类,但是注意集合类型的可迭代对象不是迭代器。iter()函数:将可迭代对象转换成迭代器。