1、第1章 基础知识,1,课程概要,主要内容: 基础知识 数据结构 字符串与正则表达式 函数 面向对象程序设计 文件和异常处理 GUI编程 数据库编程 多媒体编程 教材: 董付国,Python程序设计,清华大学出版社 Magnus Lie Hetland,Python基础教程,人民邮电出版社 Mark Lutz,Python学习手册,机械工业出版社,2,1.1 Python是一种怎样的语言,Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。,Python命名是因为他是一个叫Monty Python的喜剧团体
2、的爱好者。,3,1.1 Python是一种怎样的语言,跨平台和兼容性非常好,可运行在多种计算机平台和操作系统中,如各位unix,windows,MacOS,OS/2等等 自动内存回收。这个特点使得程序员在编程的时候,可以不考虑程序运行中的内存管理,而专注于自己的逻辑处理。 面向对象特性(object_oriented Programming)。,4,1.1 Python是一种怎样的语言,强大的动态数据类型支持,不同数据类型相加会引发一个异常。 强大的类库支持,使编写文件处理、正则表达式,网络连接等程序变得相当容易。 Python的交互命令行模块能方便地进行小代码调试和学习。 Python易于扩
3、展,可以通过C或C+编写的模块进行功能扩展。 系统编程,提供大量系统接口API,能方便进行系统维护和管理。 图形处理,有PIL、Tkinter等图形库支持,能方便进行图形处理。 数学处理,NumPy扩展提供大量与许多标准数学库的接口。 文本处理,Python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用Python进行XML程序的开发。 数据库编程,程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server、Oracle、Sybase、DB2、Mysql等数据库通信。Python自带有一个Gadfly
4、模块,提供了一个完整的SQL环境。,5,6,作为Web应用的开发语言,支持最新的XML技术。 近年来随着游戏产业的兴起,Python开始越来越多的涉足游戏领域。Pygame是Python开发游戏的一个库,关于Pygame具体可参考http:/www.pygame.org网站。,1.1 Python是一种怎样的语言,1.2 Python编辑与运行环境,下载和安装Python http:/www.Python.org 运行Python GUI: 1.命令提示符下C:Python27 helloworld.py 2.默认编程环境IDLE(Integrated Development Environm
5、ent) import helloworld注:紫色的符号是一些方法,橘红色一般是关键字,绿色是文本,红色是注释部分,剩下的就是黑色了 3.Python(command line) import helloworld,其他可选开发环境:wxPython、Jython、Cython,7,1.2 Python编辑与运行环境,查看已安装版本的方法(在所启动的IDLE界面也可以直接看到): import sys sys.version 常用快捷键: Alt+P、Alt+N:浏览历史命令 Ctrl+F6:重启Shell,之前定义的对象全部无效 F1:打开Python帮助文档 Ctrl+、Ctrl+:缩进
6、代码 Alt+3、Alt+4:注释、取消注释,8,关于Python的资源 中文的简明Python教程 http:/ 挑战智商的Python在线测试: http:/www.P 编程趣味学习网站 http:/ Pygame学习网站 http:/www.pygame.org,1.2 Python编辑与运行环境,9,1.3 Python基础知识 1.3.1 Python的对象模型,对象是python语言中最基本的概念,在python中处理的每样东西都是对象。python中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等;非内置对象需要导入模块才能使用,如正弦函数sin(
7、x),随机数产生函数random( )等。,10,1.3.1 Python的对象模型,常用内置对象,11,1.3.2 python的变量和引用,1.变量的创建x=3 创建了变量x,不需要提前声明变量a,b=3,5a,b=b,a 2.引用在python中从变量到对象的连接称为引用。 x=3 变量拥有自己的存储空间,变量连接到对象是该变量存储了对象单元的内存地址,并没有存储对象的值。,12,1.3.2 python的变量和引用,3. 共享引用共享引用是指多个变量引用同一个对象。下面的语句使两个变量都引用同一个对象3 a=3 b=a 使用id函数可以查看对象的内存地址 4.垃圾回收机制对于没有任何变
8、量指向的值,Python自动将其删除。Python跟踪所有的值,并自动删除不再有变量指向的值。,13,1.3.2 python的变量和引用,14,5.内存管理机制 (1)垃圾回收 (2)引用计数 (3)内存池机制,当申请的内存小于256字节时会在内存池中申请内存;当申请的内存大于256字节时,使用malloc申请内存。,1.3.2 python的变量和引用,5.对象类型的动态的,强类型 a=3 type(a) a=4 type(a) a=3,5 type(a) a=1,2,3 type(a) ,15,1.3.2 python的变量和引用,6. 变量命名 以字母或下划线(有特殊含义)开头 变量名
9、中不能有空格以及标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等等) 不要使用关键字(在keyword模块中)作变量名import keywordkeyword.kwlist 不要使用系统内置的模块名或函数名(可以通过dir(_builtins_)查看变量名 大小写敏感,16,1.3.3 数字,数字是python中最常用的对象,属于不可变对象。 可以表示任意大小的数字。 a=99999999999999999999999999999999 a*a 9999999999999999999999999999999800000000000000000000000000000001L a*
10、3 999999999999999999999999999999970000000000000000000000000000000299999999999999999999999999999999L Python的IDEL交互界面可以当做简便计算器来使用。,17,1.3.3 数字,1.4.3.1 整数 十进制整数如,0、-1、9、123 十六进制整数,需要16个数字0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f来表示整数,必须以0x开头,如0x10、0xfa、0xabcdef 八进制整数,只需要8个数字0、1、2、3、4、5、6、7来表示整数,必须以0o开头,如0o35、0o1
11、1 二进制整数、只需要2个数字0、1来表示整数,必须以0b开头如,0b101、0b100,18,1.3.3 数字,1.4.3.2 浮点数 浮点数又称小数, 15.0、0.37、-11.2、1.2e2、314.15e-2,19,1.3.3 数字,1.4.3.3 复数 Python中的复数与数学上的复数一致,由实部和虚部构成,并且使用j或J来表示虚部。 a=3+4j b=5+6j c=a+b c 8+10j c.real #复数的实部 8.0 c.imag #复数的虚部 10.0 a.conjugate() (3-4j),20,1.3.4 字符串,用单引号、双引号或三引号括起来的符号系列称为字符串
12、 单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串。 abc、123、中国、“Python“ 字符串属于不可变序列空串表示为或 “ 三引号或“表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。,21,1.3.4 字符串,1. 字符串合并 a=abc + 123 #生成新对象 2. 字符串格式化把对象按格式要求转换为字符串。 a=3.6674 %7.3f % a #或者直接使用str(a) 3.667,22,1.3.4 字符串,3. 转义字符 n:换行符 t:制表符 r:回车 :单引号 ”:双引号 :一个 ddd:3位八进制数对应的字符 xhh
13、:2位十六进制数对应的字符注:字符串界定符前面加字母r表示原始字符串,其中的特殊字符不进行转义,但字符串的最后一个字符不能是。,23,1.3.5 操作符和表达式,24,1.3.6 常用内置函数,内置函数不需要导入任何模块即可使用 执行下面的命令可以列出所有内置函数 dir(_builtins_),25,1.4.6 常用内置函数,26,1.3.6 常用内置函数,27,1.3.7 对象的删除,Python中删除对象用del语句。del用来删除一个对象,并释放对象所占资源。del的用法演示如下: a=1, 2, 3 del a1 a 1, 3 x=5 x 5 del x #此后x就不存在了,28,1
14、.3.8 基本输入输出,用Python进行程序设计,输入是通过input( )函数来实现的,imput( )的一般格式为: x=input(提示:) 该函数返回输入的对象。可输入数字、字符串和其它任意类型对象。,29,1.3.8 基本输入输出,输出是通过print语句来完成的,print语句的一般格式为: print 对象1, 对象2, . , 对象n 在Python3中,print是函数,而不是语句。,在Python中进行重定向输出的用法: fp = open(rc:mytest.txt,a+) print fp, “Hello,world“ fp.close(),30,1.3.9 模块的使
15、用,Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块。 在Python启动时,仅加载了很少的一部分模块,在需要时由程序员显式地加载(可能需要先安装)其他模块。 减小运行的压力,仅加载真正需要的模块和功能,且具有很强的可扩展性。,31,1.3.9 模块的使用,import 模块名 import math math.sin(0.5) #求0.5的正弦 import random x=random.random( ) #获得0,1) 内的随机小数 y=random.random( ) n=random.randint(1,100) #获得1,100上的随机整数 可以使用di
16、r函数查看任意模块中所有的对象列表,如果调用不带参数的dir()函数,则返回当前脚本的所有名字列表。 可以使用help函数查看任意模块或函数的使用帮助。,32,1.3.9 模块的使用,from math import sin #可以减少查询次数,提高执行速度 from math import * #谨慎使用 from math import sin sin(3) 0.1411200080598672 from math import sin as f #别名 f(3) 0.141120008059867,33,1.3.9 模块的使用,可以使用sys.modules.items()显示所有预加载
17、模块的相关信息 在2.x中可以使用reload函数重新导入一个模块,在3.x中,需要使用imp模块的reload函数 Python首先在当前目录中查找需要导入的模块文件,如果没有找到则从sys模块的path变量所指定的目录中查找。可以使用sys模块的path变量查看python导入模块时搜索模块的路径,也可以向其中append自定义的目录以扩展搜索路径。 在导入模块时,会优先导入相应的pyc文件,如果相应的pyc文件与py文件时间不相符,则导入py文件并重新编译该模块。,34,1.3.9 模块的使用,os sys math Locale:提供了C语言本地化函数的接口,并提供相关函数实现基于当前
18、locale设置的数字与字符串转换 random struct pickle:序列化 datetime time wmi:需安装 tkinter:GUI开发 urllib/urllib2:网页编程 Pygame:游戏开发 tkinter、wxPython:GUI编程 SciPy:科学计算 PIL:图像处理 fabric:远程操作与部署,http:/docs.fabfile.org/en/1.10/ capstone:反汇编框架 ropper:ROP相关框架 IDAPython:IDA插件,https:/ Yara:恶意软件识别与分类引擎,35,1.4 Python代码规范,(1)缩进 类定义、
19、函数定义、选择结构、循环结构,行尾的冒号表示缩进的开始python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。同一个级别的代码块的缩进量必须相同。 一般而言,以4个空格为基本缩进单位。,36,1.4 Python代码规范,(2)注释 一个好的、可读性强的程序一般包含30%以上的注释。常用的注释方式主要有两种:以#开始,表示本行#之后的内容为注释包含在一对三引号之间且不属于任何语句的内容将被解释器认为是注释,37,1.4 Python代码规范,(3)每个import只导入一个模块 (4)如果一行语句太长,可以在行尾加上来换行分成多行,但是更建议使用括号来包含
20、多行内容。 (5)必要的空格与空行 运算符两侧、函数参数之间、逗号两侧建议使用空格分开。 不同功能的代码块之间、不同的函数定义之间建议增加一个空行以增加可读性。 (6)适当使用异常处理结构进行容错,后面将详细讲解。 (7)软件应具有较强的可测试性,测试与开发齐头并进,后面将详细讲解。,38,1.5 Python文件名,.py:Python源文件 .pyc:Python字节码文件。对于Python模块,第一次被导入时将被编译成字节码的形式,以提高脚本的启动速度。对于非模块文件,直接执行时并不生成pyc文件,可以使用py_compile模块的compile函数进行编译。 .pyo:优化的Pytho
21、n字节码文件。可以使用”python O file.py”或”python OO file.py”进行优化编译。,39,1.6 Python程序的运行方式,每个Python脚本在运行时都有一个_name_属性。 如果脚本作为模块被导入,则其_name_属性被设置为模块名;如果脚本独立运行,则其_name_属性被设置为_main_。,40,1.7 编写自己的包与模块,包可以看做处于同一目录中的模块。 在包的每个目录中都必须包含一个_init_.py文件,该文件可以是一个空文件,仅用于表示该目录是一个包。 _init_.py文件的主要用途是设置_all_变量以及所包含的包初始化所需的代码。其中_a
22、ll_变量中定义的对象可以在使用from import *时全部正确导入。,41,1.8 Python快速入门,问题1:用户输入一个三位自然数,计算并输出其佰位、十位和个位上的数字。 x = input(请输入一个三位数:) a = x/100 b = x/10%10 #或 b=x%100/10 c = x - 100*a - 10*b #或c = x%10 print a, b, c,42,1.8 Python快速入门,问题2:已知三角形的两边长及其夹角,求第三边长。 import math x = input(输入两边及夹角(度):) a, b, sita = x c = math.sqr
23、t(a*2 + b*2 - 2*a*b*math.cos(sita*math.pi/180) print c=,c,43,1.8 Python快速入门,上面的代码也可以写成这样,虽然减少了需要输入的代码,但一般不建议这样做: from math import * x = input(输入两边及夹角(度):) a, b, sita = x c = sqrt(a*2 + b*2 - 2*a*b*cos(sita*pi/180) print c=,c,44,1.8 Python快速入门,这样就可以了: from math import sqrt x = input(输入两边及夹角(度):) a, b, sita = x c = sqrt(a*2 + b*2 - 2*a*b*cos(sita*pi/180) print c=,c,45,1.8 Python快速入门,问题3:任意输入三个英文单词,按字典顺序输出。 s = input(x,y,z=) x, y, z = s.split(,) if x y:x, y = y, x if x z:x, z = z, x if y z:y, z = z, y print(x, y, z),46,