生成器、表达式及函数内置
1.什么是生成器? 生成的工具。 生成器是一个 "自定义" 的迭代器, 本质上是一个迭代器。
2.如何实现生成器 但凡在函数内部定义了的yield, 调用函数时,函数体代码不会执行, 会返回一个结果,该结果就是一个生成器。
yield: 每一次yield都会往生成器对象中添加一个值。 - yield只能在函数内部定义 - yield可以保存函数的暂停状态
yield与return: 相同点: 返回值的个数都是无限制的。
不同点: return只能返回一次值,yield可以返回多个值
迭代器对象 python内置生成的迭代器
iter_list = list1.__ iter __()
#自定义的迭代器
def func():
print('from func')
yield 'tank'
res = func()
#当我们通过__ next __取值时,才会执行函数体代码。
print(res.__ next __())
循环10次 for i in range(1,11): print(i) #1~~10 python2: range(1,5) --->[1, 2, 3, 4] python3:range(1,5) --->range对象--->生成器 ---->迭代器 res = range(1,5) print(res)#自定义range功能,创建一个自定义的生成器 #(1, 3) #start --> 1 , end --->5 , move = 2 def my_range(start,end,move = 1): while start < end yield start start += move
面向过程编程是一门编程思想。
面向 过程 编程: 核心是 '过程' 二字,过程 指的是一种解决问题的步骤,即先干什么再干什么 基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式。
优点:
将复杂的问题流程化,进而简单化
缺点:
若修改当前程序设计的某一部分,会导致其他部分同时需要修改,扩展性差。
三元表达式:
可以将if...else...分支变成一行。
语法:
条件成立返回左边的值 if 判断条件else 条件不成立返回右边的值
if 判断条件: 执行 else: 执行 求两个值的大小 通过if...else语法 def max(num1,num2): if num1 > num2: return num1 else: return num2 res = max(100,20) print(res) > 100
def max1(num1,num2): res = num1 if num1 > num2 else num2 return res res = max1(num1,num2) print(res)
可以一行实现生成列表。 语法: list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]
for的右边是循环次数,并且可以取出可迭代对象中每一个值
for的左边可以为当前列表添加值
list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]
list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]
将list中的值,依次取出,添加到new_list中 list = [1, 2, 3, 4] new_list = [] for line in list1: new_list.append(line) print(new_list) #普通方式 new_list = [] for line in range(1,101): new_list.append(line) print(new_list) #列表生成器 list = [f'1{line}' for line in range(1,101)] print(list)
缺点:
浪费资源
生成器生成式: 若数据量过大时采用 () ---> 返回生成器 (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)
优点:
节省资源
缺点:
# 生成一个有1000个值的生成器 g = (line for line in range(1, 1000001)) # <generator object <genexpr> at 0x00000203262318E0> print(g) # 列表生成式实现 list1 = [line for line in range(1, 1000001)] print(list1)
range()
print()
len()
#python内部提供的内置方法
max,min,sorted,map,filter
sorted:对可迭代对象进行排序
max求最大值 max(可迭代对象)
list = [1, 2, 3, 4, 5]
max内部会将list中的值通过for取出每一个值,并且进行判断
print(max(list))
dict1 = { 'tank': 1000, 'egon': 500, 'sean': 200, 'jason': 500 } # 获取dict1中薪资最大的人的名字 # 字符串的比较: ASCII print(max(dict1, key=lambda x: dict1[x])) # 获取dict1中薪资最小的人的名字 print(min(dict1, key=lambda x:dict1[x]))##### sorted: 默认升序(从小到大) reverse:反转 reverse默认是False list1 = [10, 2, 3, 4, 5] print(sorted(list1)) ##### reverse=True--> 降序 print(sorted(list1, reverse=True))
无名字的函数
:左边是参数, 右边是返回值
lambda :
PS: 原因,因为没有名字,函数的调用 函数名 + () 匿名函数需要一次性使用。
注意: 匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义
def func(): return 1 print(func()) # func函数对象 + () print(func())
def (): pass () # + () lambda 匿名(): return 1 func = lambda : 1 print(func()) func = lambda : 1 print()
原文地址:https://www.cnblogs.com/lvguchujiu/p/11857872.html
- TensorFlow从0到1 - 15 - 重新思考神经网络初始化
- python2.7搬运--->TensorFlow - 深度学习破解验证码
- 来学习几个简单的Hive函数啦
- 推荐系统实战-基于用户的协同过滤
- 素数的筛法
- 听说GAN很高大上,其实就这么简单
- python3 解码base64遇到的问题与解决
- TensorFlow从0到1 - 16 - L2正则化对抗“过拟合”
- 使用虚拟环境,搭建python3+scrapy
- Matplotlib基础全攻略
- Python 小爬虫 - 爬取今日头条街拍美女图
- python3使用zookeeper和私钥解密及编码转化配置信息
- Python中os.path.dirname(__file__)的用法
- TensorFlow从0到1 - 18 - TensorFlow 1.3.0安装手记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法