文章目录

  • 一、项目简介
  • 二、调用类型
    • 1、调用同文件中的函数
    • 2、调用同目录下不同文件中的函数
    • 3、调用同级文件夹文件中的函数
    • 4、调用上一级文件夹文件中的函数
    • 5、调用上一级文件夹子文件夹下文件中的函数
    • 6、执行另一个文件
  • 三、概念区分

在很多时候,为了保持代码与代码文件的简洁和逻辑清晰,通常会将许多相类似的函数放在一个文件中,在一个 main.py中去调用它们。调用 Python 函数的时候,大致会存在如下几种情况。

一、项目简介

假如现在有这样一个文件树(从其他地方copy的,稍加整改)

A|-------- __init__.py|-------- a.py|-------- main.py|-------- B|-------- __init__.py|-------- b.py|-------- C|-------- __init__.py|-------- c.py

文件内容如下:

# a.py
def a_hello():print("A_HELLO")
----------------------------
# b.py
def b_hello():print("B_HELLO")
----------------------------
# c.py
def c_hello():print("C_HELLO")
----------------------------
# main.py
def main_hello():print("MAIN_HELLO")

为什么要有__init__.py文件呢?
【答】在Python工程里,当python检测到一个目录下存在__init__.py文件时,python就会把它当成一个模块(module)。Module跟C++的命名空间和Java的Package的概念很像,都是为了科学地组织化工程,管理命名空间。
__init__.py可以是一个空文件,也可以有非常丰富的内容。

二、调用类型

1、调用同文件中的函数

这个比较简单,比如我想在main.py中调用main_hello()函数,那么我直接main_hello()即可

2、调用同目录下不同文件中的函数

比如我想在main.py中调用a.py中的a_hello()函数,可做如下操作

import a
a.a_hello()

3、调用同级文件夹文件中的函数

比如我想在main.py中调用文件夹Bb.py中的b_hello()函数,可做如下操作:

from B import b
b.b_hello()

4、调用上一级文件夹文件中的函数

比如我想在c.py中调用a.py中的函数,这时候如果用上面的方法就会报错No module named xx。解决方法就是将目录A加到系统路径下

import sys
sys.path.append('E:\\testnow\\A')   #括号内容为文件的绝对路径

注意,sys.path添加目录时注意是在windows还是在linux下,windows下需要用\\,linux下需要用/否则会出错。这样需要区分操作系统,而且需要知道绝对路径,岂不是很不好用。看到有大佬用到过如下操作:

import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

上面这句话很长,但也不难理解,os.path.dirname(__file__)获取当前文件的绝对路径,os.path.join(xx,'..')在后面追加..,相当于进入上一级目录,然后再os.path.abspath(xx)获取绝对路径,最后sys.path.append()将其加入系统路径当中。经过这些操作之后,被加入系统路径中的所有文件中的函数都可以被调用了。

5、调用上一级文件夹子文件夹下文件中的函数

后面有朋友问了,所以这里再补充一下 2022-09-23
因为原来的项目被我删了,这里我并没有做测试啊,一般我都是这么用的,应该无问题。

比如我想在c.py中调用b.py中的函数,那么c.pyimport

import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import B.b as b
b.b_hello()

6、执行另一个文件

import osos.system(r'python tmp.py')
# 最好给文件的绝对路径,否则有可能会找不到文件。

三、概念区分

  • Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句。
  • Python 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
  • 文件夹:文件夹就是不存在 __init__.py 文件的文件夹。

另外,对于导入模块可以使用import model1from model1 import func1, func2, ...。其实,这两种方式看似一样,但是是有所区别的,具体请看

https://blog.csdn.net/Gou_Hailong/article/details/125169752

Python 跨文件调用函数 + 在一个文件中执行另一个文件相关推荐

  1. 从Python中的另一个文件调用函数

    本文翻译自:Call a function from another file in Python Set_up: I have a .py file for each function I need ...

  2. python 调用另一个py_跟我自学python 第9章 类(9.4.6 在一个模块中导入另一个模块)...

    大家好今天学习9.4.6 在一个模块中导入另一个模块 .今天我们继续学习python.马上类就学完了. 喜欢python就关注冠山巡山使. 我将跟大家一块自学完python语言. 9.4.6 在一个模 ...

  3. gulp 批量添加类名 在一个任务中使用多个文件来源

    1.首先安装环境 1.安装gulp: npm install gulp 2.安装gulp-clean-css npm install gulp-clean-css 3.安装gulp-css-wrap ...

  4. win7打开计算机 多窗口,win7电脑无法在一个窗口中打开多个文件夹怎么办?

    之前小编曾经听说过,很多朋友都无法忍受IE浏览器,就是因为IE浏览器每打开一个网址,就会新弹出一个窗口,那也就是说,咱们多打开几个窗口的话,下面的任务栏窗口岂不是就密密麻麻了?如果这样的操作大家受不了 ...

  5. R语言导入数据文件(数据导入、加载、读取)、使用haven包的read_dta函数导入Stata中的dta格式文件

    R语言导入数据文件(数据导入.加载.读取).使用haven包的read_dta函数导入Stata中的dta格式文件 目录

  6. R语言导入数据文件(数据导入、加载、读取)、haven包的read_spss函数导入SPSS中的sav格式文件

    R语言导入数据文件(数据导入.加载.读取).haven包的read_spss函数导入SPSS中的sav格式文件 目录

  7. R语言导入数据文件(数据导入、加载、读取)、使用haven包的read_sav函数导入SPSS中的sav格式文件

    R语言导入数据文件(数据导入.加载.读取).使用haven包的read_sav函数导入SPSS中的sav格式文件 目录

  8. python中在一个字符串中查找另一个字符串。实现一个字符串的find函数。

    1.在一个字符串中查找另一个字符串 2.找到了返回第一次出现的位置 3.没找到返回-1 4.参数s1为源字符串,参数s2为要查找的字符串 def index_of_str(s1, s2):n1=len ...

  9. 函数定义、函数参数、跨脚本调用函数

    2.6.函数使用 函数定义 示例(文件名称为func1.sh): #!/bin/bash ##定义函数 hello() { echo "Hello there today's date is ...

  10. Java中如何创建一个文件或者文件夹

    Java中如何创建一个文件或者文件夹 创建一个文件夹: 调用Java中File类中的mkdir( )或者mkdirs( )方法 boolean  makdir( ):创建一个文件夹,创建成功返回tru ...

最新文章

  1. 有趣的php实例,8个必备的PHP功能实例代码
  2. 博客园客户端(睡睡版iphone)源码
  3. C++容器遍历时删除元素
  4. 关于.c和.h 和定义变量的问题
  5. Flask 第三方组件之 script
  6. W ndows找不到explorer,windows找不到explorer.exe的处理教程
  7. 中国联通在香港正式推出5G服务
  8. 帆软报表-打印sql日志设置
  9. 中国内镜超声针市场趋势报告、技术动态创新及市场预测
  10. cocos2d-Lua视频教程
  11. 领域驱动设计(Domain Driven Design,DDD)
  12. 医院患者随访工作信息化建设可行性报告
  13. css 文本超出...
  14. namesilo域名注册教程
  15. 鼠标悬浮显示禁止图标
  16. maven 解决Cannot access alimaven (httpmaven.aliyun.comnexuscontentrepositoriescentral)
  17. reset master和reset slave解析
  18. 解析各类生鲜电商模式,哪家买菜最强?
  19. 数据科学基础-2-概率基础
  20. 在 4GB 物理内存的机器上,申请 8G 内存会怎么样?

热门文章

  1. 投稿状态(status)记录 IEEE wireless communications letters (IEEE WCL)
  2. UI设计师未来职业规划
  3. Channel Attention 通道注意力
  4. 八皇后问题解法大全及编写八皇后小游戏
  5. 8.随机生成一个矩阵并对其转置
  6. Windows电脑上搭建Radius 服务器并实现802.1X认证
  7. After Effects快捷键
  8. 现在第9代i7不能安装linux,9代I7的电脑如何重装系统?这可难不倒我,解决一共就八步!...
  9. prometheus-预警-6
  10. 关于mysql优化的文章