0318-SPACE 0318-SPACE

python中的一些进阶语法


作者: LLL 浏览量:621 阅读量:1 发布:2021年11月8日 21:06 更新:2021年11月8日 21:06 生成器、迭代器 三元表达式 推导式 编辑文章 删除文章
预计阅读时长:2分2秒

    最近在csdn上看了一些关于python的进阶语法,感觉写的确实不错,在开发中特别实用,有的虽然很少见,但是功能确实特别强,所以索性自己将其总结了一下,有些自己用的很俗就没有写。

 

1.列表推导式

#基本格式:[表达式 for 变量 in 旧列表 if 条件]

#携带if
#例:生成100以内除以2余数为0的列表(1到100的偶数列表)
list1=[i for i in range(1,100) if i%2==0]
print(list1)


#携带if..else
#例:1到100,如果为偶数除以2,如果为奇数乘以2,生成新的列表
list2=[i*2 if i%2 else i/2 for i in range(1,100)]
print(list2)

 

2.集合推导式

#{}类似于列表推导式,在列表的基础上添加了去除重复项
list3=[i for i in range(1,10)]
set1={x for x in list3}
set1.add(1)
print(set1)

3.字典推导式

dict_demo={
    'a':1,
    'b':2,
    'c':3,
    'd':4,
    'e':5,
}

new_dict={ item[1]:item[0] for item in dict_demo.items()}
#dict_demo.items():[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]

print(new_dict)

 

4.生成器

# 通过列表生成器,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的。并且,我们
# 创建一个包含100万个元素的列表,那后面绝大数元素占用的空间都白白浪费了。所以,如果列表元素可以
# 按照某种算法推到出来,那我们就可以在循环的过程中不断的推出后续的元素,这样就不必创建完整的list,
# 从而节省大量的空间。在python中,这种一边训循环一边计算的机制,称为生成器。

# 得到生成器的方式有两种:1.通过列表推导式得到生成器 2.借助函数完成
# []是列表推导式 ()是生成器
g = (x for x in range(20))
print(type(g), g)
for x in g:
    print(x)


# 只要函数中出现了yield关键字,说明函数就不是函数来,是一个生成器,借助next()得到元素
def func_genexpr():
    n = 0
    while n < 100:
        n += 1
        yield n


g2 = func_genexpr()
print(next(g2))
print(next(g2))
print(next(g2))


# 应用生成器实现斐波那契数列:生成斐波那契数列的前n项
def genexpr_fib(n):
    # 1 1 2 3 5 8
    i = 0
    a, b = 0, 1
    while i < n:
        yield b
        a, b = b, a + b
        i += 1

    # return '没有更多元素了'  # 当while循环执行之后,返回return的值


print('*' * 50)
g3 = genexpr_fib(10)


while True:
    try:
        print(g3.__next__())
    except:break

# 生成器的应用
# 进程>线程>协程
# 概念:比如迅雷下载1G的视频,叫做进程,然后迅雷将1G的电影按顺序分为10份,这10份叫做线程,然后
# 其中的一份再分为5份,每一份就叫做协程。
def task1(n):
    for i in range(n):
        print(f'正在般第{i}块砖。。。')
        yield None


def task2(n):
    for i in range(n):
        print(f'正在听第{i}首歌。。。')
        yield None


g1 = task1(6)
g2 = task2(6)
while True:
    try:
        g1.__next__()
        g2.__next__()
    except:
        break

 

5.迭代器

#可迭代的对象:生成器 元组 列表 集合 字典 字符串

#迭代器只能往前不能往后,可以被next()函数调用,不断返回下一个值的对象称为迭代器:Iterator
#生成器是可迭代的,并且也是迭代器,列表是可迭代的,但不是迭代器。
#可以通过iter函数将可迭代的对象变成一个迭代器

#判断一个元素是否可迭代
from collections import Iterable
list1=[1,23]
list1_iterable=isinstance(list1,Iterable)
print(list1_iterable)

#将list变成一个迭代器
iter1=iter(list1)
while True:
    try:
        print(iter1.__next__())
    except:break

 

6.三元表达式

#格式
#result = 为真时的结果 if 条件 else 为假时的结果
res1=1 if 1==1 else 0
print(res1)

#结合匿名函数的使用
a_list=[1,1,1,1,1]
b_list=[2,2,2,2,2]
c_list=[3,3,3,3,3]
b_res=map(lambda x,y,z:x+y+z if x else x-y-z,a_list,b_list,c_list) #map函数的返回值是一个可迭代的对象
print(list(b_res))
while True:
    try:
        print(b_res.__next__())
    except:break

#三元表达式的一个变种
flag=1
b=['A','B'][bool(flag)] # bool(flag)=True-->1-->['A','B'][1]-->'B'
print(b)

 

7.断言

# “断言”是一个心智正常的检查,确保代码没有做什么明显错误的事情。这些心智正常的检查由assert语句执行,如果检查失败就会
# 抛出异常。
# 格式: assert 条件,当条件失败要执行的语句

# 可以将断言这样理解:我断言这个条件为真,如果不为真,程序中就有一个缺陷(bug)。
# 不像try-except语句,如果assert失败,程序就会崩溃,抛出异常,这样就缩短了你寻找bug的时间
# 断言是针对开发者的,而不是用户

a = 1
assert a == 0, 'value error,a!=1'

 

 

 

 

 

 

 

 


 {[collection_status]}  {[likes]}

有什么想对作者说的吗?

发 表
{[ comment.user.username]} {[comment.time]}
删除
{[comment.content]}
热文排行榜
日热榜 周热榜 月热榜

标签
golang 个人介绍 开发环境 最大之数组合 gui mro nginx 函数模板 清单 并发编程 小细节 matlab 图像处理 oracle python leetcode 多线程 c++ 人工智能 插入排序 seaborn 爬虫学习 动态规划 负载均衡 数学模型 虚拟环境 字符集 js 异常 面向对象 多态 异或 冒泡排序 循环语句 容器 Django 高级变量类型 数据库 单调栈 java基础 web aiohttp bug 基础 形态学操作 最短路径 闭包 桶排序 with tcp 数字图像 双指针 爬虫 算法 OpenCV 开发 开机自启 else 选择排序 装饰器 排序算法 HTM 数据处理 测试 二分法 c# python基础 存储异常 java 学生成绩管理系统 ER图 笔记 GUI编程 二叉树 序列 git 梯度计算 数据结构 多进程 table 建模 数据库编程 巩固 三数之和 实验报告 可视化 数据分析 可控自启 上下文管理器 生成器、迭代器 Linux 存储泄漏 角点检测 ip 数据类型 asyncio 动态 开发记录 协程 开发工具 numpy学习 特性 人脸检测 二叉排序树 整蛊 Web开发编程 面经 pygame 几何变换 html 数组 异步 有效单词数 十进制 内存管理 霍夫变换 飞机大战 drw restful 关于博主 penCV 可迭代对象 对象引用 Lcss pl css 基础爬虫框架 视频处理 插件 MSE 浅拷贝 迷宫求解 阶层 初学 图像去噪 层次遍历 defaultD 属性 边缘检测 暴力解法 生成器 回溯 优化更新 生成器函数 贪心算法 深浅拷贝 三元表达式 高阶函数 并查集 文件 最小生成树 z最短距离 os模块的学习 admin pytorch pyecharts 可达鸭 穷举法 模块 多继承 排序 无限弹窗 运算符重载 dfs CPUID 美赛 mysql cursor 函数 数据库原理 迭代器 安装 settings turtle dp yield from 基数排序 降维 绘图 线性回归 目标追踪 强类型 前端开发 pandas 小游戏 分布式 流程控制 文件目录指令 变量 ckeditor 数学建模 命令 对象 oracle基础 网络编程(书) 推导式 docker bfs 语法进阶 模板 反向传播 iter() crud 计数排序 drf 漫威 解析性 三次握手 归约函数 查询 目标跟踪 plt 深拷贝 hash表 图像直方图 题库链接 game Windows 网络编程 线索化 动态数组 复习 JavaScript 版本控制 存储过程 视频读写 脚本 二进制 性能 面向对象的特性 Haar特征 环境搭建 翻转 数据 正则表达式 静态资源 ARP 地址 集群 虚函数 定时任务 归并排序 numpy

推荐


留言
{[ message.user.username ]}({[ message.time ]})

{[ message.content ]}