模块

  • 模块化:将一个完整的程序分成一个个小模块

  • 优点

    • 方便开发与维护
    • 复用性
1
print('这是一个模块')
1
2
3
import  test

这是一个模块
  • 多次导入模块只能有一次结果
  • print模块会显示路径
1
2
3
4
5
6
import  test

print(test)

这是一个模块
<module 'test' from 'C:\\Users\\XXX\\PycharmProjects\\untitled1\\python\\模块\\test.py'>
  • 可以对模块重命名
1
2
3
4
5
6
import  test as t

print(t)

这是一个模块
<module 'test' from 'C:\\Users\\殷少轩\\PycharmProjects\\untitled1\\python\\模块\\test.py'>
  • 调用模块内容
1
2
a = 1
b = 2
1
2
3
4
5
6
7
import  test as t

print(t.a)
print(t.b)

1
2
  • 调用函数
1
2
3
def fn():

print('这是fn函数')
1
2
3
4
5
import  test

test.fn()

这是fn函数
  • 调用类
1
2
3
4
from python.模块.test import Person  #从python文件夹下模块文件夹导入test模块中Person类

a = Person('三三不得酒吖')
print(a.name)
1
2
3
4
5
6
from test import Person

a = Person('三三不得酒吖')
print(a.name)

三三不得酒吖
  • 运行渡口,不调用,不执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def fn():
print('这是fn')

def fn1():
print('这是fn1')

class Person():
def __init__(self):
self.name = '三三不得酒吖'

a = Person()

if __name__ == '__main__':
print(a.name)
fn()
fn1()
1
2
3
4
5
6
7
8
from test import Person,fn,fn1
fn()
fn1()

a = Person()
print(a.name)


列表推导式

  • 从旧的列表中得到新的列表

  • 语法

    • [变量 for 变量 in 旧列表(容器)]
    • [变量 for 变量 in 旧列表(容器)if 条件表达式]
    1
    2
    3
    4
    5
    a = [1,2,3,4,5,6,7,8,9,10]
    b = [i for i in a if i % 3 == 0]
    print(b)

    [3, 6, 9]

生成器

  • 方法一 用列表推导式得到生成器
1
2
3
4
5
6
7
8
9
10
g = (i * 3 for i in range(1,21))
# print(g.__next__())
# # print(g.__next__())
for a in range(4):
print(next(g))

3
6
9
12
  • 用函数实现 用yield 可以阻塞程序 若果不继续调用next 那么会一直阻塞,如果直接进行while,会陷入死循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def fn():
i = 0
while True:
i +=1
yield i

r = fn()
print(r)
print(next(r))
print(next(r))
print(next(r))

<generator object fn at 0x000001B367A0B888> #generator 生成器
1
2
3

  • 生成器只能执行一次
1
2
3
4
5
6
7
8
9
10
11
12
def fn():
for i in range(10):
yield i

g = fn()
g1 = [i for i in g]
g2 = [i for i in g]
print(g1)
print(g2)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]

迭代器

  • 可迭代对象:能用for循环遍历的对象都是可迭代对象,字符串、列表、元组、集合等容器都是可迭代对象:Iterable
    • 可迭代对象拥有__iter__方法,即返回自身的方法
  • 迭代器:可以被next函数调用并不断返回下一个值的对象成为迭代器:Iterator
  • 迭代器也只能执行一次
1
2
3
4
5
6
7
8
9
10
11
list1 = [1, 2, 3, 4, 5, 6, 7, 8 ,9, 10]
it = iter(list1)
print(it)
result = [i for i in it]
print(result)
result1 = [i for i in it]
print(result1)

<list_iterator object at 0x000001DF582AE240> #iterator 迭代器
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[]