python中模块、函数以及各个模块之间的调用

 2024-01-15 05:01:04  阅读 0

1 模块的函数调用

a: 模块名称

模块名.函数名

b:来自模块名称函数名称(作为别名)

调用另一个 .py 文件中的类和函数

在同一文件夹中调用

1. 通话功能

A.py文件如下:

def 添加(x,y):

print('总和为:%d'%(x+y))

在B.py文件中调用A.py的add函数如下:

A

A.添加(1,2)

或者

从 A 添加

加(1,2)

2. 调用类

A.py文件如下:

class A:
    def __init__(self,xx,yy):
        self.x=xx
        self.y=yy
    def add(self):
        print("x和y的和为:%d"%(self.x+self.y))

在B.py文件中调用A.py的add函数如下:

from A import A
a=A(2,3)
a.add()
或 
import A
a=A.A(2,3)
a.add()

在不同文件夹中调用

A.py文件的文件路径为:C:\\Test1

在B.py中调用A.py文件:

import sys
sys.path.append(r'C:\AmyPython\Test1')
#python import模块时, 是在sys.path里按顺序查找的。sys.path是一个列表,里面以字符串的形式存储了许多路径。使用A.py文件中的函数需要先将他的文件路径放到sys.path中
import A
a=A.A(2,3)
a.add()

1.如何使用相对路径或绝对路径导入文件或模块

今天调试代码的时候,程序一直提示没有这个模块。 我很疑惑,因为我导入的文件都是用绝对路径导入的。 按理来说,不会出现找不到模块的情况。

最后我仔细分析了整个代码的目录结构,发现了问题所在。

我们依次解释一下今天的情况:

我们先看一下导入的代码:

在demo——mnist.py文件中执行以下两种导入操作
# 第一处
from gcforest.gcforest import GCForest
from gcforest.utils.config_utils import load_json
# 第二处
config = load_json("demo_mnist-ca.json")  # 里面传入的是文件的位置,这个函数是读取配置文件的内容
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后看一下目录结构

在此示例中,,py 是主文件。 它导入的第一件事是当前目录的父目录的子目录中的目录中的文件。

所以用绝对路径导入这个文件是从lib..

使用相对路径导入此文件来自...

第二次导入的是同目录下的另一个文件,所以可以直接导入。

所以修改后的导入代码为:=("-ca.json")

2.我们回顾一下相对路径和绝对路径的概念。

绝对路径是文件的实际路径,是指从硬盘根目录(盘符)开始,一层层指向文件。

相对路径是指以当前文件为基础,指向所引用的资源文件的一级目录。

下面是常用的表示当前目录和当前目录的父目录的标识符。

../表示当前文件所在目录的上一级目录。

./表示当前文件所在目录(可省略)

/代表当前站点根目录(域名映射的硬盘目录)

您可以在以下位置验证上述识别方法:

测试目录结构:

import os
path1=os.path.abspath('.')   # 表示当前所处的文件夹的绝对路径
print(path1)
path2=os.path.abspath('..')  # 表示当前所处的文件夹上一级文件夹的绝对路径
print(path2)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

# D:/PycharmProjects/mnistCheck/AbsolutepathAndrelativepath.py
D:\PycharmProjects\mnistCheck
D:\PycharmProjects
 
 
  • 1
  • 2
  • 3

3.详细了解sys.path的使用

sys.path是搜索模块的路径集,是一个列表,如下:

[
'D:\\PycharmProjects\\mnistCheck', 'D:\\PycharmProjects\\mnistCheck', 'D:\\PycharmProjects\\KerasDataSettry', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\python35.zip', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\DLLs', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\lib', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\lib\\site-packages', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\lib\\site-packages\\Sphinx-1.6.3-py3.5.egg'
]
 
 
  • 1
  • 2
  • 3

可使用环境: .

sys.path.('模块的名称')。

sys.path.(0,'模块名称')

添加相关路径,但是退出环境后你添加的路径会自动消失!

代码中的实现如下:

import sys
sys.path.append('C:\Users\Administrator\Desktop\ExperimentAss\gcForest-master')
 
 
  • 1
  • 2

4、最后了解一下不同级别目录模块的方法(重点)

有一个文件夹/home/a,里面有一个名为b.py的模块。 如何将其添加到程序中?

方法一:(属于我刚开始分析的代码中的第一种情况)

系统;

sys.path.(“/home/a/”)

方法二:

在目录中添加一个.py文件,可以在其中编写执行时会执行的代码。 当然,您也可以将其留空。

主页.ab

方法三:

来自 home.ab *

前提是home和a都包含.py。 即当前目录和待导入文件的父目录都必须有init.py文件。

将模块包含在子目录中的方法比较简单。 关键是能够在sys.path中找到模块文件的路径。

下面将详细介绍几种常见情况:

(1)主程序和模块程序在同一目录下:

程序结构如下:

– 源代码

|– mod1.py

|– 测试1.py

如果程序test1.py中导入了模块mod1,则直接使用mod1或从mod1 *;

(2) 主程序所在目录是模块所在目录的父(或祖先)目录。

程序结构如下:

– 源代码

|– mod1.py

|– mod2

| – mod2.py

– 测试1.py

如果在程序test1.py中导入模块mod2,则需要在mod2文件夹下创建一个空的.py文件(也可以在该文件中自定义输出模块接口); 然后使用 mod2.mod2 * 或 mod2.mod2。

(3)主程序导入上层目录的模块或其他目录的模块(横向)

程序结构如下:

– 源代码

|– mod1.py

|– mod2

|– mod2.py

|– 子

| – 测试2.py

– 测试1.py

如果将模块mod1.py和mod2.py导入到程序test2.py中。 首先,需要在mod2下创建一个.py文件(同(2))。 不需要在src下创建这个文件。 然后调用如下:

下面的程序执行方式都是在程序文件所在目录下执行。 例如cd sub后执行test2.py;

Test1.py 在 cd src;; 之后执行不保证 sub/test2.py 在 src 目录中成功执行。

系统

系统路径.("..")

模1

mod2.mod2

(4) 从(3)可以看出,导入模块的关键是能够根据sys.path环境变量的值找到具体模块的路径。 这里我们只介绍以上三种简单的情况。

总结:

从总结中我们可以发现,当要导入的文件与当前文件在同一目录下时,直接导入文件名即可。

当你要导入的文件或目录与你当前文件不在同一个目录时,需要跳转到你要导入的文件的父目录,然后用点号连接你已经过关的目录或文件按级别,然后就是这样。 至于如何跳转到这个父目录。 更常见的方法是将父目录添加到系统路径中,然后用点逐级搜索,直到到达要导入的模块。

标签: 目录 模块 导入

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码