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

本文详细介绍了Python中`import`和`from...import`两种导入模块的方式及其作用域影响。`import`导入整个模块并生成一个模块对象,而`from...import`则将模块内的变量直接复制到当前作用域。使用`from`导入可能会影响命名空间,当存在同名变量时可能导致覆盖。理解模块加载和作用域对于避免冲突和有效组织代码至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)获取:由导入而建立的模块的命名空间是字典
  • 模块是一个独立的作用域(本地变量就是全局变量):在模块中,模块范围会在模块加载后变成模块对象的属性辞典,导入后,模块文件的作用域就变成了模块对象的属性的命名空间



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值