Python调用其他.py文件函数的常见场景及实现方法详解

作者:

文章目录
  • Python 中,被调用的文件必须是合法的.py文件(后缀为.py),且文件名称不能与 Python 内置模块(如os、sys、math等)重名,否则会引发命名冲突。
  • 文件结构 ├── func_module.py  # 被调用的文件(存放待调用的函数)└── main_program.py  # 主程序文件(运行时调用其他文件的函数)
  • 当项目文件较多时,会将功能模块放在子目录中,此时需要通过「包导入」实现。 文件结构 ├── main_program.py  # 主程序文件└── utils/  # 子目录(作为Python包)    ├── __init__.py  # 包标识文件(Python3.3+可省略,但推荐创建,空文件即可)    └── func_module.py  # 被调用的函数文件 关键说明 __init__.py的作用是标识当前目录为 Python 的「包」,使得目录下的.py文件可以被作为模块导入,该文件可以是空文件,也可以存放包的初始化配置。
  • 如果主程序文件在子目录,需要调用上层目录(或其他非同级目录)的函数,需要先将目标目录添加到 Python 的搜索路径中(Python 默认只搜索当前目录和内置模块目录)。 文件结构 ├── func_module.py  # 被调用的函数文件(父目录)└── src/  # 子目录    └── main_program.py  # 主程序文件(需要调用上层的func_module.py) 实现步骤(src/main_program.py) 通过sys.path添加父目录路径,再进行导入: # src/main_program.py import sys import os # 1. 获取当前文件(main_program.py)的绝对路径 current_file_path = os.path.abspath(__file__) # 2. 获取当前文件所在目录(src目录) current_dir = os.path.dirname(current_file_path) # 3. 获取父目录(即func_module.py所在目录) parent_dir = os.path.dirname(current_dir) # 4. 将父目录添加到Python的模块搜索路径中 sys.path.append(parent_dir) # 5. 此时即可像同级目录一样导入函数 from func_module import add, multiply # 6. 调用函数 result1 = add(3, 5) result2 = multiply(4, 6) print(f”3+5={result1}”) print(f”4×6={result2}”)
  • 命名规范:模块文件名称建议使用小写字母、下划线,避免使用中文、空格和特殊字符,且不能与 Python 内置模块重名(如不能命名为os.py、sys.py)。 __name__ == "__main__"的作用:被调用文件中的该判断代码块,只有在该文件被直接运行时才会执行,被其他文件导入时不会执行,可用于模块自测,不影响主程序运行。 导入后修改生效问题:如果在程序运行过程中修改了被调用文件的函数,当前运行的程序不会实时生效,需要重启程序(或使用importlib.reload()强制重新加载模块)。 权限问题:确保主程序对被调用的.py文件有读取权限,否则会引发导入失败。 循环导入问题:避免两个文件互相导入对方的函数(如A.py导入B.py的函数,B.py又导入A.py的函数),会引发ImportError,如需解决可通过延迟导入(在函数内部导入)。
  • Python 中调用另一文件的函数,核心是模块导入,一个.py文件就是一个模块。 同级目录直接用import 模块名或from 模块名 import 函数。 子目录需以「包」的形式导入,格式为包名.模块名。 非同级目录需先通过sys.path添加目标目录到搜索路径,再进行导入。 遵循命名规范,避免循环导入和命名冲突,确保程序稳定运行。 到此这篇关于Python调用其他.py文件函数的常见场景及实现方法详解的文章就介绍到这了,更多相关Python调用.py文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python中调用和运行其他.py文件的多种实现方法 Python 跨.py文件调用自定义函数说明 python 在某.py文件中调用其他.py内的函数的方法 linux中使用boost.python调用c++动态库的方法
  • 目录
    • 一、核心前提
    • 二、场景 1:两个文件在同一目录下(最常用)
      • 步骤 1:编写被调用文件(func_module.py)
      • 步骤 2:主程序文件调用函数(main_program.py)
    • 三、场景 2:被调用文件在子目录下(按包组织文件)
      • 步骤 1:编写子目录中的函数文件(utils/func_module.py)
      • 步骤 2:主程序文件调用(main_program.py)
    • 四、场景 3:被调用文件在父目录 / 其他非同级目录
      • 五、关键注意事项
        • 总结

          在 Python 程序运行时,如何调用另一个.py文件中的函数,这是 Python 开发中非常基础且常用的操作,核心是通过模块导入实现(Python 中一个.py文件就是一个独立的模块)。下面分不同场景详细讲解,包含可直接运行的示例。

          Python 中,被调用的文件必须是合法的.py文件(后缀为.py),且文件名称不能与 Python 内置模块(如ossysmath等)重名,否则会引发命名冲突。

          文件结构

          ├── func_module.py  # 被调用的文件(存放待调用的函数)
          └── main_program.py  # 主程序文件(运行时调用其他文件的函数)

          在该文件中定义需要被调用的函数(普通函数定义即可,无特殊格式要求):

          # func_module.py
          def add(a, b):
              """简单的加法函数,用于被其他文件调用"""
              return a + b
          
          def multiply(a, b):
              """简单的乘法函数,用于被其他文件调用"""
              return a * b
          
          # 可选:防止该文件被直接运行时执行多余代码(仅被导入时不执行以下内容)
          if __name__ == "__main__":
              print("这是被调用的模块文件,不是主程序!")

          有两种常用导入方式,可根据需求选择:

          方式 1:导入整个模块,通过「模块名。函数名」调用

          # main_program.py
          # 导入同一目录下的func_module模块(即func_module.py文件)
          import func_module
          
          # 调用模块中的函数,格式:模块名.函数名(参数)
          result1 = func_module.add(3, 5)
          result2 = func_module.multiply(4, 6)
          
          print(f"3+5={result1}")
          print(f"4×6={result2}")

          方式 2:直接导入模块中的指定函数(推荐,减少冗余)

          # main_program.py
          # 从func_module模块中导入add和multiply函数,可直接调用
          from func_module import add, multiply
          
          # 直接使用函数名调用,无需加模块前缀
          result1 = add(3, 5)
          result2 = multiply(4, 6)
          
          print(f"3+5={result1}")
          print(f"4×6={result2}")

          方式 3:导入函数并指定别名(解决命名冲突)

          # main_program.py
          # 导入函数并设置别名,避免与当前文件中的同名函数冲突
          from func_module import add as my_add, multiply as my_mul
          
          # 使用别名调用函数
          result1 = my_add(3, 5)
          result2 = my_mul(4, 6)
          
          print(f"3+5={result1}")
          print(f"4×6={result2}")

          运行结果

          运行main_program.py,输出:

          3+5=8
          4×6=24

          当项目文件较多时,会将功能模块放在子目录中,此时需要通过「包导入」实现。

          文件结构

          ├── main_program.py  # 主程序文件
          └── utils/  # 子目录(作为Python包)
              ├── __init__.py  # 包标识文件(Python3.3+可省略,但推荐创建,空文件即可)
              └── func_module.py  # 被调用的函数文件

          关键说明

          __init__.py的作用是标识当前目录为 Python 的「包」,使得目录下的.py文件可以被作为模块导入,该文件可以是空文件,也可以存放包的初始化配置。

          内容与场景 1 中的func_module.py一致,无需修改。

          需指定「包名(子目录名). 模块名」进行导入:

          # main_program.py
          # 方式1:导入子目录下的模块
          import utils.func_module
          
          result1 = utils.func_module.add(3, 5)
          print(f"3+5={result1}")
          
          # 方式2:直接导入子目录模块中的函数
          from utils.func_module import multiply
          
          result2 = multiply(4, 6)
          print(f"4×6={result2}")
          
          # 方式3:导入并指定别名
          from utils import func_module as utils_func
          
          result3 = utils_func.add(10, 20)
          print(f"10+20={result3}")

          如果主程序文件在子目录,需要调用上层目录(或其他非同级目录)的函数,需要先将目标目录添加到 Python 的搜索路径中(Python 默认只搜索当前目录和内置模块目录)。

          文件结构

          ├── func_module.py  # 被调用的函数文件(父目录)
          └── src/  # 子目录
              └── main_program.py  # 主程序文件(需要调用上层的func_module.py)

          实现步骤(src/main_program.py)

          通过sys.path添加父目录路径,再进行导入:

          # src/main_program.py
          import sys
          import os
          
          # 1. 获取当前文件(main_program.py)的绝对路径
          current_file_path = os.path.abspath(__file__)
          # 2. 获取当前文件所在目录(src目录)
          current_dir = os.path.dirname(current_file_path)
          # 3. 获取父目录(即func_module.py所在目录)
          parent_dir = os.path.dirname(current_dir)
          # 4. 将父目录添加到Python的模块搜索路径中
          sys.path.append(parent_dir)
          
          # 5. 此时即可像同级目录一样导入函数
          from func_module import add, multiply
          
          # 6. 调用函数
          result1 = add(3, 5)
          result2 = multiply(4, 6)
          
          print(f"3+5={result1}")
          print(f"4×6={result2}")

          • 命名规范:模块文件名称建议使用小写字母、下划线,避免使用中文、空格和特殊字符,且不能与 Python 内置模块重名(如不能命名为os.pysys.py)。
          • __name__ == "__main__"的作用:被调用文件中的该判断代码块,只有在该文件被直接运行时才会执行,被其他文件导入时不会执行,可用于模块自测,不影响主程序运行。
          • 导入后修改生效问题:如果在程序运行过程中修改了被调用文件的函数,当前运行的程序不会实时生效,需要重启程序(或使用importlib.reload()强制重新加载模块)。
          • 权限问题:确保主程序对被调用的.py文件有读取权限,否则会引发导入失败。
          • 循环导入问题:避免两个文件互相导入对方的函数(如A.py导入B.py的函数,B.py又导入A.py的函数),会引发ImportError,如需解决可通过延迟导入(在函数内部导入)。

          • Python 中调用另一文件的函数,核心是模块导入,一个.py文件就是一个模块。
          • 同级目录直接用import 模块名from 模块名 import 函数
          • 子目录需以「包」的形式导入,格式为包名.模块名
          • 非同级目录需先通过sys.path添加目标目录到搜索路径,再进行导入。
          • 遵循命名规范,避免循环导入和命名冲突,确保程序稳定运行。

          到此这篇关于Python调用其他.py文件函数的常见场景及实现方法详解的文章就介绍到这了,更多相关Python调用.py文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

          您可能感兴趣的文章:

          • Python中调用和运行其他.py文件的多种实现方法
          • Python 跨.py文件调用自定义函数说明
          • python 在某.py文件中调用其他.py内的函数的方法
          • linux中使用boost.python调用c++动态库的方法

          站内搜索