提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、集合
- 1.集合的定义
- 二、使用集合列表去重
- 导包
- 二、函数
- 1.函数介绍
- 2.定义函数
- 3.调用函数
- 4.函数实现登录案例
- 5.函数的返回值
- 三、模块和包
- 1.模块的概念(Module)
- 2.模块的导入方式-import
- 3.模块的导入方式-from...import
- 3.模块的导入顺序
- 4.__name__ 属性
- 5.包(Package)
- 6.包操作案例
- 7.断言
- 四、异常
- 1.捕获异常
- 2.捕获特定异常类型
- 3.捕获未知类型异常
- 4.异常捕获完整语法
- 5.抛出异常
一、集合
1.集合的定义
- 说明:集合中的数据是没有重复的, 主要应用列表中的数据去重
二、使用集合列表去重
- 1.使用随机数生成 10 个 1-20 之间的随机数
- 2.对列表中的数据进行去重
导包
import random
#实现
test_data = []
for i in range(11):
item = random.randint(1, 20)
test_data.append(item)
print(test_data)
print(set(test_data))
二、函数
1.函数介绍
- 说明:把具有独立功能的代码块组织为一个小模块,在需要的时候调用
- 作用:对具备相同逻辑的代码进行封装, 提高代码的编写效率, 实现对代码的重用
2.定义函数
- 语法:def 函数名(参数1, 参数2…):
函数封装的代码,可以使用传递进来的参数
pass - 说明:
1.def是英文define 的缩写
2. 函数名最好能够表达函数内部封装的代码的功能, 方便
后续的获取调用[见名知意]
3. 函数名命名遵循标识符命名规则: 字母, 数字, 下划线, 不
能以数字开头, 不用使用系统关键字
4. 定义时候的参数称为形式参数,简称形参
3.调用函数
- 语法:函数名(参数1, 参数2…):
- 说法:
- 只定义函数, 不调用函数, 函数永远不会被执行
- 不能将 函数调用 放在 函数定义 的上方,否则将会出现错误
- 函数调用时的参数称为实际参数,简称实参
4.函数实现登录案例
- 需求:当手机号为”13488888888”,输出“账号成功”;否则“账号错误”
5.函数的返回值
- 语法:def 函数名(参数…):
…
return xxx - 说明:如果想在函数调用处获取函数定义内部的某个数据, 需要使用 return 关键字返回结果
- 错误样例:没有返回值的函数,在函数调用处获取的结果都是None
def demo():
name = “admin”
print(name) # admin
result = demo()
print(result) # None
- 注意事项:
• return 关键字可以将函数定义内部的任意数据, 返回给函数调用处
• return 关键字也可以单独使用, 表示提前结束函数调用, 但不返回任何数据
def demo():
name = “admin”
return name
print(name) # 注意:return 表示返回,后续的代码都不会被执行
result = demo()
print(result) # admin
三、模块和包
1.模块的概念(Module)
l 每一个以 .py
结尾的 Python 代码文件都是一个模块
l 模块名
同样也是一个 标识符
, 需要符合标识符的命名规则
l 在模块中定义的 全局变量
、函数
、类
都是提供给外界直接使用的 工具
l 模块就好比是工具包, 要想使用这个工具包中的工具, 就需要先 `导入模块
2.模块的导入方式-import
- 语法:
import 模块名1, 模块名2
建议:在导入模块时,每个导入独占一行
import 模块名1
import 模块名2
如果模块的名字太长,可以使用 as 指定模块的名称,以方便在代码中的使用
import 模块名1 as 模块别名
- 使用方式:导入之后,通过 模块名. 使用模块提供的工具(全局变量、函数、类)
- 注意:模块别名应该符合大驼峰命名法
3.模块的导入方式-from…import
- 如果希望 从某一个模块 中,导入 部分 工具,就可以使用 from … import 的方式
- import 模块名 是 一次性 把模块中 所有工具全部导入,并且通过 模块名/别名 访问
- 语法:
#从 模块 导入 某一个工具
from 模块名1 import 工具名
- 使用方式:不需要通过 模块名.调用,可以直接使用模块提供的工具(全局变量、函数、类)
- 注意事项:
- 允许一行导入多个工具名: from 模块名 import 工具名1, 工具名2
- 如果两个模块, 存在同名的工具, 那么后导入模块的工具, 会覆盖掉先导入的工具
3.模块的导入顺序
- Python 解释器在导入模块时的顺序是:
- 查找当前目录下指定模块名的文件, 如果有就直接导入
- 当前目录下如果没有, 则再查找系统目录下的模块
- 注意:给模块名时, 务必不要和系统模块重名, 否则会直接影响系统模块的导入!
4.name 属性
- 语法:
#根据 name 判断是否执行下方代码
if name == “main”:
pass
- 作用: 处于该条件下的代码, 只有是在当前模块内执行时, 才会被运行
- 原理: Python 内置属性 name 的主要作用是记录一个字符串信息
l 当被其他模块导入后运行时, name 属性值为模块名
l 当在模块内运行时, name 属性值为 _main - 注意:一般情况下, 都需要将模块内的调试代码置于该条件下, 以防止被其他模块导入后, 调试代码也参与执行
5.包(Package)
- 说明:包:(Package)是一个包含多个模块的特殊目录
- l 目录下有一个特殊的文件
__init__.py
l 包名 的命名方式和 变量名 一致
l 作用:python文件较多时,方便分目录管理维护 - 提示:提示:在 PyCharm 中支持直接创建包, 工程根目录上鼠标右键 -> New -> PythonPackage
- 常用寻包方式
6.包操作案例
- login.py
#/api/login.py
def login(phone):
if phone == “13488888888”:
return “账号正确”
else:
return “账号错误”
- test_login.py
#导包
from api.login import login
#调用
print(login(“13488888888”))
#断言 assert
assert “账号正确666” == login(“13488888888”)
7.断言
- 说明:断言:自动判断实际结果和预期结果
- 用法:
① 断言相等:assert 预期结果 == 实际结果
② 断言包含:assert 预期结果 in 实际结果 - 结果:
通过PASS: 不显示
失败FAIL: 报错并提示“AssertionError”
四、异常
1.捕获异常
- 语法:
try:
#尝试执行的代码
except:
#出现异常时执行的代码
基本语法格式
- 说明:
try:尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
lexcept:如果有异常捕获,下方编写捕获到异常,处理失败的代码
2.捕获特定异常类型
- 语法:
try:
#尝试执行的代码
except 异常类型:
#出现异常时执行的代码
语法格式
- 注意:
- 捕获特定异常类型, 能够实现仅在特定异常类型出现时, 代码再做
对应的处理 - 具体的异常类型可以先行从代码执行的报错信息中获取, 在设置捕获异常操作
3.捕获未知类型异常
- 语法:
try:
#尝试执行的代码
except Exception as e:
#出现异常时执行的代码
print(‘异常信息为: {}’.format(e))
- 说明:
l 如果希望程序无论出现任何错误,都不会因为Python解释器抛出异
常而被终止,可以捕获 Exception
l except Exception as e: e表示捕获到的异常对象,记录异常的错
误信息,e为惯用变量名,可以自定义
4.异常捕获完整语法
- 语法:
try:
#尝试执行的代码
pass
except 错误类型1:
#针对错误类型1,对应的代码处理
pass
except 错误类型2:
#针对错误类型2,对应的代码处理
pass
except Exception as e:
#打印错误信息
print(e)
finally:
#无论是否有异常,都会执行的代码
pass
- 说明:finally: 无论是否出现异常都会执行
5.抛出异常
- 语法:
#创建异常对象
ex = Exception(“异常描述信息”)
#抛出异常对象
raise ex
- Python 中提供了一个 Exception 异常类
- 在开发时,如果满足特定业务需求时希望抛出异常,可以:
- 创建 一个 Exception类 的 对象
- 使用 raise 关键字 抛出 异常对象