目录

 

1.⽣成器

1.1 yield表达式​

2.迭代器​

2.1 迭代对象

2.2 迭代器

2.3 将迭代对象转换为迭代器

3. 包

4.模块

4.1 模块搜索路径

4.2 导⼊模块


1.⽣成器


如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从⽽节省⼤量的空间。在Python中,这种⼀边循环⼀边计算的机制,称为⽣成器(Generator)。

  • 延迟计算、惰性求值
  • 节省内存,⾼效
  • 缺点:⽆法随机存取

⽣成器(Generator) ⽣成器会产⽣⼀个对象,⽽不是⼀个列表

1.1 yield表达式
包和模块_月隐学python第13课

1.2⽣成器表达式
⽣成器【Generator】⽣成器会产⽣⼀个可迭代对象,⽽不是⼀个列表。⽣成器表达式很类似列表⽣成式:
(表达式 for var in 可迭代对象)
包和模块_月隐学python第13课

2.迭代器
包和模块_月隐学python第13课

2.1 迭代对象


可以直接作⽤于for-in循环的数据类型都被称为可迭代对象(Iterable),可以使⽤isinstance()判断⼀个对象是否是可迭代对象,可以直接作⽤于for-in循环的数据类型:
数据结构: list、 set、 tuple、 dict、 string
generator【⽣成器】【(),函数结合yield】
包和模块_月隐学python第13课

2.2 迭代器


迭代器不但可以作⽤于for-in循环,还可以使⽤next()函数将其中的元素获取出来,当获取完最后⼀个元素之后,当再次调⽤next⽅法,则会出现StopIteration错误,表示⽆法继续返回⼀个值。可以使⽤isinstance()判断⼀个对象是否是迭代器。迭代器的类型是Iterator

包和模块_月隐学python第13课

2.3 将迭代对象转换为迭代器


迭代器⼀定是可迭代对象,但是,可迭代对象不⼀定是迭代器iter():

将可迭代对象转化为迭代器【主要针对list、 set、 tuple、 dict、 string】
包和模块_月隐学python第13课

3. 包


包是为了解决模块重名问题, python引⼊了以⽬录⽅式组织模块,称之为包(package),⼀个包中可以包含模块、包。 python的包中必须包含⼀个特殊⽂件,被命名为__ init__.py,这⽂件告诉解释器这是⼀个包,⽽⽬录则不要求⼀定要有,这是⽬录和包的区别;另外可以使⽤import导⼊包中的模块,但⽬录不⾏。


4.模块


在python中,模块是代码组织的⼀种⽅式,把功能相近的函数放到⼀个⽂件中,⼀个⽂件(.py)就是⼀个模块(module),模块名就是⽂件名去掉后缀py。这样做的好处是:

  • 提⾼代码的可复⽤、可维护性。⼀个模块编写完毕后,可以很⽅便的在其他项⽬中导⼊
  • 解决了命名冲突,不同模块中相同的命名不会冲突

常⽤标准库:

包和模块_月隐学python第13课

4.1 模块搜索路径


当导⼊⼀个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块⽂件(模块名.py)

包和模块_月隐学python第13课

4.2 导⼊模块


可以使⽤import语句导⼊模块,格式:

包和模块_月隐学python第13课

import语句的模块顺序,推荐在⽂件开头导⼊模块,建议按照如下顺序:

  • python标准库
  • 第三⽅库
  • ⾃定义库

这三类库中间添加⼀个空⾏,模块第⼀次被导⼊的时候会被执⾏。如果在导⼊模块不想执⾏模块中代码,可以使⽤ __ name__ 属性进⾏判断,如果该模块是当前模块,不是导⼊模块, __name __ 的值是 __main__ 。所以可以这样检测:

包和模块_月隐学python第13课


 

相关文章:

  • 2021-12-28
  • 2021-12-10
  • 2021-04-22
  • 2021-05-30
  • 2022-01-09
  • 2022-12-23
  • 2021-06-30
  • 2021-06-06
猜你喜欢
  • 2021-03-31
  • 2021-05-13
  • 2021-10-08
  • 2021-06-13
  • 2021-09-18
  • 2021-07-28
  • 2021-09-02
相关资源
相似解决方案