首页 > 代码库 > python import 和 from.........import 模块加载和作用域

python import 和 from.........import 模块加载和作用域

import导入:如import moduleName

  变量名moduleNmae有两个目的:识别要被载入的外部文件同时生成脚本中的变量,在文件加载后,用来引用模块对象;因为import使一个变量名引用整个模块对象,我们必须通过模块名称来得到该模块的属性


from语句:

from会把模块内的变量名赋值到另一个作用域(把模块中的变量名并且在from字句中选择的复制到了进行导入的作用域之内),所以它就可以让我们直接在脚本中使用复制后的变量而不用通过模块

默认情况下,Python只对每个文件的每个进程做一次操作,之后的操作都只会取出已经加载的模块对象


import和from都是隐形的赋值语句

  • import将整个模块对象赋值给一个变量名(moduleName)
  • from将一个或者多个变量名赋值给另一个模块中同名的对象

from有可能破坏命名空间,如果使用from导入变量,而那些变量碰巧和作用中变量同名,变量就会被悄悄得覆盖掉

当必须使用两个不同模块内定义的相同的变量名的变量时必须使用import

使用:

"""test.py"""

key=‘got‘

print {‘already‘: (lambda :2+2),

 ‘got‘:(lambda :2*4),

 ‘one‘: (lambda :2**4)

 }[key]()


def  printer(data):

    print(data)

#主程序

from test import key,printer

print key

printer(key)


import test

print test.key

test.printer(test.key)

模块加载和作用域:

  • 模块语句会在首次导入时执行
  • 顶层的赋值语句会创建模块属性:在导入模块时,文件顶层(不在def和class之内)赋值变量的语句,会建立模块对象的属性,赋值的变量名会存储在模块的命名空间内
  • 模块的命名空间能通过属性__dict__或dir(M)获取:由导入而建立的模块的命名空间是字典
  • 模块是一个独立的作用域(本地变量就是全局变量):在模块中,模块范围会在模块加载后变成模块对象的属性辞典,导入后,模块文件的作用域就变成了模块对象的属性的命名空间



    

python import 和 from.........import 模块加载和作用域