python:关于在一个py文件中调用另一个文件中函数的方法

我在一个python项目中想要实现在主程序“main.py”文件中验证其他子文件是否可以运行的需求。所以我就要想办法在main文件中调用子文件的一些要验证的功能。

于是我想到了如下方法:先在子文件(text1.py)中定义一个专门用于验证这个子文件是否能被正常调用的函数,然后在main文件中执行子文件的函数,即可实现我上面的需求。

于是就有了

# 以下为text1.py的完整代码:

def text_a():   # 定义一个实现验证功能的函数“text1”
    print('子程序正常')      

# 当函数被正确调用的时候,终端就会打印出“子程序正常”的消息。也可以换成其他的功能


print('1234')  # 其实在验证函数之后源代码就是子模块的其他功能的实现了,这里用一个print来代替。

以及

# main.py

from text1 import text_a   # 从“text1.py”文件中调用"text_a"函数
pass                       # pass语句,写不写都行
text_a()         # 执行函数,验证子程序是否可以正确运行

但是在调试的过程中,发现在main.py中执行调用函数的代码时候,会输出以下结果:

子程序正常
1234

终端输出的以上结果说明main.py不仅执行了子程序中的函数,也执行了全部的代码。我目前还不知道发生这种情况的原因,只找到了解决方法。

在网上进行有关查找后我找到了两种解决方法。

方法一(运行速度快,不容易出问题,但是代码不够简洁,需要处理复杂的缩进问题)

     在子模块文件“text1.py”中增加代码,最终如下:

# 以下为text1.py的完整代码:

def text_a():   # 定义一个实现验证功能的函数“text1”
    print('子程序正常')      

# 当函数被正确调用的时候,终端就会打印出“子程序正常”的消息。也可以换成其他的功能


if __name__ == '__main__': # 当程序被直接调用时(python xxx),则执行全部内容,否则只执行特定参数
  
    print('1234')  # 其实在验证函数之后源代码就是子模块的其他功能的实现了,这里用一个print来代替。

 main.py不需要更改,直接在终端中python main.py运行就可以。

然后运行main.py,终端只输出了“子程序正常”的内容,说明运行main.py时只调用了子模块的“taxt_a”函数。实现了“在一个py文件中只调用其他文件中的部分内容”的需求。

需要说明的是,使用此方法的时候要注意text1文件中if语句下缩进和代码顺序的问题。除了验证的函数外,这个子模块的所有程序都应当缩进于这个if语句的下面,否则就会被在验证阶段被错误地调用。

方法二:import os(可能会出现一些奇奇怪怪的bug)

text1文件不需要更改,只需要在main.py文件中新增以下代码即可。

main.py文件最终代码如下:

# main.py 

import os      # 载入python的“os”模块
os.system("python text1.py -c text_a")
# 使用os中的“os.system()”这一函数

“   ”内的内容是在终端中执行的字符串命令,-c及后面的内容的意思是执行这个文件中的“text_a”函数。

最后,还有一个需要注意的点,那就是main.py和被调用的文件要在同一个文件夹目录下

其他信息:

python版本:经验证,以上方法在python3.8.9和3.8.14中都可以使用。

你可能感兴趣的:(问题处理备忘,python,开发语言)