Day10 棒球和球棒与水晶火炉和五彩宝箱
棒球和球棒来到了足球场,要打棒球!但是球场工作人员不同意。棒球和球棒表示不服。球场工作人员说,这样吧,你按我们的规则完成任务,我们就让你们在这里玩。这里有两个长筒,一个竖桶(栈:满足特点 ---> 先进后出)
,一个直桶。
(队列:满足特点 ---> 先进先出。
调用collections模块中的deque()函数就可以获取一个队列对象操作步骤:
步骤一:导入collections模块
步骤二:collections.deque() --> 得到一个列表对象
步骤三:使用队列对象调用存(append)和取(popleft)的函数,完成需求)
你们把5个球投进直筒里,然后从上往下依次打开球,取出里面的部件,组装起来。然后再把另5个球装进直筒里,从桶的另一端把球取出来,同样取出里面部件组装起来。
import collections
'''
演示队列存取数据的特点:先进先出
'''
#获取队列对象:queue
queue = collections.deque()
print(queue,type(queue))
#向队列中添加数据(模拟进队、入队现象)
queue.append('A'))
棒球和球棒顺利完成了任务,将部件取出,组建了一个蓝色的小狮子(lambda [变量参数]:表达式)
。这个小狮子头上并没有小骆驼的标志,它的名字叫lambda(匿名函数(没有名字的函数))
。它嘴里同样可以含球也可以不含球(匿名函数同样可以定义有返回值没有返回值,有参数没有参数的情况)
,可以含各式各样的球,
(分类匿名函数 --> 以参数进行
1).1个参数
2).多个参数
3).默认参数
4).可变参数)
也可以返回东西或不返回东西。小狮子还可以在转笼中进行工作,
匿名函数配合列表对象使用lt = [lambda x:x ** 2,lambda x:x ** 3,lambda x:x ** 4]
在字典中工作。
匿名函数配合字典对象使用
key = 'C'
dic1 = {
'A':lambda :2*2,
'B':lambda :3*3,
'C':lambda :4*4
}
print(dic1[key]())
棒球和球棒非常喜欢这只蓝狮子,就和他一起玩起棒球来。但一只棒球不够用,所以他们要管理员给他们多拿几个棒球。管理员从操纵室按下开关,一个透明度火炉子一样的东西从天而降到球场中央。炉子上刻着佛印的头像,炉内是好几个叠在一起的水晶球。
生成器中是没有真实数据存在的,所以我们是不能直接使用len()函数来尝试得到其长度;
如果我们这么做了,错误提示:no len()
炉子的底部是个能打开的开关,每打开一次只能出来一个水晶球。
它内部封装了一套公式/算法,只有等到需要调用/执行数据的时候 --》执行next()函数
才会将公司计算得到的数据结果返回给程序#使用next()函数来得到每一次generator中的内容
当然,佛印师傅能一次性全把水晶球拿出来。
方式二:使用循环处理,这种方式不会过量的调用内部表达式执行,不会报错,比较友好
gen = (x for x in range(5))
for g in gen:
print(g)。
当球被全部拿出后,就没有球可以拿了(#generator对象中的数据内容只能被解析使用一次,不可逆;一旦调用多了,直接报错了)
。棒球不开心了,说那我要是在其他地方就没有球玩了,这不行啊。这时,管理员笑嘻嘻的拿出了一个红色的大海螺,并对棒球说,你把这个大海螺放到狮子肚子上的出口处,狮子就会变成和透明火炉一样的容器。就能吐出一样的水晶球啦。
(定义函数,在函数内部需要使用关键字yield来记录返回的generator对象的数据公式;
执行还是通过next()函数来实现了
def func(n):
lt = []
for i in range(1,n + 1):
if i % 2 == 0:
lt.append(i)
yield i
棒球和球棒谢过管理员,但同时也产生了疑问?这水晶球和普通的一盒球有什么区别呢?管理员告诉棒球,凡是能被佛印师傅一个一个数球的容器都属于迭代对象(凡是可作用于for循环的对象都是Iterable(可迭代对象)类型)
,像什么牛肉丸串,大列表、字典、大饼、橙小车还有水晶火炉等。但是只有那些有控制出口开关的才能成为迭代器。
1).必须是一个可迭代对象
2).可以被next()函数所调用的
凡是可以作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
如果要判断是不是迭代对象,可以用采蘑菇的小姑娘箩筐中的一个宝盒(collections.Iterable(类型)配合内置函数isinstance())
,宝盒里有个变色蝴蝶,它能分辨出这个容器是不是迭代对象。
使用collections模块中的Iterable类型配合isinstance(obj,type)内置函数来判断isinstance(obj,collections.Iterable)
宝盒里还有个变色小龙,它能分辨出这个容器是不是迭代器对象。
使用collections模块中的Iterator类型配合isinstance(obj,type)内置函数来判断isinstance(obj,collections.Iterator)
如果迭代对象想变成迭代器对象,就是想加上一个开关的话,就得请双蛇洞中的小白龙了。
将可迭代对象转换为迭代器对象
内置函数:
iter(iterable)
it1 = iter(lt)
棒球越听越发感兴趣!于是就去找采蘑菇的小姑娘的神奇箩筐。管理员告诉他神奇箩筐在双蛇洞里。棒球和球棒来到了双蛇洞门前。发现门前有很多五彩斑斓的宝箱排列在洞门两侧(模块(model):概念:在python中.py结尾的文件,我们称为模块;作用:将类、函数、属性...内容定义其中)
。五彩斑斓的宝物分三种,一种是双蛇洞内本来就有的(.标准库模块:安装完python环境之后就存在的模块,这些模块我们如果想要使用,导入即可)
,如五彩魔方(random)
,五彩钟表(time)
,五彩机器人(os)
,采蘑菇的小姑娘的五彩箩筐(collections)
,五彩苹果树(math)
。门口的五彩宝箱是人为造出来的(在项目开发过程中,整个团队中程序员自己定义,可以给自己、别人进行调用)
,还有一些是从国外进口的宝物,首先要经过聪明的管家机器人的同意(打开cmd --> 输入pip -V(此操作查看是否安装完成pip))
,然后让轿夫将该宝物抬进洞里(安装某个第三方模块:pip install 模块名)
。轿夫有宝物的详细说明(查看某个第三方模块的详细信息:pip show 模块名)
,并且轿夫还有张所有抬进的宝物的完整清单(查看当前安装的所有第三方模块:pip list)
,当然,如果不想要某个宝物了可以让轿夫将其抬走(删除某个第三方模块:pip uninstall 模块名)
。如果要用宝物或者宝物里的东西,可以直接将宝物,或者宝物里的一些部件拿到你的封闭的工作室。
1).精确导入:
举例:
import time
from random import randint
from math import pi,
也可以直接全部导入
2).模糊导入:
举例:
from math import *
from os import *
在导入的时候,你还可以给宝物或者里面的东西起名字,只要你把之前的名字覆盖住就可以了。
给导入的模块或者函数、属性起别名:
使用as关键字来实现
【注意】:如果一旦给模块、函数、属性起了别名,原本的名字就不可用了。
如果一旦给模块、函数、属性起了别名,原本的名字就不可用了;
from random import randint as r
有的自己做的宝箱里的宝物不想别别人调用,就用一条四节铁链将其锁住。
代码:
if __name__ == '__main__': 此代码的作用是将不想被导入加载的代码定义其中
棒球还在洞门前的广场正中央见到一个悬在半空的布口袋,里面装的是有关联的宝物的名字清单。
"包"的概念:package
创建一个python package,创建成功就是一个所谓的python的包;
它的作用:将多个有关联的模块定义在其中,方便之后的维护和管理