day12 迭代器生成器和模块

day12 迭代器生成器和模块

1.变量作用域

根据变量作用域的不同,可以将变量分为:全局变量、局部变量

a.局部变量

没有定义在函数或者类中的变量都是全局变量,全局变量的作用域是从定义开始到程序结束
全局变量默认保存在全局栈区间,程序结束后才会自动销毁

# a是全局变量
a = 10
# b是全局变量
for _ in range(5):
    b = 20

print(f'外部使用a:{a}')
print(f'外部使用b:{b}')

# x是全局变量
for x in range(5):
    print(f'循环中使用a:{a}')
    print(f'循环中使用b:{b}')
    print(f'循环中使用x:{x}')


def func():
    print(f'函数中使用a:{a}')
    print(f'函数中使用b:{b}')
    print(f'函数中使用x:{x}')


func()

b.局部变量

定义在函数中的变量是局部变量,局部变量的作用域是从定义开始到函数结束
局部变量默认保存在函数对应的临时栈区间中,函数对应的临时栈区间是开始调用函数的时候创建,函数调用结束后会自动销毁

# c、d是局部变量
def func2(d):
    c = 30
    print(f'函数内部使用c:{c}')
    print(f'函数内部使用d:{d}')
    
func2(29)

# print(f'函数外部使用c:{c}')  报错
# print(f'函数外部使用d:{d}')  报错

c.global

global只能在函数体中使用,用来改变函数中变量的存储方式(让局部变量保存在全局变量栈中)
a.在函数中定义全局变量,需要先用global进行声明
b.如果要在函数中修改全局变量的值,需要先用global进行声明,否则不会修改全局变量的值而是创建一个对应的局部变量

def func3():
    global e
    e = 40


func3()
print(e)  # 40

2.迭代器

a.迭代器(iter)

容器型数据类型;
打印迭代器无法查看所有的元素,也不能统计元素的个数,如果需要使用迭代器中的元素必须将元素从迭代器中取出,而且取一个就少一个
如果想要使用后面的数据,必须先把前面的数据取完

b.创建迭代器的方法

1.将其他序列转换成迭代器(所有的序列都可以转换成迭代器)

2.创建生成器

i1 = iter('abc')
i2 = iter([10, 20, 30, 40])

迭代器无法看到元素

print(i1)  # <str_iterator object at 0x01C2D940>
print(i2)  # <list_iterator object at 0x01C2D928>

迭代器无法统计个数

# print(len(i1))   报错

c.怎么获取迭代器中的元素

1.获取一个元素next(迭代器)

i1 = iter('abc')
print(next(i1))  # a
print(next(i1))  # b
print(next(i1))  # c
# print(next(i1))  报错

2.遍历

# 用for循环遍历
for x in i2:
    print(f'x:{x}')
# 转换格式输出迭代器
i3 = iter('hello')
print(list(i3))

遍历过后迭代器中无元素

3.生成器

a.什么是生成器

生成器是容器型数据类型;生成器是具有产生多个数据的容器,而不是保存多个数据的容器。
打印生成器无法查看所有的元素,也无法统计生成器中元素的个数。
每次需要获取生成器中的元素的时候,生成器就会创建一个数据,创建一个就少一个。

b.怎么创建生成器

调用带有yield关键字的函数就可以得到一个生成器
(如果被调用的函数中有yield关键字,那么调用函数的时候既不会执行函数体也不会获取返回值,而是得到一个生成器对象

c.怎么控制生成器产生的数据的数量和值

生成器能产生多少数据,能产生哪些数据,由执行创建生成器的函数的函数体的时候会遇到几次yield,每次遇到yield的时候后面的值决定。

d.怎么获取生成器中的数据

生成器获取元素和迭代器获取元素的方式一样

4.模块

a.什么是模块

python中一个py文件就是一个模块。

b.怎么在一个模块中使用另外一个模块中的内容

前提:被使用的模块的模块名(文件名)必须是标识符并且不是关键字
使用方法:被使用的模块必须先导入再使用

c.导入模块

1.import 模块名 - 导入指定模块,导入后可以通过模块名.xxx去使用这个模块中所有的全局变量(包括全局函数)
2.from 模块名 import 变量1,变量2,变量3,… - 导入指定模块中指定内容,导入后可以直接使用导入的所有变量
3.from 模块名 import * - 导入指定模块中所有的内容,导入后可以直接使用所有内容
4.import 模块名 as 新模块名 - 对模块重命名
from 模块名 import 变量1 as 新变量1, 变量2 as 新变量2, 变量3 as 新变量3 - 对导入的变量重命名

5.包

a.什么是包

 # 包含__init__.py文件的文件夹就是包(包的本质就是文件夹)

b.怎么使用包中模块的内容

前提:包名和模块名必须是标识符并且不是关键字
使用方法:先导入再使用

c.导入包

# 1.import 包名     -       直接导入包,导入后可以通过'包名.xxx'的方式使用__init__.py文件中所有的内容
# 2.import 包名.模块名  -   直接导入包中指定的模块,导入后可以通过'包名.模块名.xxx'的方式使用模块中所有的内容
# 3.from 包名 import 模块名1, 模块名2,...     -   导入包中指定的模块
# 4.from 包名.模块名 import 变量1,变量2,变量3    -   导入指定包中指定模块中的指定变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值