1、第第1 1章基础知识章基础知识1.0 Python是一种怎样的语言 解释型语言,伪编译 胶水语言 开源 跨平台 免费、自由软件 强类型、动态类型 自动内存管理 面向对象 有大量可用的库 增加其他语言编写并编译的模块即可扩展功能1.1 Python版本之争版本之争 2.x:一边鄙视一边用 3.x:必然的趋势 多版本共存与切换简便方法:更改系统环境变量path 查看已安装版本的方法(在所启动的IDLE界面也可以直接看到): import sys sys.version2.7.8 (default, Jun 30 2014, 16:08:48) MSC v.1500 64 bit (AMD64) s
2、ys.version_infosys.version_info(major=2, minor=7, micro=8, releaselevel=final, serial=0)1.2 安装Pythonhttps:/www.python.org/https:/www.python.org/doc/http:/bugs.python.org/https:/ Alt+P、Alt+N:浏览历史命令 Ctrl+F6:重启Shell,之前定义的对象全部无效 F1:打开Python帮助文档 Alt+/:自动补全前面曾经出现过的单词,在多个单词中循环选择 Ctrl+、Ctrl+:缩进代码 Alt+3、Alt+
3、4:注释、取消注释其他可选开发环境:wxPython、Jython、1.3 使用pip管理第三方包 Python2中需要单独安装 下载地址:https:/pypi.python.org/pypi/pip 安装方法:cmd=python get-pip.py 用法示例pip install NumPypip listpip install -upgrade SomePackagepip uninstall SomePackage Python3安装包中已默认包含pip1.4 Python基础知识基础知识1.4.1 Python的对象模型的对象模型对象是python语言中最基本的概念,在pytho
4、n中处理的每样东西都是对象。python中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等;非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random( )等。1.4.1 Python的对象模型的对象模型 常用内置对象1. 1.4 4.2 python.2 python的变量和引用的变量和引用1.变量的创建变量的创建 x=3 创建了变量x,不需要提前声明变量 a,b=3,5 a,b=b,a2.引用引用 在python中从变量到对象的连接称为引用。x=3变量拥有自己的存储空间,变量连接到对象是该变量存储了对象单元的内存地址,并没有存储对象的
5、值。x3变量对象引用1. 1.4 4.2 python.2 python的变量和引用的变量和引用3. 共享引用共享引用 共享引用是指多个变量引用同一个对象。下面的语句使两个变量都引用同一个对象3a=3b=a使用id函数可以查看对象的内存地址4.垃圾回收机制 对于没有任何变量指向的值,Python自动将其删除。Python跟踪所有的值,并自动删除不再有变量指向的值。1. 1.4 4.2 python.2 python的变量和引用的变量和引用5.对象类型的动态的,强类型 a=3 type(a) a=4 type(a) a=3,5 type(a) a=1,2,3 type(a)1. 1.4 4.2
6、python.2 python的变量和引用的变量和引用6. 变量命名 以字母或下划线(有特殊含义)开头 变量名中不能有空格以及标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等等) 不要使用关键字(在keyword模块中)作变量名 不要使用系统内置的模块名或函数名(可以通过dir(_builtins_)查看)作变量名 大小写敏感1.4.3 数字 数字是python中最常用的对象,属于不可变对象。 可以表示任意大小的数字。 a=99999999999999999999999999999999 a*a99999999999999999999999999999998000000000000
7、00000000000000000001L a*3999999999999999999999999999999970000000000000000000000000000000299999999999999999999999999999999LPython的IDEL交互界面可以当做简便计算器来使用。1.4.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来表示整数,必须以0 x开头,如0 x10、0 xfa、0 xabcdef 八进制整数,只需要8个数字0、1、2、3、4、5、6、7来表
8、示整数,必须以0o开头,如0o35、0o11 二进制整数、只需要2个数字0、1来表示整数,必须以0b开头如,0b101、0b1001.4.3 数字1.4.3.2 浮点数 浮点数又称小数, 15.0、0.37、-11.2、1.2e2、314.15e-21.4.3 数字1.4.3.3 复数Python中的复数与数学上的复数一致,由实部和虚部构成,并且使用j或J来表示虚部。a=3+4jb=5+6jc=a+bc8+10j c.real #复数的实部8.0 c.imag#复数的虚部10.0 a.conjugate()(3-4j)1.4.4 字符串 用单引号、双引号或三引号括起来的符号系列称为字符串 单引
9、号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串。 abc、123、中国、Python 字符串属于不可变序列 空串表示为或 三引号或表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。1.4.4 字符串1. 字符串合并字符串合并 a=abc + 123 #生成新对象2. 字符串格式化字符串格式化 把对象按格式要求转换为字符串。a=3.6674%7.3f % a #或者直接使用str(a) 3.6671.4.4 字符串3. 转义字符转义字符 n:换行符:换行符 t:制表符:制表符 r:回车:回车 :单引号:单引号 ”:双引号:双引号 :一个:一个 d
10、dd:3位八进制数对应的字符位八进制数对应的字符 xhh:2位十六进制数对应的字符位十六进制数对应的字符 字符串界定符前面加字母r表示原始字符串,其中的特殊字符不进行转义,但字符串的最后一个字符不能是。1.4.5 操作符和表达式操 作 符描 述x+y , x-y加法字符串合并 , 减法集合差集x*y , x/y , x/y , x%y乘法重复,除法,求整商,余数格式化(对实数可以进行整除和余数运算)x*y幂运算xy , xy , x=y大小比较,集合的包含关系比较x=y , x!=y相等比较(值),不等比较x or y逻辑或 (只有x为假才会计算y)x and y逻辑与(只有x为真才会计算y)
11、not x逻辑非x in y, x not in y成员与集合的关系x is y, x is not y对象实体测试(地址)|、&、位运算符1.4.6 常用内置函数 内置函数不需要导入任何模块即可使用 执行下面的命令可以列出所有内置函数 dir(_builtins_)1.4.6 常用内置函数函 数功 能abs(x)返回数字x的绝对值bin(x)把数字x转换为二进制串chr(x)返回编码为x的字符eval(s, globals, locals)计算字符串中表达式的值并返回float(x)把数字或字符串x转换为浮点数并返回help(obj)返回对象obj的帮助信息hex(x)把数字x转换为十六进制
12、串id(obj)返回对象obj的标识input(提示串)接受键盘输入,返回字符串len(obj)返回对象obj包含的元素个数1.4.6 常用内置函数oct(x)把数字x转换为八进制串ord(s)返回1个字符s的编码。chr(ord(3)+1)=4range(start, end , step )返回一个等差数列,不包括终值round(x , 小数位数)对x进行四舍五入。若不指定小数位数,则返回整数。str(obj)把对象obj转换为字符串int(x,d)返回数字整数部分,或把d进制的字符串x转换为十进制并返回,d默认为十进制list(x), set(obj),tuple(x)把对象转换为列表、
13、集合或元组并返回max(x), min(x), sum(x)返回序列中的最大值、最小值或数值之和pow(x,y)返回x的y次方sorted(列表,cmp,keyreverse返回排序后的列表type(obj)返回对象obj的类型1.4.7 对象的删除Python中删除对象用del语句。del用来删除一个对象,并释放对象所占资源。del的用法演示如下:a=1, 2, 3del a1a1, 3x=5x5del x #此后x就不存在了 1.4.8 基本输入输出用Python进行程序设计,输入是通过input( )函数来实现的,imput( )的一般格式为:x=input(提示:)该函数返回输入的对象
14、。可输入数字、字符串和其它任意类型对象。1.4.8 基本输入输出输出是通过print语句来完成的,print语句的一般格式为:print 对象1, 对象2, . , 对象n在Python3中,print是函数,而不是语句。1.4.8 基本输入输出在Python2.7.8之前的版本中进行重定向输出的用法: fp = open(rc:mytest.txt,a+) print fp, Hello,world fp.close()在Python 3.4.2版本中进行重定向输出的用法: fp = open(rd:mytest.txt, a+) print(Hello,world!, file = fp)
15、 fp.close()1.4.9 模块的使用 Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块,pip是管理模块的重要工具。 在Python启动时,仅加载了很少的一部分模块,在需要时由程序员显式地加载(可能需要先安装)其他模块。 减小运行的压力,仅加载真正需要的模块和功能,且具有很强的可扩展性。1.4.9 模块的使用 import 模块名import mathmath.sin(0.5) #求0.5的正弦import randomx=random.random( ) #获得0,1) 内的随机小数y=random.random( )n=random.randint(1,1
16、00) #获得1,100上的随机整数 可以使用dir函数查看任意模块中所有的对象列表,如果调用不带参数的dir()函数,则返回当前脚本的所有名字列表。 可以使用help函数查看任意模块或函数的使用帮助。1.4.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.1411200080598671.4.9 模块的使用 可以使用sys.modules
17、.items()显示所有预加载模块的相关信息 在2.x中可以使用reload函数重新导入一个模块,在3.x中,需要使用imp模块的reload函数 Python首先在当前目录中查找需要导入的模块文件,如果没有找到则从sys模块的path变量所指定的目录中查找。可以使用sys模块的path变量查看python导入模块时搜索模块的路径,也可以向其中append自定义的目录以扩展搜索路径。 在导入模块时,会优先导入相应的pyc文件,如果相应的pyc文件与py文件时间不相符,则导入py文件并重新编译该模块。1.4.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:恶意软件识别与分类引擎1. 1.5 5 Python Py
19、thon代码规范代码规范(1)缩进 类定义、函数定义、选择结构、循环结构,行尾的冒号表示缩进的开始 python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。 同一个级别的代码块的缩进量必须相同。 一般而言,以4个空格为基本缩进单位,可以通过下面的方法进行代码块的缩进和反缩进:FortmatIndent Region/Dedent Region1. 1.5 5 Python Python代码规范代码规范(2)注释一个好的、可读性强的程序一般包含30%以上的注释。常用的注释方式主要有两种: 以#开始,表示本行#之后的内容为注释 包含在一对三引号.或.之间且不属
20、于任何语句的内容将被解释器认为是注释在IDLE开发环境中,可以通过下面的操作快速注释/解除注释大段内容: FormatComment Out Region/Uncomment Region1. 1.5 5 Python Python代码规范代码规范(3)每个import只导入一个模块(4)如果一行语句太长,可以在行尾加上来换行分成多行,但是更建议使用括号来包含多行内容。(5)必要的空格与空行 运算符两侧、函数参数之间、逗号两侧建议使用空格分开。 不同功能的代码块之间、不同的函数定义之间建议增加一个空行以增加可读性。(6)适当使用异常处理结构进行容错,后面将详细讲解。(7)软件应具有较强的可测试
21、性,测试与开发齐头并进,后面将详细讲解。1.6 Python文件名 .py:Python源文件 .pyc:Python字节码文件。对于Python模块,第一次被导入时将被编译成字节码的形式,以提高脚本的启动速度。对于非模块文件,直接执行时并不生成pyc文件,可以使用py_compile模块的compile函数进行编译。 .pyo:优化的Python字节码文件。可以使用”python O file.py”或”python OO file.py”进行优化编译。1.7 Python程序的运行方式 每个Python脚本在运行时都有一个_name_属性。 如果脚本作为模块被导入,则其_name_属性被设
22、置为模块名;如果脚本独立运行,则其_name_属性被设置为_main_。1.8 编写自己的包与模块 包可以看做处于同一目录中的模块。 在包的每个目录中都必须包含一个_init_.py文件,该文件可以是一个空文件,仅用于表示该目录是一个包。 _init_.py文件的主要用途是设置_all_变量以及所包含的包初始化所需的代码。其中_all_变量中定义的对象可以在使用from import *时全部正确导入。1.9 Python快速入门 问题1:用户输入一个三位自然数,计算并输出其佰位、十位和个位上的数字。x = input(请输入一个三位数:)a = x/100b = x/10%10 #或 b=x
23、%100/10c = x - 100*a - 10*b #或c = x%10print a, b, c1.9 Python快速入门 问题2:已知三角形的两边长及其夹角,求第三边长。import mathx = input(输入两边及夹角(度):)a, b, sita = xc = math.sqrt(a*2 + b*2 - 2*a*b*math.cos(sita*math.pi/180)print c=,c1.9 Python快速入门 上面的代码也可以写成这样,虽然减少了需要输入的代码,但一般不建议这样做:from math import *x = input(输入两边及夹角(度):)a, b
24、, sita = xc = sqrt(a*2 + b*2 - 2*a*b*cos(sita*pi/180)print c=,c1.9 Python快速入门 这样就可以了:from math import sqrtx = input(输入两边及夹角(度):)a, b, sita = xc = sqrt(a*2 + b*2 - 2*a*b*cos(sita*pi/180)print c=,c1.9 Python快速入门 问题3:任意输入三个英文单词,按字典顺序输出。s = input(x,y,z=)x, y, z = s.split(,) if x y: x, y = y, x if x z: x
25、, z = z, xif y z: y, z = z, yprint(x, y, z)1.10 The Zen of Python Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases arent speci
26、al enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one- and preferably only one -obvious way to do it. Although that way may not be obvious at first unless youre Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, its a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea - lets do more of those!
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。