• 模块


    导入 模块:

    使用import函数

    如:

    import module1
    import module2
    :
    import moduleN

    也可以在一行内导入多个模块, 像这样
    import module1[, module2[,... moduleN]]

    但是这样的代码可读性不如多行的导入语句。 而且在性能上和生成 Python 字节代码时这两种
    做法没有什么不同。 所以一般情况下, 我们使用第一种格式。

    如果在一个模块的顶层导入, 那么它的作用域就是全局的; 如果在函数中导入, 那么它的
    作用域是局部的

    如果模块是被第一次导入, 它将被加载并执行。

    你可以在你的模块里导入指定的模块属性。 也就是把指定名称导入到当前作用域。 使用
    from-import 语句可以实现我们的目的, 它的语法是:
    from module import name1[, name2[,... nameN]]模块

    如果自己不想使用导入的模块的名字,可使用as代替它

    如:import TKinter as TK 这就表示使用了TK来代替了TKinter,  from cgi import FieldStorage as form这一句是表示用form代替FieldStorage

    从一个模块导入许多属性时,import 行会越来越长, 直到自动换行, 而且需要一个 。

    from Tkinter import Tk, Frame, Button, Entry, Canvas,
    Text, LEFT, DISABLED, NORMAL, RIDGE, END

    把指定模块的所有名称导入到当前名称空间里:如:from module import *

    在实践中, 我们认为 "from module import *" 不是良好的编程风格, 因为它"污染"当前名称
    空间, 而且很可能覆盖当前名称空间中现有的名字; 但如果某个模块有很多要经常访问的变量或者
    模块的名字很长, 这也不失为一个方便的好办法。
    我们只在两种场合下建议使用这样的方法, 一个场合是:目标模块中的属性非常多, 反复键入
    模块名很不方便, 例如 Tkinter (Python/Tk) 和 NumPy (Numeric Python) 模块, 可能还有
    socket 模块。另一个场合是在交互解释器下, 因为这样可以减少输入次数。

    名称空间是名称到对象的映射,改变一个名字的绑定叫做重新绑定,删除一个名字叫做解除绑定,

    在执行期间有两个或三个活动的名称空间。 这三个名称空间分别是
    局部名称空间, 全局名称空间和内建名称空间, 但局部名称空间在执行期间是不断变化的, 所以我
    们说"两个或三个"。

    Python 解释器首先加载内建名称空间。 它由 __builtins__ 模块中的名字构成。 随后加载执
    行模块的全局名称空间, 它会在模块开始执行后变为活动名称空间

    __builtins__ 模块包含内建名称空间中内建名字的集合,__builtin__ 模块, 该模块包含内建函数, 异常以及其他属性。

    在标准 Python 执行环境下,
    __builtins__ 包含 __builtin__ 的所有名字。

    确定作用域的规则是如何联系到名称空间的呢? 它所要做的就是名称查询. 访问一个属性
    时, 解释器必须在三个名称空间中的一个找到它。 首先从局部名称空间开始, 如果没有找到, 解释
    器将继续查找全局名称空间. 如果这也失败了, 它将在内建名称空间里查找。 如果最后的尝试也失
    败了,将返回一个错误报告

    使用内置函数_import_()也可以导入模块 如:

    sys模块的sys.path属性返回一个路径列表,使用import语句导入模块时,系统自动从该列表的路径中搜索模块,如果没有找到,则程序报错,

    其中第一个  ' '', '表示当前目录,最后一个C:\....用于扩展模块,建议自定义模块时放在这两个位置,程序中也可以直接修改sys.path列表,以添加模块搜索路径,如:

    import sys

    sys.path.append('c:\pythonfile')

    dir()内置函数: 模块中定义的成员,包括变量、函数和类可以通过内置函数dir()查询,也可以通过help()函数查询。dir()函数的基本形式如下:

    dir(): 不带参数,列举当前模块的所有成员,就是列举已导入的模块的所有成员。

    dir(模块名):列举指定的模块的所有成员。

    dir(类/对象):列举指定类的所有成员。

    包的概念:python模块是.py的文件,而包则是文件夹。只要文件夹中包含一个特殊的文件:_init_.py,则python解释器将该文件夹作为包,其中的模块文件(.py文件)则属于包中的模块

    特殊文件_init_.py可以为空,也可以包含属于包的代码,当导入包或该包中的模块时,执行_init_.py,包可以包含子包,没有层次限制,如:

    package1

      _init_.py

    subpackage1

      _init_.py  

      modulel.py

    subpackage2

      _init_.py

      modulel.py

    模块的名称:每一个模块都有一个名称,通过特殊变量_name_可以获取模块的名称

    当一个模块被用户单独运行时,其_name_的值为‘_main_’,

    按字节编译的.pyc文件:导入模块时,python解释器为加快程序的启动速度,会在于模块文件同一目录下生成.pyc文件,.pyc文件是经过编译后的字节码,是在导入模块时python解释器自动生成的,无需手动编译,这样下次导入时,如果模块源代码.py文件没有修改(通过比较两者的时间戳),则直接导入.pyc文件,从而提高程序效率

    包的导入和使用格式:

    import [包名1.[包名2. ...]].模块名  #导入包中模块

    [包名1.[包名2. ...]].模块名.函数名  #使用全限定名称调用模块中的成员

    如:

    import os.path

    os.path.curdir

    也可以使用from...import语句直接导入包中模块的成员,格式:

    from[包名1.[包名2. ...]].模块名 import 成员名   #导入模块中的具体成员

    如果是导入一个包中的所有模块时可以使用 from 包名 import *

  • 相关阅读:
    原生Python机器学习分类之一Knn算法
    Java可视化文件(夹)加密解密压缩解压
    基于图搜索技术的八数码问题求解C++
    遗传算法解决TSP问题
    简单dp
    并查集
    KMP算法
    快速迭代
    为什么vs2017在代码右键上没有vs2013(第一个图)上实现抽象类这个选项?
    关于C#面向对象中的查看类图(没有此按键的问题)的解决方法 The solution to view class diagrams in C # object-oriented (without this key)
  • 原文地址:https://www.cnblogs.com/2277098974-qqcom/p/8512800.html
Copyright © 2020-2023  润新知