让python飞:形象理解python 栈、队列、lambda、生成器、迭代器、模块

在这里插入图片描述

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的包; 
它的作用:将多个有关联的模块定义在其中,方便之后的维护和管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值