栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python学习笔记(14)模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python学习笔记(14)模块

文章目录
    • 简介
    • 深入模块
    • __name__属性
    • dir() 函数

简介

通过python解释器编写程序固然可以,但如果退出再进入,那么之前定义的变量方法就不复存在了,
但是我们可以通过将这些变量方法存放在文件中,为一些脚本或者是交互式的解释器使用,这个文件被称为模块。其中包含了所有定义的函数和变量,后缀名是py,各位读者可以通过本文深入认识模块的属性和方法。

深入模块

模块除了方法定义,还包罗了可执行代码,这些代码用来初始化模块,不过只会在初次导入的时候才会执行。
每个模块都有自己的独立的符号表,在模块内部可以当做全局符号表来使用。所以在开发时可以放心使用这些全局变量而不必担心混淆。
其他模块也能够导入到当前模块,通常来讲是通过import语句来实现,如下所示:
我们首先定义一个test2.py:

def fib(n):    # 定义到 n 的斐波那契数列
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()
 
def fib2(n): # 返回到 n 的斐波那契数列
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

然后在test中引用:

from test2 import fib, fib2
print(fib(500))


这种导入方法不会吧导入的模块名存储在当前字符表中。如果需要的话,可以使用以下方法一次性将模块中的所有名称导入到当前模块:

from test2 import *

但是请注意,这种方法引入的名字中不包括单一下划线开头的名字,大多数情况下,不建议开发者使用者这种方法命名。

__name__属性

当一个模块被另一个程序初次引用的时候,它的主程序将会运行。如果想让某一个代码块不在运行范围内,通常会使用__name__属性让这个程序块在仅自身运行时执行。

#在test.py中
if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')
import test
#在test2中


各位读者可以关注文件的区别。
还有需要注意的是:每个模块都有__name__属性,当值是__main__的时候,表示自身在运行。
__name__的前后是两条下划线

dir() 函数

这个内置函数可以找到模块里所有定义的名称,并以字符串形式返回。
如下所示:

import test2
print(dir(test2))

python中命名模块空间的形式。采用点模块名称形式,例如A.B表示包A的子模块B。
就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。
这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。
这里给出了一种可能的包结构(在分层的文件系统中):

sound/                          顶层包
      __init__.py               初始化 sound 包
      formats/                  文件格式转换子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  filters 子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

开发者也可以导入一个包里面的特定模块:

import sound.effects.echo

或者这样:

from sound.effects import echo

通常不主张使用*符号导入模块,这样会导致可读性降低,虽然省去一些功夫,但是仍有一些包被设计成只能通过国特定方法导入。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861892.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号