python assert 用法_python必读入门到进阶汇总

本文介绍了Python语言的基础及应用场景,特别强调了爬虫技术的实际应用价值,包括数据抓取和分析等方面。学习Python不仅可以从事Web开发等工作,还能在数据分析等领域进行转型。

什么是python

Python是一种广泛使用的高级编程语言,属于通用型编程语言,是完全面向对象的语言。函数、模块、数字、字符串都是对象。经常被用于Web开发、GUI开发、操作系统、科学计算等应用范围。

学了python能做什么

许多人对编程的热情始于好奇,终于停滞。

距离真枪实干做开发有技术差距,也无人指点提带。总是刷题觉得没意思,但也不知当下水平能干嘛。

就在这样的疑惑循环中,编程技能止步不前。

爬虫是最好的进阶方向之一。

从各大网站爬取商品折扣信息,比较获取最优选择。

对社交网络上发言进行收集分类,生成情绪地图,分析语言习惯。

爬取网易云音乐某一类歌曲的所有评论,生成词云。

按条件筛选获得豆瓣的电影书籍信息并生成表格

...

应用实在太多,几乎每个人学习爬虫之后都能够通过爬虫去做一些好玩有趣有用的事。

无疑,大数据时代,信息是海量的。谁能从海量信息中高效准确地提取出有价值地信息,谁就是赢家

时间即金钱,效率即价值。

同样是收集信息,编写爬虫脚本+测试+运行只用几小时,还可以不断复用。人工收集,低效繁琐,需要几天。孰高孰低,不言而喻。

同样是求职,有数据挖掘背景,有爬虫/反爬经验的求职者在薪资和机遇上有明显的优势。会写爬虫,意味着更多的机会,更高的薪资

2e7c2857edb26656adcdd13efd2a5740.png

2e7c2857edb26656adcdd13efd2a5740.png

学好 Python,之后往数据分析、数据挖掘、人工智能、深度学习等多个方向都可以顺利转型。

条条大路通罗马。

先给大家分享一份「Python 知识图谱」,可以让大家对 Python 核心知识有个清晰的认识。

24d1440969d71e9ca1e306d56fadb96c.png

必学知识:【Python基础数据结构】【Python基础语法】【文件操作】【错误与异常处理】【Python面向对象】【模块化】

90e25b3f7b51daddb6ab4d24b1480118.png

进阶Python核心知识

必学知识:【Python协议】【Python高级语法】【Python正则表达式】【Python并发编程】【垃圾回收机制】【项目实战】

29ceeeff3e9a509414124d6bbfaa895e.png

规范:编写高质量的Python程序

这部分着重于教你把程序写得更加规范、更加稳定,用具体的编程操作和技巧,教你提高代码质量。比如,如何合理地分解代码、运用 assert,如何写单元测试等等。

d788210dd358740ec8f58a63616f80f3.png

Python实战,串联整个知识体系:带你搭建量化交易系统

必学知识点:【RESTful】【Socket】【Pandas】【Numpy】【Kafka】【RabbitMQ】【MySQL】【Django】

真正要掌握一门编程语言,仅仅学会分散的知识点是不够的,还必须要把知识点串联起来,做一些中型的项目才能有更深的领悟与提高。这一点是我非常认同的。这部分,景霄用量化交易系统这个具体的实战案例,带你综合运用前面所学的Python知识。

45ce59b2e714c4b5a325ff8681b1f12c.png

python有趣用法

0.for-else用法循环正常结束则执行else语句。一般用于循环找符合条件的元素,如果找到则break调出循环,不会触发else;如果没有找到(完整运行循环)则print not found

b74a5ffff1c6bd5f97ab8f7491d912ca.png

1.or的用法

python中x or y表示如果x为真就是x的值,否则为y的值

我们会经常看到类似这样的用法(比如函数的一个value参数没有设置默认值,这样使用就允许它不赋值)

value = value or {}
# 相当于
value = value if value else {}

2.and的用法

python中x and y表示如果x是假,结果就是x的值,否则就是y的值

x and y and z多个and连接时,如果全是真结果就是最后一个的值;如果中间有假的值,结果就是第一个假的值

举一个例子

def not_empty(a):
    return a and a.strip()

not_empty(' a ')
# 值为 'a'
not_empty(None)
# 不会报错(如果 return a.strip() 就会报错)

# 在处理None的问题上相当于
def not_empty(a):
    if a is None:
        return None
    else:
        return a.strip()

细细品味and和or的差别,他们逻辑类似,但是实现的功能是不可以相互替代的

  • or 是结果如果不满意有个善后工作
  • and是要做一件事之前先检验一下,不能做就不让它做

3.单行if-else

a = 1
b = 3 if a == 1 else 2
print('it is one' if a == 1 else 'no')

3e104dc22ac731240b84eae117c3c8fc.png

4.迭代器传入函数中不用加括号

# 一般是这样
a = (i for i in range(10))
sum(a)
# 我们可以这样
sum((i for i in range(10)))
# 但我们还可以这样
sum(i for i in range(10))
# 类似的有
' '.join(str(i) for i in range(10))

python有趣的解包用法

python中的解包可以这样理解:一个list是一个整体,想把list中每个元素当成一个个个体剥离出来,这个过程就是解包,我们来看下面这些例子。

1.将list中每个元素赋值给一个变量

>>> name, age, date = ['Bob', 20, '2018-1-1']
>>> name
'Bob'
>>> age
20
>>> date
'2018-1-1'

d06a5a688360bc1866ad285a35498ba5.png

2.可迭代对象都可以这样做

# 列表
>>> a,b,c = ['a', 'b', 'c']
>>> a
'a'

>>> a,b,c = enumerate(['a', 'b', 'c'])
>>> a
(0, 'a')


# 元组
>>> a,b,c = ('a', 'b', 'c')
>>> a
'a'

# 字典
>>> a,b,c = {'a':1, 'b':2, 'c':3}
>>> a
'a'

>>> a,b,c = {'a':1, 'b':2, 'c':3}.items()
>>> a
('a', 1)


# 字符串
>>> a,b,c = 'abc'
>>> a
'a'

# 生成器
>>> a,b,c = (x + 1 for x in range(3))
>>> a
1

如果可迭代对象包含的元素和前面待赋值变量数量不一致,则会报错。但是可以通过*来表示多个元素

3.星号的使用

比如我们要计算平均分,去除最高分和最低分,除了用切片,还可以用解包的方式获得中间的数值

>>> first, *new, last = [94, 85, 73, 46]
>>> new
[85, 73]

*来表示多个数值

# ---------------------------------- # 2.1 基础夹具模式 # ---------------------------------- @pytest.fixture def api_client(): """ 🛠️ 通用API客户端(函数级作用域) - 返回一个包含基础URL的字典 - 可供多个测试函数复用 - 每次测试函数调用都会创建一个新的实例 """ return {"base_url": "http://127.0.0.1:5000"} def test_with_client(api_client): """ ✅ 夹具自动注入演示 - api_client 是通过 fixture 提供的 - 自动注入到测试函数中 - 用于发送GET请求验证服务是否运行 """ response = requests.get(f"{api_client['base_url']}/get") assert response.status_code == 200 # ---------------------------------- # 2.2 进阶夹具技巧(适配本地服务) # ---------------------------------- @pytest.fixture(scope="module") def auth_token(api_client): """ 🔐 模拟认证令牌(模块级夹具) - scope="module":整个测试模块共享一个实例 - 模拟认证流程,返回一个模拟的 token - 用于后续需要认证的测试 """ return "simulated_token_12345" @pytest.fixture def authenticated_client(api_client, auth_token): """ 🔒 带认证的客户端(组合夹具) - 组合使用 api_client 和 auth_token - 添加 Authorization 请求头 - 用于需要认证的接口测试 # 🧠 拷贝知识(零基础读) ## 浅拷贝(当前使用) client = api_client.copy() → 创建新对象,但仅复制第一层内容 ✔️ 优点:速度快,内存占用小 ✔️ 适用场景:对象只有简单属性(如当前只有headers) ❌ 风险:若对象包含嵌套结构(如headers里有字典),内层数据仍共享 ## 深拷贝(备选方案) import copy client = copy.deepcopy(api_client) → 完全独立的新对象 ✔️ 优点:彻底隔离,绝对安全 ❌ 缺点:速度慢,内存消耗大 ✔️ 适用场景:对象有多层嵌套数据(如配置字典含子字典) # 当前选择浅拷贝的原因: 1. api_client通常是简单结构(如 {base_url, headers}) 2. headers属性我们直接覆盖替换,不修改原有内容 3. 高性能需求(测试执行速度优先) """ # 创建新对象(隔离原始api_client) client = api_client.copy() # 📌 浅拷贝操作 # 添加认证头(不影响原始api_client) client["headers"] = {"Authorization": f"Bearer {auth_token}"} return client # =========================================================================== # 测试用例(展示实际调用流程) # =========================================================================== def test_public_api(api_client): """🌐 测试公共API(无需认证) 输出: [创建API客户端] → 函数级作用域(每个测试独立) [测试1] 调用公共API 使用客户端: {'base_url': 'http://127.0.0.1:5000'} """ print("\n[测试1] 调用公共API") print(f" 使用客户端: {api_client}") assert "base_url" in api_client def test_private_api1(authenticated_client): """🔒 测试私有API1(需要认证) 输出: [创建API客户端] → (新实例) === 生成认证令牌 === → (首次调用模块级夹具) 使用API客户端: http://127.0.0.1:5000 [构建认证客户端] → 原始API客户端ID: 140000000 | 新客户端ID: 140000001 [测试2] 调用私有API1 认证客户端: {'base_url': 'http://127.0.0.1:5000', 'headers': {...}} """ print("\n[测试2] 调用私有API1") print(f" 认证客户端: {authenticated_client}") assert "headers" in authenticated_client def test_private_api2(authenticated_client): """🔒 测试私有API2(需要认证) 输出: [创建API客户端] → (新实例) [构建认证客户端] → (重用auth_token) 原始API客户端ID: 140000002 | 新客户端ID: 140000003 [测试3] 调用私有API2 认证客户端: {'base_url': 'http://127.0.0.1:5000', 'headers': {...}} """ print("\n[测试3] 调用私有API2") print(f" 认证客户端: {authenticated_client}") authenticated_client["test_flag"] = True # 修改副本 def test_public_api_again(api_client): """🌐 再次测试公共API(验证状态隔离) 输出: [创建API客户端] → (全新实例) [测试4] 再次调用公共API 原始API客户端状态: {'base_url': 'http://127.0.0.1:5000'}(无test_flag) """ print("\n[测试4] 再次调用公共API") print(f" 原始API客户端状态: {api_client}") assert "test_flag" not in api_client # 验证隔离性 夹具讲的还是不好,没懂什么意思
最新发布
09-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值