python笔记-day10-迭代器生成器和模块

前言
python语法学习,留给需要的人,懂得都懂!!

# coding=utf8
# @time:2022/4/19 20:56
# Author 浩宇

# 一、迭代器
# 1.什么是迭代器()
'''''''''
1)迭代器是容器型数据类型
2)迭代器无法直接获取所有的元素,只能一个一个的取(迭代器的取指的是拿出来,而且只出不进);也无法通过len统计元素个数
3)创建迭代器的方法:a.将其他序列装换成迭代器
                    b.生成器
'''''''''
'''''''''
list1=[1,20,4,56]
print(list1)    # [1, 20, 4, 56]
print(len(list1))   # 4

i1 = iter(list1)
print(i1,type(i1))  # <list_iterator object at 0x0000029522C71220> <class 'list_iterator'>
'''''''''
#  printe(len(i1))  # 迭代器无法通过len统计个数


# 2.获取元素
# 不关以什么杨的方式获取到了迭代器中的元素,那么这个元素在迭代器中就不存在了
'''''''''
1)获取单个元素
next(迭代器)

举例:
list2=[11,20,4,56]
i2 = iter(list2)
print(next(i2)) # 11
print(next(i2)) # 20

2)遍历
for 变量 in 迭代器:
    循环体

举例:
i3 = iter(range(5))
for x in i3:
    print(f'x:{x}')
'''''''''

  

# 二、生成器
# 1.什么是生成器(generator)
'''''''''
1)感性的认识
生成器是一种特殊的迭代器
生成器可以理解成生产数据的机器,在存储的时候保存的是产生数据的算法而不是数据本身
2)理性的认识
调用带有yield关键字的函数就可以得到一个生成器
(如果一个函数中有yield,那么调用这个函数不会执行函数体,也不会获取返回值。函数调用表达式的值是一个生成器对象)
语法:

'''''''''
# 2.怎么去创建生成器
'''''''''
def func1():
    yield
    print('====')
    return 100

func1()
result = func1()    # result就是一个生成器
print(result)
'''''''''

# 3.生成器产生数据的能力怎么确定
'''''''''
1)能创建多少个数据?有哪些?
a.执行完生成器对应的函数会遇到几次yield,那么这个生成器就可以创造多少个数据
b.每次遇到yield,yield后面的值是什么,对应创造的数据就是什么

举例1:
def func2():
    yield 10
    yield 100
    yield 1000

gen1 = func2()
print(next(gen1))   # 10
print(next(gen1))   # 100
print(next(gen1))   # 1000
——————————————————————————————————————
举例2:
def func3():
    for x in range(5):
        yield x**10

gen2 = func3()
for x in gen2:
    print(f'x:{x}')
# x:0
# x:1
# x:1024
# x:59049
# x:1048576
'''''''''

# 4.生成器产生数据的原理
# 生成器对应的函数在调用函数的时候不会执行函数体,只有在获取生成器中的数据的时候才会执行函数体
# 每次获取数据的时候,都是从上一次结束的位置开始执行函数体,直到遇到yield就停下来,将yield后面的数据作为结果返回,并且记录结束位置
# 如果是next去取,执行的时候如果遇到函数结束都没有遇到yield就会报错!
'''''''''
# 举例:
def func4():
    print('===1===')
    yield 10
    print('===2===')
    yield 20
    print('===3===')
    yield 30
    print('===4===')
    yield 40
    print('===end===')

gen3 = func4()
print('第一次取值:',next(gen3))
print('第二次取值:',next(gen3))
print('第三次取值:',next(gen3))
print('第四次取值:',next(gen3))
# print('第五次取值:',next(gen3))
'''''''''

'''''''''
# 练习:
# 练习1:写一个生成器能够产生指定前缀指定长度的学号?
# 前缀:py,长度:4    py001~py9999
# 4 - 1~9999;10**4-1
# 3 - 1~999 ;10**3-1
# 2 - 1~99  ;10**2-1
def create_study_num(pre,length):
    for x in range(1,10**length):
        result = pre+str(x).zfill(length)
        yield result

nums = create_study_num('py',4)
print(next(nums))
print(next(nums))
print(next(nums))
'''''''''




# 三、模块
# 1.什么是模块
# 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py


# 2.怎么在一个模块中使用另外一个模块的内容
'''''''''
注意:如果一个模块想要被其他模块使用,那么这个模块在命名的时候必须符合标识符的要求
一个模块想要使用另外一个模块中的内容,必须先导入:
1)import 模块名    -   能够使用模块中所有的全局变量;使用的时候通过”模块名.“的方式
2)from 模块名 import 变量名1,变量名2,...     -   能够使用模块中指定的变量;变量直接使用
3)模块重命名:import 模块 as 新模块名
4)变量重命名:from 模块 import 变量 as 变量数名
5)导入所有变量:from 模块名 import *
'''''''''

# 1)第一种导入方式:import
# import test
# print(test.x)
# test.test_func()


# 2)第二种导入方式:from ... import ...
# from test import x,test_func
# print(x)
# test_func()


# 3)第三种导入方式:模块重命名
# import test as TS   -   把原test模块重命名为TS

# 4)第四种导入重命名方式:变量重命名
# from test import x as y   -   把原test模块中的x重命名为y

# 5)通配符*
# from test import *    -   把test模块中的所有变量都导入



# 3.导入模块的原理
# 原理:
# a.当代码执行到导入模块的时候,系统会自动将被导入模块中的代码全部执行一遍

更多安全分享,请关注【安全info】微信公众号!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪法师12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值