1、第三章 算法的程序实现 人生苦短 我用python 学习目标: 函数与模块 动脑的时刻 同学们,你们知道它们是什么? 它们的功能我们自己可以实现吗? PythonPython函数分类函数分类 一、内置函数 print() input() randint() 二、自定义函数 自定义函数 def 函数名(参数集合): return 函数值 函数名就是标识符,命名要求与变量命名要求一样。 语句块必须缩进,预定4个空格。 定义中的参数列表称为形式参数,只是一种符号标识符 函数定义,只是声明了一个函数,它不能被执行,需要调用执行。 调用的方式,就是函数名后加上小括号。 调用时写的参数是实际参数,是实实在
2、在传入的值,简称实参。 自定义函数 def add(x,y): #x,y #x,y 为形式参数,也是标识符。为形式参数,也是标识符。 return x+y # #需要返回值就用需要返回值就用returnreturn 如果需要使用这个函数,只需要使用这个函数名和参数即可。 实例 def myMax(a,b): if(ab): return a else: return b c=myMax(3,4) print(c) 思考: 函数形式参数、 实参? 变量的作用域 当程序中有多个函数时,定义的每个变量只能在一定的范当程序中有多个函数时,定义的每个变量只能在一定的范 围内访问,称之为变量的作用域。围内
3、访问,称之为变量的作用域。 按作用域划分,将变量分为按作用域划分,将变量分为局部变量和全局变量。局部变量和全局变量。 1. 局部变量局部变量 在一个函数内或者语句块内定义的变量称为局部变量。局部变在一个函数内或者语句块内定义的变量称为局部变量。局部变 量的作用域仅限于定义它的函数体或语句块中量的作用域仅限于定义它的函数体或语句块中。 def fun1(a): x=a+10 def fun2(a,b): x,y=a,b 变量的作用域 在所有函数之外定义的变量称为全局变量,它可以在多在所有函数之外定义的变量称为全局变量,它可以在多 个函数中被引用个函数中被引用。 x = 30 def func()
4、: global x print(x的值是的值是, x) x = 20 print(全局变量全局变量x改为改为, x) func() print(x的值是的值是, x) 2. 全局变量全局变量 变量的作用域 模块是什么? 函数就像积木,那么模块可以认为是一桶积木。 一般开发者会把类似的或者将一个项目函数收集 在一个模块中。Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象 定义和Python语句。 python模块的导入import 使用import 关键字,可以将一个程序中已出现的一个或多个函数或模块,引 入到另一个python代码中
5、,从而实现代码的复用。语法如下:语法如下: import 模块名模块名 例如:要引用模块 math,就可以在文件最开始的地方用 import math 来引入。 在调用 math 模块中的函数时,必须这样引用: 模块名模块名.函数名函数名 fromimport 语句 一个模块可能包含大量函数,但是一个程序又不会使用它的全部函数,Python 的 from 语句语句让你从模块中导入一个指定的部分到当前空间中。语法如下: from 模块名模块名 import 函数名函数名 如果需要把一个模块的所有内容全部导入,使用的语句只需将函数名写成*即可。 例如,要导入模块 fib 的 fibonacci 函
6、数,使用如下语句: from fib import fibonacci 例如:需要引入scapy.all模块中的srp函数,就可以使用以下语句: 实例 l 定义一个比较大小的函数,并保存到文件中,使用导 入模块的方式进行使用? #定义一个求最大值的函数 def myMax(a,b): if(ab): return a else: return b 思考: 怎么导入? #调用这个函数 From myfunc import myMax c=myMax(3,4) print(c) math模块 math模块提供了众多功能强大的数学函数,可以有效提高编程效率,使用这些函 数时,需要使用import m
7、ath导入math模块。 random模块 在编写程序时,经常需要提供一些随机数据。大多数编程语言提供了生成伪 随机数的函数,在Python中这类函数被封装在random模块中。 函数名说明举例 random.random() 返回0.0,1.0区间内的一个 随机小数 random.random()返回 0.9523521796999529 random.uniform(a,b) 返回a,b区间内的一个随机 小数 random.uniform(1,3)返回 2.3403540401554146 random.randint(a,b) 返回a,b区间内的一个随机 整数 random.randin
8、t(1,3)返回2 random.randrange(start,e nd,step) 返回start,end)区间内的一 个整数,start和step默认 都是1 random.randrange(1,10)返回5 random.choice() 随机返回给定序列中的一个 元素 random.choice(a,b,c)返回c random.shuffle(x,random) 将可变序列的所有元素随机 排列 random.shuffle(1,2,3,4)返回1, 4, 3, 2 random模块 Image模块 Image 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许 多工
9、厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。 比如说获取图像的尺寸和像素的颜色、旋转图像或改变图像格式等等。 # 获得图像的高和宽 h, w = img.size # 获得图像的格式 geshi = img.format # 获得图像的模式 mo = img.mode # 将文件重新保存为time.png img.save(time, png) # 创建缩略图 img.thumbnail(50,50),resample=Image.BICUBIC) img.show() # 保存与图像数据相关的字典 dic = img.info 两种方法导入模块的区别 fromi
10、mport *语句与语句与import区别在于:区别在于: 1. import 导入模块,每次使用模块中的函数都要是定是哪个模块。 (哪个文件夹中的哪个文件,相当于导入的是一个文件夹,是个(哪个文件夹中的哪个文件,相当于导入的是一个文件夹,是个 相对路径相对路径) 2. fromimport * 导入模块,每次使用模块中的函数,直接使用函数 就可以了;注因为已经知道该函数是那个模块中的了。(已经绑已经绑 定了文件夹,只需要知道要用哪个文件即可,相当于导入的是一定了文件夹,只需要知道要用哪个文件即可,相当于导入的是一 个文件夹中所有文件,所有函数都是个文件夹中所有文件,所有函数都是绝对路径绝对路
11、径) Python程序由模块构成,模块中包含若干条语句,语句包含表达式模块构成,模块中包含若干条语句,语句包含表达式。 Python程序由若干逻辑行组成。物理行是在编写程序时所看见的,而逻辑 行是Python看见的单条语句,一个逻辑行可以包含多个物理行。 Python中语句不能跨逻辑行,在遇到较长的语句时,可以使用语句续行符 号,将一条语句写在多行之中。 Python中的续行方式,可以使用可以使用“”符号符号。 Python程序设计基础 2 . 语句分隔语句分隔 通常建议每行只写一条语句,这样代码更加易读。如果想要在一个物理行 中使用多于一条逻辑语句,那么需要使用分号“;”来特别地标明这种用法
12、,分 号表示一个逻辑语句的结束。 3. 缩进缩进 在Python中行首的空白称为缩进,逻辑行首的空白(空格或制表符)用来 决定逻辑行的缩进层次,从而用来决定语句的分组。 要求同一层次的语句必须有相同的缩进,每一组这样的语句称为一个代码 块,错误的缩进会引发错误。 Python程序设计基础 4. 注释注释 注释用于为程序添加说明性的文字。Python解释器在运行程序时,会忽略 被注释的内容。Python的注释有单行注释和多行注释。 单行注释以单行注释以“#”开始,表示本行开始,表示本行#之后的内容为注释之后的内容为注释。单行注释可以单独占 一行,也可以放在语句末尾。 多行注释可以跨行多行注释可以
13、跨行,包含在一对三引号一对三引号.或.之间且不属于任何语且不属于任何语 句的内容句的内容将被解释器认为是注释。 Python程序设计基础 课堂练习 1.下面程序段定义的函数fact用于计算n! def fact(n): i = 1 f = 1 while i 0: c = n % 10 rn = n = return rn 划线处的程序是 。 划线处的程序是 。 rn * 10 + c n / 10 课堂练习 4.以下程序引入python的math模块,使用math模块下的floor函数对命令 行输入的实数进行取整: n = input(请输入一个实数:) n2 = math.floor(fl
14、oat(n) #n取整后的整数 print(n2) 该程序段划线处应填入的代码为 。 import math 5.将弧度值转化为角度值的公式为“角度值=弧度值/*100”, 正切值x 的反正切弧度值可以通过math模块下的atan函数进行计算,atan(x)返 回正切值x的反正切弧度值,下面的程序求正切值x的角度: import math x = float(input(请输入x的值:) y = / math.pi * 180 print(y) #输出角度 划线处的程序是 。 课堂练习 math.atan(x) 6.下面程序段生成10个1,100范围内的随机整数(允许重复)存放的列表 numbers中: from random import randint numbers = for i in range(0, 10): n = numbers.append(n) 该程序段划线处应填入的代码为 。 课堂练习 randint(1, 100) Thanks