目录
一:函数
函数是一段可以重复使用的代码,通过传递的参数返回不同的结果
对于重复使用的代码,可以编写为自定义函数以便于重复使用代码,同时提高开发人员的
开发效率。函数可以分为无参函数和带参函数
1.无参函数
Python 的自定义无参函数并不复杂。
以关键字 def 开始,后面跟函数名、小括号、冒号,最后使用 return 退出函数。用表达式可以传递函数的返回值,如果没有返回值,则返回None。
函数是以字母、数字和下划线组成的字符串,但是不能以数字开头。
示例:使用无参数函数相加并输出之和
函数add()使用return语句返回两数相加的值,使用print输出到屏幕上。在处理函数时,如果没有return语句,会默认返回None,程序并不会报错。
使用函数一些错误:
- 函数的定义要先于函数的调用,否则会出错
- 函数的代码是一个整体,要注意缩进
- 定义函数时要使用冒号,但调用时不可以使用
2.带参数函数
注意:形式参数只是占位符,用于体现参数个数,没有具体数值。
示例:定义并调用带参函数并完成相加的运算
当调用函数时,根据传递的实际参数出现位置与函数定义的参数位置进行匹配
示例:使用参数位置或关键字调用带参函数
调用带参函数时,传入函数的参数个数必须和声明的参数个数一致。当函数包含有多个参数时,一旦实参个数与形参个数不符,就可能出错。为了避免这样的错误发生,Python在函数定义时允许为形式参数指定默认值,从而在调用参数时可以少写参数,省略的参数用默认值为其赋值。
示例:编码实现计算器功能
要求:用户输入两个数字和运算符,程序根据用户指定的运算符执行,加,减,乘,除。实现步骤如下:
2.函数中变量中的作用域
作用域是指变量在程序中的应用范围,而变量声明的位置决定它的作用域。Python 按作用域区分有局部变量和全局变量。
全局变量是指在一个模块中最高级别的变量有全局作用域,除非被删除,否则存活到程 序运行结束,所有函数都能访问全局变量。
局部变量是指定义在函数内的变量有局部作用域,依赖于定义变量的函数现阶段是否处于活动状态。调用函数时,局部变量产生,暂时存在。一旦函数执行完,局部变量将会被释放。
局部变量和全局变量的使用规则:
- 局部变量的作用域仅限于定义它的函数,
- 全局变量的作用域在整个模块内部都是可见的,
- 在同一个函数中,不允许有同名局部变量。
- 在不同的函数中,可以有同名局部变量。
- 在同一个程序中,全局变量和局部变量同名时,局部变量具有更高的优先级。
示例:使用函数输出年龄
全局变量
示例:
3.lambda函数
lambda 函数的作用是创建匿名函数,是一种声明函数的特殊方式。其中 params 相当于函数接收的参数列表,expr 是函数返回值的表达式。
4.内建函数
Python 除了本身的语法结构,还提供了常用的内建函数。内建函数是程序员经常使用到的方法,可以提高程序的编写效率。如 float()就是内建的函数。内建函数是自动加载的,Python的解释器可以识别。它不需要导入模块,不必做任何的操作,不需要引用就可以调用 。下面开始介绍常用的内建函数。
(1)abs()函数
abs()函数能够返回一个数字的绝对值,语法格式如下:
abs(x)
(2)bool函数
bool()函数返回值是 True 或 False,它是 Boolean(布尔值)的简写,
将参数x 转换为Boolean 类型,当参数是数字时,0 返回False,其他任何值都返回 True。参数是字符串时,None 或空字符串返回 False;否则返回 True。参数是空的列表、元组或字典返回 False;否则返回 True。
(3)float()函数
float()函数用于转换数据为float类型,
参数x可以是字符串或数字
(4)int()
int()函数可以将数据转换为整数
(5)range()
range()函数可以生成一个迭代对象
- 第一个参数 start 表示起始值,是可选参数,默认值是 0。
- 第二个参数 stop 表示终止值
- 第三个参数表示步长,是可选参数,可以是正数或负数,默认值是1
(6)sum函数
sum()函数可以对列表中的元素求和
(7)max函数
max()函数可以返回列表,元组或字符串中最大的元素,如果元素是英文字母,那么字母是“大于”数字的,而小写字母“大于”大写字母
(8)min()函数
min()函数可以返回列表,元组或字符串中最小的元素,与max()的使用相反
二:模块与包
如果编写的程序中类和函数较多时,就需要对它们进行有效的组织分类,在Python 中模块和包都是组织的方式。复杂度较低可以使用模块管理,复杂度高则还要使用包进行管理。
1.模块
模块是 Python 中一个重要的概念,实际上就是包含 Python 函数或者类的程序。模块就是一个包含 Python 定义和语句的文件,把一组相关的函数或代码组织到一个文件中,一个文件即是一个模块。模块的文件名=模块名+后缀.py。模块之间代码共享,可以相互调用,实现代码重用,并且模块中函数名称必须唯一。
(1)模块定义
创建mymodule.py文件,内容如下:
在模块 mymodule 中,定义了 2 个函数,一个加法函数和一个乘法函数。它们处理的问题是同类的,作为一个模块定义。
(2)模块导入
使用模块中的函数时,要先导入模块才能使用,导入有2种方式。在一行导入一个模块,语法如下。
语法:import 模块名
还可以在一行导入多个模块,语法如下:
import 模块名 1[,模块名 2][,模块名 3]...
模块和变量一样也有作用域的区别。如果在模块的顶层导入,则作用域是全局的。如果在函数中导入,则作用域是局部的,其作用域只是所在的函数中。一个模块只能被加载一 次,无论它被导入多少次,可以阻止多重导入时代码被多次执行。在实际编码时,推荐直接在顶层导入。
导入的模块也分几种,有 Python 的标准库模块、第三方模块和应用程序自定义的模块。加载执行时在搜索路径中找到指定的模块,如果是第一次导入,模块将被加载并执行,之后再调用时就不需要再次加载了。
示例:导入标准库模块sys
示例:导入并调用自定义模块mymodule
模块名就是定义的文件名。在调用模块中函数的语句格式是“模块名,函数名”。每个模块都有 name 属性表示模块的名称。
如果不使用模块名,而直接用函数名进行调用,就需要在导入时指定需要使用模块的属 性,一行导入一个模块属性的语法如下。
from 模块名 import 属性名
一行导入模块的多个属性语法如下
:from 模块名 import 属性名 1[,属性名 2][,属性名 3]...
示例:
另外,还可以使用as关键字作为模块或模块属性重新命名
语法:import 模块名 as 模块新名称
from 模块名 import 属性名 as 属性新名称
2.包
当程序中的模块非常多时,可以把模块在进行划分,组织新包。升级就是一个目录,但必须包含一个“ __init__.py ”文件。__init__.py 可以是一个空文件,表示当前目录是一个包。包还可以嵌套使用,包中还可以包含其他子包。
(1)包的使用
导入包中的模块只需要在模块前加上包的名称即可,如按以下方式组织的目录:
projec/ #目录
project.py
subproject/ #子目录
__init__.py #init前后两个下划线
submodel.py
示例:在project.py中调用包 subproject 中 submodel.py 模块示例代码如下
在 subproject 目录下创建 submodel.py
在project目录下创建程序文件project.py
(2)__init__.py
前面使用的是空 -init-.py 文件,也可以在里添加代码,它的作用实际上是初始化包中的公共变量。在第一次使用 import 导入 subproject 包中的任何部分后,会执行包中的__init__.py文件代码
3.常用模块
(1)keyword模块
使用 keyword 模块可以査看 Python 语言的关键字,它的属性 kwlist 包含了所有 Python 关键字的列表。方法 iskeyword(字符串)用于判断参数是否是 Python 的关键字。如果参数是 Python 的关键字,则返回 True;否则,返回 False。
(2)random模块
random模块用于生成随机的数字,整数或字符串,常用方法如下:
方法 | 操作 |
random() | 生成一个随机的浮点数,范围在0.0~1.0之间 |
uniform([上限][,下限]) |
在设定浮点数的范围内随机生成一个浮点数
|
randint([
上限
][
,下限
])
|
随机生成一个整数,可以指定这个整数的范围
|
choice(
序列
)
|
从任何序列中选取一个随机的元素返回
|
shuffle(
序列
)
|
随机打乱一个序列中元素的顺序
|
sample(
序列,长度
)
|
从指定的序列中随机截取指定长度的片断,序列本身不做修改
|
示例:使用random模块生成随机整数,并提取随机元素
(3)sys模块
属性/方法 | 操作 |
version
|
获取解释器的版本信息
|
path
|
获取模块的搜索路径,初始化时使用
PYTHONPATH
环境变量的值
|
platform
|
获取操作系统平台名称
|
maxint
|
最大的
int
值
|
maxunicode
|
最大的
Unicode
值
|
stdin
|
读取信息到
Shell
程序中
|
stdout
|
向
Shell
程序输出信息
|
exit()
|
退出
Shell
程序
|
(4)time模块
time模块包含各种操作时间的方法:
属性
/
方法
|
操作
|
time()
|
获取当前时间戳
|
localtime()
|
获取当前时间的元组形式
|
ctime()
|
获取当前时间的字符串形式
|
asctime(t)
|
将时间转换成字符串,参数
t
是元组形式的时间
|
sleep(secs)
|
按指定的时间推迟运行,参数是推迟的时间,单位是秒
|
Python 中时间有时间戳和元组两种表示形式。时间戳的表现形式是以相对 1970.1.100:80:88 为起点,以秒计算的偏移量,是唯一的值。而以元组的形式表示则共有 9 个元素,分别是 year(4 位数字组成)、month(1-12)、day(1-31)、hours(0-23)、minutes(0-59)、second(8-59)、weekday(8-60 表示周一)、Julian day(1-366,一年里的天数)、DST flag(-1,0 或 1,是否是夏令时,默认为-1)
使用“time.time()”获得的是以秒为单位的偏移量,在 for 循环开始处获得时间戳,循环结束时再获得时间戳,相减后就是循环执行的时间。