python函数间调用


背景

有一个需求,一个python文件调用另一个Python文件中的函数,而被调用的函数用到了所在文件的全局变量,此全局变量在调用文件也被使用到了。这种情况,怎么处理

方案

有两种方案:分别是通过模块共享全局变量和使用类封装全局变量。
推荐使用方案1

方案1:使用类封装全局变量

将全局变量封装在类的实例中,通过实例来共享和修改变量。
看一个例子:

# module_a.py
"""
在这个文件中,我们定义了一个 Globals 类,其中包含一个全局变量 global_var。我们还定义了一个函数 some_function,这个函数接受一个 Globals 类的实例,并通过这个实例访问和修改 global_var。"""
class Globals:
    def __init__(self):
        self.global_var = "Initial Value"

def some_function(globals_instance):
    print("module_a: ", globals_instance.global_var)
    globals_instance.global_var = "Modified by module_a"
# main.py
"""
在这个文件中,我们导入了 Globals 类和 some_function 函数。然后我们创建了一个 Globals 类的实例 globals_instance。通过这个实例,我们可以访问和修改 global_var,并将其传递给 some_function 进行修改。
"""
from module_a import Globals, some_function

globals_instance = Globals()  #创建一个实例

print("main before: ", globals_instance.global_var)
globals_instance.global_var = "Modified in main"
some_function(globals_instance)
print("main after: ", globals_instance.global_var)

运行之后的输出结果如下:

main before:  Initial Value
module_a:  Modified in main
main after:  Modified by module_a

方案2:通过模块共享全局变量

将全局变量放在一个独立的模块中(例如 globals.py),然后在其他需要访问该全局变量的模块中导入这个独立的模块。这样可以确保所有模块都能访问和修改相同的全局变量。

# globals.py

global_var = "Initial Value"
# module_a.py

import globals

def some_function():
    print("module_a: ", globals.global_var)
    globals.global_var = "Modified by module_a"
# main.py

import globals
from module_a import some_function

print("main before: ", globals.global_var)
globals.global_var = "Modified in main"
some_function()
print("main after: ", globals.global_var)

来看下运行结果

main before:  Initial Value
module_a:  Modified in main
main after:  Modified by module_a
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值