如何将一个python文件导入到一个模块的多个文件中,它们不使用相同的变量?

土都007

我有一个 python 文件,假设它是 common.py

在这里,我有一些函数,以及函数所需的一个变量:

TAG = '[TESTTAG]'

def myprint(obj):
    print(f'{TAG} {obj}')

def set_tag(out_tag):
    global TAG
    TAG = out_tag

我希望能够使用该myprint()函数而不必TAG每次都传递参数。为了设置这个TAG,我对set_tag()函数进行了编码

我还有另外 2 个文件,我想在其中使用该myprint()函数,但带有不同的标签:use1.py

from common import *

set_tag('[USE1TAG]')

def testusage():
    myprint('First sentence')
    myprint('Second sentence')

if __name__ == '__main__':
    testusage()

使用2.py

from common import *
set_tag('[USE2TAG]')

def testusage2():
    myprint('Third sentence')
    myprint('Fourth sentence')


if __name__ == '__main__':
    testusage2()

当我单独运行它们时,它们会产生预期的结果。

但问题是我想将这两个文件都导入到最终文件中,并多次使用它们的函数,每个函数都使用TAG我之前在它们的源文件中设置的 。这样,最新导入的文件将更TAG改为[USE2TAG],并且将继续使用。

结合.py

from use1 import testusage
from use2 import testusage2

if __name__ == '__main__':
    testusage()
    testusage2()
    testusage()
    testusage2()

输出:

[USE2TAG] First sentence
[USE2TAG] Second sentence
[USE2TAG] Third sentence
[USE2TAG] Fourth sentence
[USE2TAG] First sentence
[USE2TAG] Second sentence
[USE2TAG] Third sentence
[USE2TAG] Fourth sentence

预期结果:

[USE1TAG] First sentence
[USE1TAG] Second sentence
[USE2TAG] Third sentence
[USE2TAG] Fourth sentence
[USE1TAG] First sentence
[USE1TAG] Second sentence
[USE2TAG] Third sentence
[USE2TAG] Fourth sentence

问题在于它们对相同的TAG变量进行操作。我知道,我每次都可以将 传递TAGmyprint()函数,但我认为必须有一种方法可以不使用它。

我知道我可以myprint()为 theuse1.py和 the定义函数use2.py,但我宁愿将它作为“服务”导入,所以我不必每次都附加它。

有没有办法myprint()在不传递TAG参数的情况下在多个文件中使用该函数

感谢您的回答!

坎普

实现此目的的一种方法是使用一个函数返回正确配置的打印函数,然后您可以使用该函数。为此,您可以使用 lambda。例如:

def _myprint(tag, obj):
    print(f'[{tag}] {obj}')

def get_myprint(tag):
    return lambda obj, tag=tag: _myprint(tag, obj)

然后在使用它的地方,您可以执行以下操作:

print_a = get_myprint('a')
print_b = get_myprint('b')

print_a('test a')
print_b('test b')

这使

[a] test a
[b] test b

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将多个 json 部分(全部在一个文件中)导入到 python/pandas

如何将自己的.py文件作为模块导入到Sublime中的另一个.py文件

python将所有模块导入到一个python文件中,我们可以将其导入另一个文件中?

将多个csv文件导入到pandas中并串联到一个DataFrame中

如何将一个模块从 'base' 环境导入到 anaconda 中的 'tf' 环境?

将变量从一个文件导入到另一个MATLAB

如何将文件从一个 Xcode 项目迁移或导入到另一个项目?

如何将文件从一个Eclipse项目导入到另一个

将Python中的文件导入到另一个文件

Python3将模块从文件夹导入到另一个文件夹

如何将第一个文件中的标签导入到第二个文件中的所有标签

使用JAVA将标记从xml文件导入到另一个文件

无法将sass变量从一个scss文件导入到另一个

将多个Excel文件导入python pandas并将它们串联到一个数据框中

我们如何将图像从一个 js 文件导入到另一个 js 文件

如何声明正确的内容以将另一个swiftui文件导入到contentview文件中?

将数据从一个CSV导入到另一个CSV文件-如何?

将功能从一个python文件导入到另一个

如何将变量从一个数据框导入到 R 中的另一个,因为它们没有共同的属性并且具有不同的行数?

将一个组件从模块导入到另一个模块的组件

如何将另一个应用程序的res文件夹导入到Android Studio中的应用程序?

如何将多个 NetCDF 文件中的“变量”组合成一个 NetCDF 文件?

Webpack:如何将多个javascript文件捆绑到一个输出文件中?

如何将一个包中的类导入到另一个包中的另一个类中?

如何导入和使用从自身中的另一个文件导入类的python模块?

@Repository 未在 @DataJpaTest 中自动装配,多个 @Configuration 文件被导入到一个配置文件中

将多个 csv 文件导入到 Pandas 中并连接到一个 DataFrame 中,其中所有 csv 中的第一列都相同,并且没有数据标题只是文件名

尝试将XML子级从一个文件导入到另一个文件

将JSON对象从一个Javascript文件导入到另一个Java文件