Python核心编程14 ----- 模块 __name__ 模块的使用,引入 列表推导式 生成器

本文详细介绍了Python的模块化编程,包括import导入模块的方式,`__name__`属性的使用,以及模块的复用。此外,还探讨了列表推导式和生成器的概念,列表推导式用于快速创建新列表,而生成器则提供了一种节省内存的迭代方式。文章通过实例展示了如何创建和使用生成器。
摘要由CSDN通过智能技术生成

 

目录

1.模块化

1.import  模块名(模块名就是Python的文件名)

2.import  模块名  as  模块别名

3.__name__

2.模块的使用

 3.模块的引入

4.列表推导式

5.生成器

通过列表推导式

通过函数来完成


1.模块化

  • 模块化其实就是将一个的功能分解为一个一个的小模块
  • 模块化的优点
    • 1.方便开发以及维护
    • 2.模块可以复用
  • 在Python中一个py文件就是一个模块
  • 在一个模块中引入外部模块

1.import  模块名(模块名就是Python的文件名)

import test_m
print(test_m)   这是我的第一个模块
                <module 'test_m' from 'D:\\py_Project\\基础\\test_m.py'>
一个模块的名字指向的路径
  • 可以引入同一个模块多次,但是模块实例只会建一次
import test_m
test_m
test_m
test_m
输出:这是我的第一个模块

2.import  模块名  as  模块别名

import test_m as test
print(test)
这是我的第一个模块
<module 'test_m' from 'D:\\py_Project\\基础\\test_m.py'>

3.__name__

  • 在每一模块内部都有__name__  我们可以获取模块的名字
模块文件:
print(__name__)

文件1
import test_m
输出:test_m

 如果这个模块直接运行,那么__name__默认的字符串为  __main__ 表示当前文件为主文件

print(__name__)
输出:__main__

2.模块的使用

  • 访问模块中的变量   语法:
    模块名.变量名
模块文件:
在模块中定义变量
a = 1
b = 2

文件1:
import test_m

print(test_m.a,test_m.b)
输出:1  2
  •  访问模块中的函数   语法:
    模块名.函数名
模块文件:

在模块中定义函数
def test1():
    print('test1')
def test2():
    print('test2')

文件1:

import test_m

test_m.test1()  输出:test1
test_m.test2()  输出:test2
  •  访问模块中的对项名  语法:
    模块名.对象名
模块文件:

在模块中定义类
class Person():

    def __init__(self):

        self.name = '啦啦啦'

文件1:

import test_m
p = test_m.Person()
print(p.name)  输出:啦啦啦

 3.模块的引入

  • 我们也可以引入模块中的部分内容
  • 语法 :
    from  模块名  import  变量
模块文件
#在模块中定义变量
a = 1
b = 2

#在模块中定义函数

def test1():
    print('test1')
def test2():
    print('test2')

# 在模块中定义类
class Person():

    def __init__(self):

        self.name = '啦啦啦'

文件1:
from test_m import Person

p = Person()
print(p.name)    输出:啦啦啦

print(test_m.a)  输出:报错:NameError: name 'test_m' is not defined
  •  语法:
    from  模块名  import  变量,变量,变量........
模块文件:

#在模块中定义变量
a = 1
b = 2

#在模块中定义函数

def test1():
    print('test1')
def test2():
    print('test2')

# 在模块中定义类
class Person():

    def __init__(self):

        self.name = '啦啦啦'


文件1:

from test_m import Person,test1,test2,a
test1()   #test1
test2()   #test2
p = Person()
print(p.name)   #啦啦啦
print(a)     #1
print(b)   # NameError: name 'b' is not defined
  •  语法:
    from  模块名  import  变量  as  别名
  • 出现了两个名字一样的函数,用此方法,区别他们
模块文件:

#在模块中定义变量
a = 1
b = 2

#在模块中定义函数

def test1():
    print('test1')
def test2():
    print('test2')

# 在模块中定义类
class Person():

    def __init__(self):

        self.name = '啦啦啦'

文件1:

def test1():
    print('我是主模块中的test1')
from test_m import test1 as new_test1

test1()   #我是主模块中的test1
new_test1() #test1

4.列表推导式

  • 旧的列表 ----> 新的列表
  • 语法1 [表达式 for 变量 in 旧列表] 2 [表达式 for 变量 in 旧列表 if 条件]
lst = [i for i in range(0,101) if i % 3 == 0 and i % 6 == 0]
print(lst)  #[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]

5.生成器

  • 在Python中有一边循环一边计算的机制,称之为生成器
  • 如何创建生成器
  • 通过列表推导式

    • 1.通过__next__() 的特殊方法 获得元素
    • 他会需要一个生产一个,不会占用过多的内存
# 0 - 10之内  分别和3相乘的结果

lst = [ i * 3 for i in range(0,10)]
print(lst) # [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

g = (i * 3 for i in range(0,10))
print(type(g))  # <class 'generator'>  生成器
print(g)   # <generator object <genexpr> at 0x000001E285B0E750>
print(g.__next__())  #  0
print(g.__next__())  #  3
  •  2.next()
# 0 - 10之内  分别和3相乘的结果

lst = [ i * 3 for i in range(0,10)]
print(lst) # [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

g = (i * 3 for i in range(0,10))
print(type(g))  # <class 'generator'>
print(g)   # <generator object <genexpr> at 0x000001E285B0E750>
print(g.__next__())  #  0
print(g.__next__())  #  3
print(next(g))  #  6
print(next(g))  #  9
  • 通过函数来完成

    • 只要在函数中添加了yield关键字,就变成了一个生成器函数
    • 1.定义一个函数,函数中使用yield关键字
    • 2.调用函数,接收调用结果
    • 3.得到的结果就是一个生成器
    • 4.通过next()函数__next__ 取值
def fn():
    n = 0
    while True:
        n += 1
        yield n  # return n + 暂停
n = fn()
print(n) 
print(next(n))  #  1
print(next(n))  #  2

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值