第1章Python开发环境搭建与使用.pptx
第第1 1章章 Python Python开开发环发环境搭建与使用境搭建与使用董付国董付国微信公众号:微信公众号:PythonPython小屋小屋本章学习目标了解Python语言的应用领域了解Python语言的特点熟练安装Python和Anaconda3熟练安装Python扩展库了解IDLE、Jupyter Notebook和Spyder这几个开发环境的简单使用了解标准库对象和扩展库对象的导入和使用方法以及常见问题和解决方法了解Python代码编写规范1.1 Python语言特点与应用领域经过30年的发展,目前Python已经渗透到几乎所有领域,包括但不限于:计算机安全、网络安全、软件漏洞挖掘、软件逆向工程、软件测试与分析、电子取证、密码学数据采集、数据分析与处理、机器学习、深度学习、自然语言处理、推荐系统构建统计分析、科学计算、符号计算、可视化计算机图形学、图像处理、音乐编程、语音识别、视频采集、视频处理、动画制作、游戏设计与策划网站开发、套接字编程、网络爬虫、系统运维树莓派、无人机、移动终端应用开发、电子电路设计辅助教育、辅助设计、办公自动化1.1 Python语言特点与应用领域Python是一门跨平台、开源、免费的解释型高级动态编程语言,是一种通用编程语言。除了可以解释执行之外,Python还可以把源代码伪编译为字节码来优化程序提高加载速度并对源代码进行一定程度的保密,也支持使用py2exe、pyinstaller、cx_Freeze、py2app或其他类似工具将Python程序及其所有依赖库打包为特定平台上的可执行文件,从而可以脱离Python解释器环境和相关依赖库在其他同类平台上独立运行,同时也可以起到更好的源码保护作用。1.1 Python语言特点与应用领域与其他编程语言相比,Python语言具有非常明显的特点和优势,例如:以快速解决问题为主要出发点,不涉及过多计算机底层知识,需要记忆的语言细节少,可以快速入门。支持命令式编程、函数式编程、面向对象程序设计等模式。语法简洁清晰,代码布局优雅,可读性和可维护性强。内置数据类型、内置模块和标准库提供了大量功能强大的操作。拥有大量的几乎支持所有领域应用开发的成熟扩展库和狂热支持者。1.2 Python安装与IDLE简单使用1.2 Python安装与IDLE简单使用1.2 Python安装与IDLE简单使用1.2 Python安装与IDLE简单使用1.2 Python安装与IDLE简单使用IDLE快捷键快捷键快捷键功能说明功能说明Alt+P查看上一条执行过的语句Alt+N查看下一条执行过的语句Ctrl+F6重启Shell,之前定义的对象和导入的模块全部失效F1打开Python帮助文档Alt+/自动补全前面曾经出现过的单词,如果之前有多个单词具有相同前缀,则在多个单词中循环选择Ctrl+缩进代码块Ctrl+取消代码块缩进Alt+3注释代码块Alt+4取消代码块注释Tab代码补全或代码块缩进1.2 Python安装与IDLE简单使用使用IDLE运行程序1.2 Python安装与IDLE简单使用在IDLE中执行程序时提供命令行参数import sys#接收多个命令行参数,相邻参数之间使用空格分隔names=sys.argv1:#循环结构,处理每个参数for name in names:print(f你好,name)1.3 Anaconda3安装与Jupyter Notebook、Spyder简单使用1.3 Anaconda3安装与Jupyter Notebook、Spyder简单使用1.3 Anaconda3安装与Jupyter Notebook、Spyder简单使用1.4 在PowerShell或命令提示符环境运行Python程序#内置函数input()用于接收用户的键盘输入name=input(输入你的名字:)#字符串前面加字母f表示对其中大括号里的内容进行替换和格式化print(fname 你好,欢迎加入Python的奇妙世界!)1.4 在PowerShell或命令提示符环境运行Python程序1.5 安装扩展库-1.5.1 基本概念在Python中,有内置模块、标准库和扩展库之分。内置模块和标准库是Python官方的标准安装包自带的,内置模块没有对应的文件,可以认为是封装在Python解释器主程序中的;标准库有对应的Python程序文件,这些文件在Python安装路径中的Lib文件夹中。1.5 安装扩展库-1.5.1 基本概念1.5.2 安装扩展库pip命令示例命令示例说说明明pip freeze列出已安装模块及其版本号pip install SomePackage=version在线安装SomePackage模块,可以指定扩展库版本,如果不指定则默认安装最新版本,使用时把SomePackage替换为实际的扩展名名称,例如jieba、pillow、pypinyinpip install SomePackage.whl通过whl文件离线安装扩展库pip install-upgrade SomePackage升级SomePackage模块到最新版本pip uninstall SomePackage卸载SomePackage模块1.5.2 安装扩展库1.5.3 常见问题与解决方法(1)在线安装失败1)网络不好导致下载失败,2)需要本地安装有正确版本的VC+编译环境,3)扩展库暂时还不支持自己使用的Python版本。对于第一种错误,可以多尝试几次、指定国内源或下载whl文件离线安装。如果出现第二种错误,可以在本地安装合适版本的VC+编译器或者下载whl文件离线安装。对于第三种错误,可以尝试找一下有没有第三方编译好的whl文件可以下载然后离线安装。1.5.3 常见问题与解决方法pip install psutil-5.6.7-cp38-cp38-win_amd64.whl1.5.3 常见问题与解决方法如果由于网速问题导致在线安装速度过慢的话,pip命令支持指定国内的站点来提高速度,下面的命令用来从阿里云服务器下载安装扩展库jieba,其他服务器地址可以自行查阅。pip install jieba-i http:/ 1.5.3 常见问题与解决方法如果固定使用阿里云服务器镜像,可以在当前登录用户的AppDataRoaming文件夹中创建文件夹pip,在pip文件夹中创建文件pip.ini,输入下面的内容,以后再执行pip命令安装和升级扩展库时就不用每次都指定服务器地址了。globalindex-url=http:/ 常见问题与解决方法(2)安装路径带来的问题如果计算机上安装了多个版本的Python开发环境,在一个版本下安装的扩展库无法在另一个版本中使用。强烈建议在命令提示符或PowerShell环境切换至相应版本Python安装目录的scripts文件夹中,然后执行pip命令,如果要离线安装扩展库的话,最好也把.whl文件下载到相应版本的scripts文件夹中。1.5.3 常见问题与解决方法(3)扩展库自身bug或版本冲突问题某些扩展库在升级过程中解决原来问题的同时又引入了新的错误,导致某些功能在旧版本中工作正常但在新版本中却无法使用。如果遇到类似的情况,可以查一下扩展库的官方网站的最新消息,或者暂时还原较低的版本,如果水平足够的话也可以自己修改一下扩展库的代码再使用。1.6 标准库、扩展库对象的导入与使用Python所有内置对象不需要导入就可以直接使用,但内置模块对象和标准库对象必须先导入才能使用,扩展库则需要正确安装之后才能导入和使用其中的对象。在编写代码时,一般建议先导入内置模块和标准库对象再导入扩展库对象,最后导入自己编写的本地模块。并且,建议在程序中只导入确实需要使用的对象,确定用不到的不要导入,避免导入整个模块,这样可以适当提高代码加载和运行速度,并能减小打包后的可执行文件体积。1.6.1 import 模块名 as 别名import sysimport mathimport randomimport os.path as path#计算并输出30的阶乘print(math.factorial(30)#随机选择30个字符0或字符1,允许重复print(random.choices(01,k=30)#判断字符串C:Windowsnotepad.exe指向的路径是否为已存在的文件print(path.isfile(rC:Windowsnotepad.exe)#查看Python解释器程序文件路径print(sys.executable)#查看对象占用的字节数print(sys.getsizeof(董付国)print(sys.getsizeof(1,2,3,4)print(sys.getsizeof(1,2,3,4)1.6.2 from 模块名/库名 import 对象名/模块名 as 别名from math import pi as PIfrom os.path import getsize,joinfrom calendar import isleap#下面一行代码需要安装扩展库pillowfrom PIL import Imager=3print(PI*r*r)#计算半径为3的圆的面积#获取文件C:python38python.exe的大小,单位为字节print(getsize(rC:python38python.exe)#连接多个路径为一个完整的路径print(join(rC:python38,libsite-packages)print(isleap(2020)#判断2020年是否为闰年im=Image.open(test.jpg)print(im.getpixel(200,200)#获取并输出指定位置的像素颜色值1.6.3 from 模块名 import*from itertools import*#从字符串01234中任选3个字符的所有组合,不允许重复#list()用来把函数combinations()的返回值变成列表print(list(combinations(01234,3)#从字符串01234中任选3个字符的所有组合,允许重复print(list(combinations_with_replacement(01234,3)#从字符串1234中任选3个字符的所有排列print(list(permutations(1234,3)#把多个列表首尾相接print(list(chain(1,2,3,4,5,6,7,8,9)data=1,2,3,4,5,6values=0,1,1,0,0,1#把等长列表data和values左对齐#返回data中与values中的1对应的位置上的元素print(list(compress(data,values)1.6.3 from 模块名 import*#返回列表中作为参数传递给函数callable()后得到False的那些元素print(list(filterfalse(callable,int,3,str,sum,5)#返回12和45的笛卡尔积print(list(product(12,45)#返回3个字符串12的笛卡尔积print(list(product(12,repeat=3)#把123和abcdef左对齐,对应位置上的字符组合到一起,短的在后面补字符0#相当于把123000和abcdef左对齐,对应位置上的字符组合到一起print(list(zip_longest(123,abcdef,fillvalue=0)1.6.4 高级用法与常见问题 import sys#查看模块导入时的搜索路径 print(sys.path),C:Python38Libidlelib,C:Python38python38.zip,C:Python38DLLs,C:Python38lib,C:Python38,C:UsersdfgAppDataRoamingPythonPython38site-packages,C:Python38libsite-packages,C:Python38libsite-packageswin32,C:Python38libsite-packageswin32lib,C:Python38libsite-packagesPythonwin#添加新的搜索路径 sys.path.append(D:test)print(sys.path),C:Python38Libidlelib,C:Python38python38.zip,C:Python38DLLs,C:Python38lib,C:Python38,C:UsersdfgAppDataRoamingPythonPython38site-packages,C:Python38libsite-packages,C:Python38libsite-packageswin32,C:Python38libsite-packageswin32lib,C:Python38libsite-packagesPythonwin,D:test1.6.4 高级用法与常见问题1.7 Python代码编写规范(1)缩进在函数定义、类定义、选择结构、循环结构、异常处理结构和with语句等结构中,对应的函数体或语句块都必须有相应的缩进。当某一行代码与上一行代码不在同样的缩进层次上,并且与之前某行代码的缩进层次相同,表示上一个代码块结束。1.7 Python代码编写规范def toTxtFile(fn):#函数定义 with open(fn,w)as fp:#相对def缩进4个空格 for i in range(10):#相对with缩进4个空格 if i%3=0 or i%7=0:#相对于for缩进4个空格 fp.write(str(i)+n)#相对于if缩进4个空格 else:#选择结构的else分支,与if对齐 fp.write(ignoredn)#相对于else缩进4个空格 fp.write(finishedn)#for循环结构结束,与for对齐 print(all jobs done)#with块结束,与with对齐 toTxtFile(rD:text.txt)#函数定义结束,调用函数1.7 Python代码编写规范(2)空格与空行1.7 Python代码编写规范(3)标识符命名在为标识符起名字时,至少应该做到“见名知义”,优先考虑使用英文单词或单词的组合作为标识符名字。如果使用单词组合的话有两种常用形式,一种是使用单个下画线连接单词(例如str_name),一种是标识符名字首字母小写而后面几个单词的首字母大写(例如strName),变量名和函数名可以使用任意一种形式,类名一般使用第二种形式并且首字母大写。另外,变量名不适合太长,有的程序员总担心别人看不明白自己的变量名表示什么,干脆使用一个完整句子十几个单词的组合作为变量名,这样做是不合适的。1.7 Python代码编写规范例如,使用age表示年龄、number表示数量、radius表示圆或球的半径、price表示价格、area表示面积、volume表示体积、row表示行、column表示列、length表示长度、width表示宽度、line表示直线、curve表示曲线,getArea或get_area表示用来计算面积的函数名,setRadius或set_radius表示修改半径的函数。除非是用来临时演示或测试个别知识点的代码片段,否则不建议使用x、y、z或者a1、a2、a3这样的变量名。1.7 Python代码编写规范除“见名知义”这个基本要求之外,在Python中定义标识符时,还应该遵守下面的规范。必须以英文字母、汉字或下划线开头。中间位置可以包含汉字、英文字母、数字和下画线,不能有空格或任何标点符号。不能使用关键字,例如yield、lambda、def、else、for、break、if、while、try、return都是不能用作标识符名称的。对英文字母的大小写敏感,例如student和Student是不同的标识符名称。不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作变量名或者自定义函数名、类名,例如type、max、min、len、list这样的变量名都是不建议作为变量名的,也不建议使用math、random、datetime、re或其他内置模块和标准库的名字作为变量名或者自定义函数名、类名。1.7 Python代码编写规范(4)续行expression1=1+2+3#使用反斜线作为续行符 +4+5expression2=(1+2+3#把多行表达式放在圆括号中表示是一条语句 +4+5)1.7 Python代码编写规范(5)注释在Python中有两种常用的注释形式:井号“#”和三引号。井号“#”用于单行注释,表示本行中“#”符号之后的内容不作为代码运行,一般建议在表示注释的井号“#”后面增加一个空格再写注释内容;一对三引号(包括三单引号和三双引号)常用于大段说明性文本的注释,也可以用于表示包含多行的字符串。1.7 Python代码编写规范(6)圆括号圆括号除了用来表示多行代码为一条语句,还常用来修改表达式计算顺序或者增加代码可读性避免歧义。建议在复杂表达式中适当的位置增加括号,明确说明运算顺序,尽最大可能减少人类阅读时可能的困扰,除非运算符优先级与大多数人所具备的常识高度一致。1.7 Python代码编写规范(7)定界符、分隔符、运算符在编写Python程序时,所有定界符和分隔符都应使用英文半角字符,例如元素之间的逗号、表示列表的方括号、表示元组的圆括号、表示字典和集合的大括号、表示字符串和字节串的引号、字典的“键”和“值”之间的冒号、定义函数和类以及类中方法时的冒号、所有运算符,这些都应该使用英文半角输入法,不能是全角字符。这些属于硬性规定,如果违反会导致语法错误。1.7 Python代码编写规范(8)函数大小一般建议一个函数的代码行数不超过一个屏幕的高度,如果超过太多可以考虑重新设计程序的框架,拆分成几个小的函数。和续行符的使用一样,函数大小也不是硬性规定,但如果这样做的话可以提高代码阅读体验。