《人工智能和机器学习--PPT02-Python编程简介.pdf》由会员分享,可在线阅读,更多相关《人工智能和机器学习--PPT02-Python编程简介.pdf(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Python编程简介王秋月中国人民大学信息学院目录 Python起源 为什么要学习Python? 怎样高效学习Python? Python的开发环境 Jupyter Notebook Python基本编程 数据类型和变量 运算符和表达式 容器类型 控制流语句 函数 文件操作Python起源1989年末,Guido van Rossum为了打发圣诞节的无聊,创造了Python语言。2005年12月,入职Google工作。2012年12月,加入Dropbox公司。Guido van Rossum(1956 - )TOBIE IndexIEEE top programming languages o
2、f 2019Python特点丰富的库简单、易学可扩展、可嵌入解释性面向对象、高层免费开源、可移植为什么要学Python? 人生苦短,我用Python!Python的特点 简单、易学简单、易学 一种代表简单主义思想的语言,有简单的语法,容易上手。 伪代码本质是它最大的优点之一。 使你能够专注于解决问题而不是去搞明白语言本身。 面向对象的高层语言面向对象的高层语言 无需关注底层细节,而C/C+中需要操作指针。 与其他语言相比,以强大而又简单的方式实现面向对象编程。 解释性解释性 不需要被编译成二进制代码,可以直接在源代码上运行。 对于编译性语言(C/C+),源文件-编译/链接器-可执行文件。Pyt
3、hon的特点 免费开源,可移植性免费开源,可移植性 Unix衍生系统,Win32系统家族,掌上平台(掌上电脑/手机),游戏控制台(PSP)等等。 可扩展性,可嵌入性可扩展性,可嵌入性 如果一段关键代码希望运行得更快或者希望算法不公开,你可以把这部分程序用C或C+编写,然后在Python程序中使用。 可以把Python嵌入到C/C+程序中,从而向程序用户提供脚本功能。 丰富的库丰富的库 Python标准库确实很庞大,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器等等。此外还有其他高质量的库,如wxPython、Twisted和图像库等等。如何高效学习Python? 不需要具有计算机
4、专业的学位 不需要上一门完整的Python编程课 不需要记住所有的语法 自顶向下学习法: 先学习核心的编程概念 再学习使用一些相关的库 最后通过实际项目来运用知识和改进技术Python 2还是Python 3? Python 3不向下兼容Python 2,即Python 2中的一些函数和包不能在Python 3中使用 2010年发布的Python 2.7是Python 2最后的版本,Python 2将不再更新 2020年1月1日起,Python核心开发团队将不再对Python 2提供任何官方支持 Python 3是未来的主流 本课程中使用Python 3Python的开发环境 Anaconda
5、 一个用于科学计算的Python发行版 提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题 支持 Linux, Mac OS, Windows系统 下载:https:/ NumPy( http:/www.numpy.org/ ):用于处理(大)数组 Pandas(http:/pandas.pydata.org/):数据分析工具包 Matplotlib(http:/matplotlib.org):用于绘制图表 SciPy(http:/www.scipy.org):包含许多有用的科学函数 Scikit-learn(http:/scikit-learn
6、.org/):机器学习算法 IPython(http:/ipython.org/):基于Shell或浏览器的开发环境 Spyder( https:/www.spyder-ide.org/ ):交互式集成开发环境 此 前 被 称 为 IPythonNotebook 多语分析环境支持40多种编程语言 Jupyter 是 Julia, Python和R几个词的变位词 支持多种内容类型:代码、描述文本、图像、视频等等 http:/jupyter.org/Jupyter Notebook HTML &Markdown LaTeX(公式) Code(代码)Jupyter Notebook HTML &Ma
7、rkdown LaTeX(公式) Code(代码)Jupyter Notebook HTML &Markdown LaTeX(公式) Code(代码)Jupyter Notebook HTML &Markdown LaTeX(公式) Code(代码)Jupyter Notebook 代码被划分成多个单元代码被划分成多个单元,可以控制执行过程可以控制执行过程 允许进行交互式开发允许进行交互式开发 非常适合探索式分析与非常适合探索式分析与建模建模Jupyter Notebook %matplotlib inline 将图表显示在Jupyternotebook中Jupyter魔术命令 %matplo
8、tlib inline 将图表显示在Jupyternotebook中Jupyter魔术命令 %matplotlib inline 将图表显示在Jupyternotebook中 %timeit 记录一个单元的执行时间Jupyter魔术命令Jupyter魔术命令 %matplotlib inline 将图表显示在Jupyternotebook中 %timeit 记录一个单元的执行时间 %run filename.ipynb 运行另一个notebook或python文件的代码Jupyter魔术命令 %matplotlib inline 将图表显示在Jupyternotebook中 %timeit 记
9、录一个单元的执行时间 %run filename.ipynb 运行另一个notebook或python文件的代码 %load filename.py 将外部文件的内容拷贝粘贴到单元中import caffeSolverName = /root/workspace“sovler = caffe.AdamSolver(SolverName)test.pyJupyter快捷键可以通过Help Keyboard Shortcuts查看所有的快捷键从命令行转换:从命令行转换: jupyter nbconvert -to python notebook.ipynb从从Notebook导出代码:导出代码:抽
10、取Python代码Jupyter Notebook参考资料 Jupyter官网:https:/jupyter.org/ Jupyter Notebook快速入门: http:/ http:/ Markdown语法说明: https:/ 一个语句占一行 单个语句占多行,用反斜杠 多个语句在一行,使用分号;分隔 Python使用缩进表示代码块,而不是一对花括号 注释: 单行注释用# 多行注释用三个单引号 或者三个双引号 将注释括起来Hello World! print函数:print(“Hello World!”)数据类型(1) 基本数据类型: 数字(number) 整数(int):2,59,10
11、0,-3 小数(float):0.4,5.0,-0.78 布尔(bool):True,False 字符串(str):”How are you?”,this is a string.数据类型(2) 容器类型: 列表(list):1, 2, 5, 10 元组(tuple):(1, two) 集合(set):Mike, John, Marry 字典(dictionary):20120010: 98, 20120011: 89, 20120023:100变量 变量在被赋值的时候创建,无需声明 变量可以在任何时候被重新赋值为任何其他类型的值message = “Hello World!”print(me
12、ssage)message = “Hello Python Course!”print(message)type(message)message = 3.6print(“Python “, message)type(message)message = 100print(“There are “, message, “cars”)type(message)a, b, c, d = 20, 5.5, True, 4+3jprint(type(a), type(b), type(c), type(d)变量命名规则 变量名只能包含字母、数字和下划线。 变量名只能以字母或下划线开头。 变量名是大小写敏感
13、的。 变量名不要使用Python的关键字或函数名下面哪些变量名是不合法的:current balance, current_balance, currentBalance, current-balance, 4account, account4, _spam, _Spam, print, hello算术表达式 基本的算术运算符:+、-、*、/、/、%、*5 + 4 # 加法4.3 - 2 # 减法3 * 7 # 乘法2 / 4 # 除法,得到浮点数2 / 4 # 除法,得到整数17 % 3 # 取余2 * 5 # 乘方x = 3print(type(x) # Prints print(x) p
14、rint(x + 1) print(x - 1) print(x * 2) print(x * 2)x += 1print(x) x *= 2print(x) y = 2.5print(type(y) # Prints print(y, y + 1, y * 2, y * 2) 布尔表达式 True 和 False为预定义值;实际上是整数1 和 0 比较运算符:、=、=、!=,结果是布尔值 布尔运算符:not、and、or12 1312 = 1212 != 13True * 120 and 1(3+2) (5-7)(7=6) and (12!=21)t = Truef = Falseprint
15、(type(t) # Prints print(t and f) # Logical AND;print(t or f) # Logical OR;print(not t) # Logical NOT;print(t != f) # Logical XOR;字符串 字符串用单引号或双引号括起来 使用反斜杠转义特殊字符:n 换行符,t 制表符, 三引号用于大块的文本内容a = Hello world!b = Hello world!a = ba = Pers lectureprint(a)a = One line.nAnother line.print(a)b = One line,anothe
16、r line.print(b)字符串运算36# 字符串拼接a = Part 1b = and part 2a + + b# 字符串重复并拼接s = a * 2print(s)# 提取子串s0print(s0:4)print(s5:)print(s6:-1)# 字符串长度len(s)# 子串检测p in sP in sPart in s字符串不能改变37# 直接修改字符串会报错s0 = B# 构建新字符串s = B + s1: Python中的字符串不可修改!hello = helloworld = world“# 字符串格式化hw12 = %s %s %d % (hello, world, 1
17、2)print(hw12) 如果要改变一个字符串:用旧的字符串片段生成一个新的 如果要生成许多新串,尝试字符串格式化 列表(List)处理能让字符串处理更为有效字符串的方法38s = a string, with stuffs.count(st) # 有多少子串?s.find(stu) # 寻找子串,如果有,给出子串的位置s.replace(stuff, characters) # 替换子串 (全部出现过的子串)s.replace(s, X, 1) # 只替换一次s = 3s.isdigit() # 是纯数字串吗? 字符串有一组内建(built-in)方法 没有方法可以改变原串,有几个方法可以
18、生成新串s = helloprint(s.capitalize() # 首字母大写;输出Helloprint(s.upper() # 所有字符转换成大写字符;输出HELLOprint(s.rjust(7) # 右对齐,左端补空格;输出 helloprint(s.center(7) # 居中对齐,左右两端补空格;输出 hello print( world .strip() # 去除前后的所有空白符;输出world列表39r = 1, 2.0, 3, 5 # 列表实例,不同的值type(r) # 输出r1 # 通过下标来访问; 偏移量为 0 r-1 # 负的下标代表从尾部开始计数r1:3 # 列表
19、的片段; 给出新的列表w = r + 10, 19 # 合并列表; 给出另外的一个列表wr # 原列表不变; w 和 r 不同t = 0.0 * 10 # 用重复生成一个初始向量t 有序的对象序列 异质的;可以包含任意类型的对象的混合列表操作40r = 1, 2.0, 3, 5r3 = word # 通过下标改变一个元素(项)r # 显示1, 2.0, 3, wordr0 = 9, 8 # 列表可以嵌套r # 显示9, 8, 2.0, 3, wordr0:3 = 1, 2, 5, 6 # 改变列表的一个片段,可以改变列表的长度r # 显示1, 2, 5, 6, wordr1:3 = # 通过设
20、置列表的片段为空集来移除元素r # 显示1, 6, wordlen(r) # 列表的长度,即项的个数,显示36 in r # 成员测试,显示Truer.index(6) # 搜索并给出位置,如果没有的话,报错,这里显示1列表是可变的,可以改变局部列表的方法(1)41r = 1, 2.0, 3, 5r.append(thing) # 在列表尾增加一个项r # 显示1, 2.0, 3, 5, thingr.append(another, list) # 增加的列表被看作一个单一项r # 显示1, 2.0, 3, 5, thing, another, listr = 1, 2.0, 3, 5r.ex
21、tend(item, another) # 列表的项逐次添加r # 显示1, 2.0, 3, 5, item, anotherk = r.pop() # 移除最后一项k# 显示anotherr # 显示1, 2.0, 3, 5, itemr.insert(3, 4.0) # 在指定位置插入一项r # 显示1, 2.0, 3, 4.0, 5, itemr.remove(item) # 删除一项r # 显示1, 2.0, 3, 4.0, 5列表的方法(2)42r = 2, 5, -1, 0, 20r.sort() r# 显示-1, 0, 2, 5, 20w = apa, 1, 2, 1234w.s
22、ort() # 字符串: 使用ASCII顺序w # 显示1, 1234, 2, apaw.reverse() # 反转列表!w# 显示apa, 2, 1234, 1v = w: # 首先生成新表v.reverse() # 反转这份拷贝v # 显示1, 1234, 2, apaw # 显示apa, 2, 1234, 1 使用内建的sort方法:排序是内部进行的,不产生新列表! 外部函数sorted,不改变原列表的顺序 https:/ = biovitrum # 生成字符串w = list(s) # 转为字符的列表w # 显示b, i, o, v, i, t, r, u, mw.reverse()
23、w # 显示m, u, r, t, i, v, o, i, br = .join(w) # 使用空串的join方法r # 显示murtivoibd = -.join(w) # 使用字符-的join方法d # 显示m-u-r-t-i-v-o-i-bs = a few wordsw = s.split() # 基于空白符(空格, 新行)切分w# 显示a, few, words | .join(w) # 对其他串用方法join,显示a | few | words元组44t = (1, 3, 2)t1 # 由下标访问,偏移量从0开始,显示3(a, b, c) = t # 元组赋值a # 显示1b #
24、显示3a, b, c # 一个实际上的元组表达式!显示(1, 3, 2)a, b = b, a # 交换值的技巧a, b # 显示(3, 1)r = list(t) # 转换元组为列表r # 显示1, 3, 2tuple(r) # 转换列表为元组,显示(1, 3, 2)和列表一样,除了不可变,即一旦生成,就不可改变某些函数会返回元组集合45student = Tom, Jim, Mary, Tom, Jack, Roseprint(student) # 输出集合,重复元素被自动去掉Mary, Jim, Rose, Jack, Tomprint(Rose in student) # 成员测试Tr
25、uea = set(abracadabra) # 字符串转换成集合b = set(alacazam)print(a)b, a, c, r, d print(a - b) # a和b的差集b, d, rprint(a | b) # a和b的并集l, r, a, c, z, m, b, dprint(a & b) # a和b的交集a, cprint(a b) # a和b中不同时存在的元素l, r, z, m, b, d一个无序无序的没有重复元素没有重复元素的序列基本功能是进行成员关系测试和删除重复元素,可以进行集合运算字典46h = key: 12, nyckel: wordhkey # 由键访问
26、,显示12h.has_key(nyckel) # 显示TruehPer = Kraulishnyckel: word, Per: Kraulis, key: 12 # 输出顺序是随机的键(键(key)值()值(value)对的无序集合键必须使用不可变类型。可以用数字、字符串或元组,不能用列表在同一个字典中,键必须是唯一的,值不必增加一个键/值替换一个键对应的值hPer = Johansson hnyckel: word, Per: Johansson, key: 12字典的方法(1)47h = key: 12, nyckel: wordPer in h # 测试一个键是否在字典中,显示Fals
27、ehPer # 报错len(h) # 字典中键值对的个数,显示2 h.keys() # 字典中所有的键nyckel, keyh.values() # 字典中所有的值word, 12h.items() # 字典中所有的键值对dict_items(key, 12), (nyckel, word)h.get(Per, unknown) # 返回值, 或者返回缺省值,显示unknownh.get(key, unknown) # 显示12删除数据的命令:del48a = thing # 定义一个变量a# 显示thingdel a # 把这个变量忘掉a # 报错h = key: 12, nyckel: w
28、orddel hkey # 移除键和它的值h # 显示nyckel: wordr = 1, 3, 2del r1 # 另一个删除列表项的方式r # 1, 2 命令!不是函数! 实际上移除变量(名字),不是对象字典方法(2)49g = h.copy() # 拷贝字典del hkeyh # 显示nyckel: wordg # 显示nyckel: word, key: 12hPer = Johanssonh # 显示nyckel: word, Per: Johanssonh.update(g) # 根据g添加或者更新所有的键值h# 显示nyckel: word, key: 12, Per: Joha
29、nssong.clear() # 清除字典中的所有项print(len(g) # 显示0 条件语句:ifif condition_1:statement_block_1elif condition_2:statement_block_2else:statement_block_3age = 17if age = 18:print(You are old enough to vote!)print(Have you registered to vote yet?)else:print(Sorry, you are too young to vote.)print(Please register
30、to vote as soon as you turn 18!)age = 12if age 4:print(Your admission cost is $0.)elif age 18:print(Your admission cost is $5.)else:print(Your admission cost is $10.)循环语句:whilewhile condition:statement_blockcurrent_number = 1while current_number = 5:print(current_number)current_number += 1pets = dog
31、, cat, dog, goldfish, cat, rabbit, catprint(pets)while cat in pets:pets.remove(cat)print(pets)循环语句:forfor variable in sequence:statement_blockelse:statement_blockmagicians = alice, david, carolinafor magician in magicians:print(magician.title() + , that was a great trick!)r = for c in this is a stri
32、ng with blanks: # 一个字符一个字符地遍历字符串if c = : continue # 跳过后面的代码块,继续循环r.append(c)print (.join(r)squares = for value in range(1,11):squares.append(value*2)print(squares)循环中的break, continue和else53r = 1, 3, 10, 98, -2, 48for i in r:if i 0:print (input contains negative value!)break # 跳出整个循环,包括elseelse:pass
33、# 什么都不做else: # 如果循环是正常结束的,则执行print (input is OK)break语句跳出循环continue语句结束本轮循环,开始下一轮循环else在循环条件不满足时被执行,被break的循环不执行elsepass语句是空语句,什么都不做,占位语句列表循环与List Comprehension54nums = 0, 1, 2, 3, 4squares = for x in nums:squares.append(x * 2)print(squares) # Prints 0, 1, 4, 9, 16nums = 0, 1, 2, 3, 4squares = x * 2
34、 for x in numsprint(squares) # Prints 0, 1, 4, 9, 16 nums = 0, 1, 2, 3, 4even_squares = x * 2 for x in nums if x % 2 = 0print(even_squares) # Prints 0, 4, 16animals = cat, dog, monkeyfor idx, animal in enumerate(animals):print(#%d: %s % (idx + 1, animal)字典循环与Dictionary Comprehension55nums = 0, 1, 2,
35、 3, 4even_num_to_square = x: x * 2 for x in nums if x % 2 = 0print(even_num_to_square) # Prints 0: 0, 2: 4, 4: 16d = person: 2, cat: 4, spider: 8for animal in d:legs = danimalprint(A %s has %d legs % (animal, legs)d = person: 2, cat: 4, spider: 8for animal, legs in d.items():print(A %s has %d legs %
36、 (animal, legs)集合循环与Set Comprehension56from math import sqrtnums = int(sqrt(x) for x in range(30)print(nums) # Prints 0, 1, 2, 3, 4, 5animals = cat, dog, fishfor idx, animal in enumerate(animals):print(#%d: %s % (idx + 1, animal)函数def 函数名(参数列表):函数体def greet_user():print(Hello!)greet_user()def greet_
37、user(username):print(Hello, + username.title() + !)greet_user(jesse)def describe_pet(animal_type, pet_name):print(nI have a + animal_type + .)print(My “ +animal_type+ s name is + pet_name.title() + .)describe_pet(hamster, harry)describe_pet(dog, willie)函数参数的默认值58def describe_pet(pet_name, animal_typ
38、e=dog):print(nI have a + animal_type + .)print(My “ +animal_type+ s name is +pet_name.title()+ .)describe_pet(willie)describe_pet(pet_name=harry, animal_type=hamster)describe_pet(animal_type=hamster, pet_name=harry) 参数可以有默认值 当调用时没有给定参数,会采用默认值 有默认值的参数必须放在参数列表的最后 显式调用参数,可以改变参数顺序函数返回值59def get_formatte
39、d_name(first_name, last_name):full_name = first_name + + last_namereturn full_name.title()musician = get_formatted_name(jimi, hendrix)print(musician) 一个函数不一定要有return语句 实际上,函数默认总会返回一个值:None None 是一个特殊的值,意味着 什么都没有模块60from math import * # 导入模块math中的所有函数print (e, pi)print (cos(radians(180.0)print (log(1
40、0.0)print (exp(-1.0)将函数存储在被称为模块的独立文件中,再将模块导入到主程序中数学函数在一个单独的模块中import math# 导入整个math模块print (math.e, math.pi)print (math.cos(math.radians(180.0)print (math.log(10.0)print (math.exp(-1.0)from math import log, cos# 导入math模块中的log和cos函数from math import log as lg # 导入math模块中的log函数,起别名lg文件操作:读61f = open(te
41、st.txt) # 默认: 只读模式line = f.readline() # 读一行line# 显示This is the first line.nlines = f.readlines() # 读所有剩余行lines# 显示This is the second.n, And third.n一个文件操作对象由内建函数 open 创建文件对象有一系列函数read:读取整个文件 (或者说N 字节),返回一个单独的字符串readline:读取一行(然后跳到新的一行)readlines:读取所有的行,返回一个字符串的列表文件操作:写62w = open(output.txt, w) # 写模式 (默
42、认写的是文本)w.write(stuff) # 并不自动添加新行w.write(n)w.write(moren and even moren)w.close()stuffmoreand even morewrite 函数只是简单地输出给定字符串字符串不一定是ASCII码,二进制串也可以用for循环读取文件63infile = open(test.txt) # 只读模式outfile = open(test_upper.txt, w) # 写模式; 创建文件for line in infile: # 遍历文件中的每一行outfile.write(line.upper()infile.close() # 并不严格要求; 系统会自动执行outfile.close()注意: 每行结尾会尾随一个换行符 n 可以使用字符串方法strip或者rstrip去除它参考资料和教程 Python文档:https:/docs.python.org/3/ “用Python玩转数据”:https:/www.coursera.org/learn/hipython/ Python编程:从入门到实践编程:从入门到实践 第2、3、4、5、6、7、8章