基础模块

基础模块今日总结生成器对象(自定义迭代器)#定义:我们自己写代码产生的迭代器,也是有__iter__和__next__方法,需要使用关键字yieldeg:defindex():print('好')yield123#生成器对象跟迭代器对象性质一样,都是节省空间的#当函数

大家好,欢迎来到IT知识分享网。基础模块"

今日总结

生成器对象(自定义迭代器)

# 定义:我们自己写代码产生的迭代器,也是有__iter__和__next__方法,需要使用关键字yield
eg:def index():
        print('好')
      yield 123
# 生成器对象跟迭代器对象性质一样,都是节省空间的
# 当函数体代码中出现yield关键字,你在用def定义函数的时候,系统默认这就不是一个函数啦,是一个生成器啦!!没有调用之前就是一个普通的函数
# 变成生成器对象之后调用__next__就会开始执行函数体代码
	print(res.__next__())  # 123  yield有点像return的功能
# 如果函数体代码中含有多个yield关键字,执行一次__next__返回后面的值,并且让代码停留在yield位置,再一次执行__next__基于上次的位置继续往后执行到下一个yield关键字处,如果后面没有了的话,再继续执行就会报错
        

自定义range方法

# range方法其实就是一个可迭代对象
eg:def my_range():
        pass
    for i in my_range(1,10):
        print(i)
  # 先以两个参数的range方法为例
   def my_range(start,end):
        if not end:
            end = start
            start = 0
        while start < end:
            yield start
            start += step
      for i in my_range(1,10):
        print(i)

yield关键字作用

#1.在函数体代码中出现,可以将函数变成生成器
#2.在执行过程中,可以将后面的值返回去,类似于return
#3.可以暂停代码的运行
#4.可以接收外界的传值
eg:
    def eat(name):
        print(f'{name}准备干饭')
        while True:
            food = yield
            print(f'{name}正在吃{food}')
    res = eat('赵公子')
    res.__next__()
    res.send('生日蛋糕')  # 可以直接给yield传值,并且自动调用一次__next__方法

生成器表达式

# res = (i for i in 'jason')
# print(res.__next__())
# 生成器内部的代码只有在调用__next__迭代取值的时候才会执行

模块

# 模块就是一系列功能的结合体,可以直接使用,模块能极大的提升开发效率
eg:import time(导入模块)
    time.time()(调用方法)
# 模块的三种来源
1.内置的模块(无需下载,解释器自带,直接导入使用即可)
2.自定义模块(自己写的代码封装成模块,自己用或者发布到网上供别人使用)
3.第三方模块(别人写的发布到网上,可以下载使用的模块)
# 模块的四种表现形式
1.使用Python代码编写的py文件
2.多个py文件组成的文件夹(包)
3.已被编译为共享库或DLL的C或C++扩展
4.使用C编写并链接到Python解释器的内置模块

模块的导入方式

# 要使用模块就必须先导入模块,导入模块的方式有两种:1.import...句式,2.from...import...句式
# 方式1:import...句式
eg: import md
    print(md.name)  # 就会打印出md.py文件中的信息,而不是当前执行文件中的信息
 # 导入模块执行的步骤:
    1.执行当前文件,产生一个当前文件的名称空间
    2.执行import句式,导入模块文件(即执行模块文件代码产生模块文件的名称空间)
    3.在当前文件的名称空间中产生一个模块的名字,指向模块的名称空间
    4.通过改名字就可以使用到模块名称空间中的所有数据
# 相同的模块反复被导入只有第一次有效,后面的都无效
# import句式的特点:可以通过import后面的模块名点的方式,使用模块中所有的名字,并且不会与当前名称空间中的名字冲突

# 方式2:from...import...句式
eg:from md import name
    print(name)  # 就会打印出md,py文件中的信息
    print(money)  # 这个就会报错,因为from md import name 只使用了模块中的name名字
 # 导入模块执行步骤:
	1.执行当前文件,产生一个当前文件的名称空间
    2.执行导入语句,运行模块文件产生名称空间存放运行过程中的所有名字
    3.将import后面的名字直接拿到当前执行文件中
    
  # 1.重复导入也只会导入一次
	2.使用模块名称空间中的名字不需要加模块名前缀,直接使用即可
    3.from...import...的句式会产生名字冲突的问题,在使用的时候一定要避免名字冲突
    4.使用from...import...的句式,只能使用import后面出现的名字(feom...import...相当于是从...里面拿...来用,没有提到的都不能用)

    

补充

# 1.可以给模块起别名(模块名或者变量名很复杂的时候,可以起别名简写)
eg:import md as m 
    print(m.name)
   from md import name as n
	print(n)
    
# 2.连续导入多个模块或者变量名,之间用逗号隔开
eg:import time,sys,md
    from md import name,read1,read2
    # 连续导入多个模块,这多个模块最好有相似的功能部分,如果没有建议分开导入,如果是同一个模块下的多个变量名无所谓
    
 # 3.通用导入
eg:from md import *
    *号表示md里面所有的名字,from...import...的句式也可以导入所有的名字
    如果模块文件中使用了__all__限制可以使用的名字,那么*号就会失效

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32506.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信