内容正文:
Python语言
使用函数可将代码块与主程序分离,使程序更加容易理解。
还可将函数存储在称为模块的独立文件中,既可隐藏程序代码细节,又可在不同程序中重复使用函数。
模块
2
模块是什么?
模块
函数就像积木,那么模块可以认为是一桶积木。
一般开发者会把类似的或者将一个项目函数收集在一个模块中。Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块(Module) 是用来把函数、变量, 以及其他东西组织成更大的、更强的程序。
Python提供了大量模块, 有些模块内置在Python之中, 如用于数学计算的模块math;
有些模块需要单独下载, 如用于科学计算的模块numpy。
一、模块概念
模块就是一个以.py结尾的独立的程序代码的文件,实现了特定的功能。
模块
4
在Python中, 模块分为以下几种:
1.系统内置模块:如math、random、time等。
2.自定义模块:自定义模块是用户编写的模块,对某段逻辑或某些函数进行封装后,供其他程序调用。
3.第三方的开源模块:如numpy、matplotlib等, 可以通过pip install进行安装后调用。
模块
5
在自定义模块时,有几点要注意:
(1)为了使IDLE能找到我们自定义模块,该模块要和调用的程序在同一目录下,否则在导入模块时会提示找不到模块的错误。
(2)模块名要遵循Python变量命名规范,不要使用中文、特殊字符等。
(3)自定义的模块名不要和系统内置的模块名相同,可以先在IDLE 交互环境里先用“import model_name”命令检查,若成功则说明系统已存在此模块,然后考虑更改自定义的模块名。
模块
6
二、模块导入
在Python中, 模块中的函数不能直接使用, 需要先导入。
模块
7
模块的导入主要有以下两种方法:
导入整个模块文件,使用模块中的函数,格式如下:
Import <模块> as<别名>
<模块>.<函数名>()
这种导入模块的方法,相当于给导入的模块名称重新起一个别名,便于记忆,很方便地在程序中调用。
模块
8
例如,计算2的平方根,先导人模块,再使用函数,如图所示。
导入整个模块文件
模块
9
from<模块>import<函数名>
<函数名>()
导入模块中的指定函数,直接使用该函数,格式如下:
函数名如果有多个,可用逗号“,”隔开。
函数名可用通配符“*”导出所有的函数。
这种方法要慎用,因为导出的函数名称容易和其它函数名称冲突,失去了模块命名空间的优势。
模块
10
又如计算2的3次幂,导入指定函数后,就可以直接使用该函数,如图所示。
只导入模块中指定函数
模块
11
使用dir() 函数查看math模块内部的函数名
模块导入后, 可以使用内置函数dir() 查看模块内部的函数名(以及类和常量标识符名称等),如图所示。
模块
12
三、常用内置模块math和random
math模块是Python提供的内置数学类模块,下 表列出math模块中的2个常量和2个函数。
1.math模块
名称 数学表示 含义
圆周率pi π π的近似值,15位小数
自然常数e e e的近似值,15位小数
pow(x, y) xy 计算x的y次幂
sqrt(x) ꇌ√x 计算x的平方根
模块
13
random模块提供了不同类型的随机数函数, 表13-2列出了常用的4个随机数生成函数。
2.random模块
名称 含义
seed(x) 给随机数一个种子值,默认随机种子是系统时钟
random() 随机生成一个0至1(不含1)之间的实数
uniform(a, b) 随机生成一个a至b之间的实数
rand int(a, b) 随机生成一个a至b之间的整数
模块
14
采用蒙特卡洛方法计算π的值。
圆周率π是一个无理数,没有任何一个公式能够精确计算π值, π的计算只能采用近似算法。
蒙特卡洛方法(MonteCarlomethod) 也称统计模拟方法, 是指使用随机数来解决计算问题的方法。
四、Python模块的应用实例
模块
15
1.问题分析
首先构造一个单位正方形和1/4圆,如图所示。
模块
16
随机向单位正方形内抛洒大量“点”,而每个点可能在圆内或者在圆外
当随机点数量达到一定程度,在1/4圆内的点将构成其面积(S圆=π/4),全部点将构成正方形面积 (S正=1)。
此时,抛点落在圆内的概率(p),就是上述面积之比(P=S圆/S正=π/4)得到π=4p。
随机点的数量越大,得到的一值越精确。
模块
17
根据上述分析,单位正方形内抛点的横坐标和纵坐标可通过随机函数产生
通过计算抛点到原点的距离(d)来判断该点是否落在圆内。
若抛点落在圆内,则计数器(point) 加1。
2.设计算法
模块
18
随机向单位正方形内抛洒大量点(num) ,可通过循环实现。
抛点落在圆内的概率为p=point/num
其算法用流程图表示,如图所示。
模块
19
根据设计的算法, 其程序代码如下所示。
3.编写程序
Import random
import math
num=int(input("请输入投点数:") )
point = 0
For i in range(1, num+1) :
x y=random.random(),random.random()
dist=math.sqrt(x**2+y**2)
if_dist<=1.0:
point =point+ 1
Pi=4*(point/num)
print("Pi的值是:", Pi)
模块
20
按“F5”键,分别输人20000和20000000,运行结果如图所示。
4.调试运行
可见,投入的点越多,计算的一值越精确。
模块
21
模块
在编写程序时,经常需要提供一些随机数据。大多数编程语言提供了生成伪随机数的函数,在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.randint(1,3)返回2
random.randrange([start],end,[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]
22
import random #随机数模块
print(random.randint(1,100))# 在1-100里随机取一个整数
print(random.uniform(1,900))# 取一个小数,顾头也顾尾
stus=['zhangsan','lisi','xiaohong']
print(random.choice(stus))#随机取一个元素
print(random.choice('sdfgadsgadfg'))
print(random.sample(stus,2))# 随机取两个元素
l=list(range(1,101))
print('洗牌之前的',l)
print(random.shuffle(l)) #洗牌,也就是打乱,没有返回值,只能传list,所以下面要在print一下
print('洗牌之后的',l)
模块
24
>>> import math
>>> print math
<module 'math' (built-in)>
>>> print math.pi #导出圆周率的值
3.14159265359
我们如果直接访问 pi,不加math这个前缀会发生什么情况呢?
>>> print pi
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print pi
NameError: name 'pi' is not defined
模块
>>> from math import pi
>>> print (pi)
3.141592653589793
>>>
会有更快速、更省事的Python模块导入方法呢?
模块
>>> from math import *
>>>
>>> pi
3.141592653589793
>>> cos(pi)
-1.0
>>>
一次性的将所有python 调用函数方法导入,好处是代码看起来非常简洁,但是如果同时导入多个模块,要考虑模块方法名冲突等这些问题 。
模块
两种方法导入模块的区别
模块
from…import *语句与import区别在于:
import 导入模块,每次使用模块中的函数都要指定是哪个模块。(哪个文件夹中的哪个文件,相当于导入的是一个文件夹,是个相对路径)
from…import * 导入模块,每次使用模块中的函数,直接使用函数就可以了;注因为已经知道该函数是那个模块中的了。(已经绑定了文件夹,只需要知道要用哪个文件即可,相当于导入的是一个文件夹中所有文件,所有函数都是绝对路径)
模块
Python程序由模块构成,模块中包含若干条语句,语句包含表达式。
1. 物理行和逻辑行
Python程序由若干逻辑行组成。物理行是在编写程序时所看见的,而逻辑行是Python看见的单条语句,一个逻辑行可以包含多个物理行。
Python中语句不能跨逻辑行,在遇到较长的语句时,可以使用语句续行符号,将一条语句写在多行之中。
Python中的续行方式,可以使用“\”符号。
模块
2 . 语句分隔
通常建议每行只写一条语句,这样代码更加易读。如果想要在一个物理行中使用多于一条逻辑语句,那么需要使用分号“;”来特别地标明这种用法,分号表示一个逻辑语句的结束。
3. 缩进
在Python中行首的空白称为缩进,逻辑行首的空白(空格或制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
要求同一层次的语句必须有相同的缩进,每一组这样的语句称为一个代码块,错误的缩进会引发错误。
感谢聆听
$$