Python跨模块导入函数后如何访问内部变量并设为全局
错误原因
tn是my_function()内部定义的局部变量,作用域仅限函数内部,函数执行结束后外部无法直接访问该变量,和模块导入逻辑无关。另外你原代码里导入模块的写法有误,import引入模块时不需要加.py后缀。
推荐修复方案
让函数返回创建好的telnet连接实例,在调用处用变量接收返回值即可,这是最清晰、最易维护的写法:
调整config.py代码
import telnetlib def my_function(a): tn = telnetlib.Telnet(a) # 将连接对象作为返回值抛出 return tn
调整main.py代码
import config HOST = "172.25.25.5" # 接收函数返回的连接实例 tn = config.my_function(HOST) tn.write(b"show run".encode('ascii') + b"\n")
不推荐的替代方案
你也可以将tn定义为config模块的全局变量,通过global关键字在函数内修改全局变量值,调用完函数后通过config.tn访问对象,但这种写法容易引发全局变量污染,多实例场景下很容易出现变量覆盖问题,非特殊场景不建议使用:
config.py示例:
import telnetlib tn = None def my_function(a): global tn tn = telnetlib.Telnet(a)
main.py调用示例:
import config HOST = "172.25.25.5" config.my_function(HOST) # 通过模块属性访问tn config.tn.write(b"show run".encode('ascii') + b"\n")
内容的提问来源于stack exchange,提问作者bgardne7
相关产品推荐
相关产品推荐

