如何将函数加载的绝对路径传递给我的函数预测?

时间:2017-12-09 19:52:10

标签: python

我想获取load函数的路径和文件名,并将其传递给我的预测函数

每次我使用代码self.load()时,我还需要调用其参数,即路径和文件名。如何获取加载函数中的路径和文件名。

This is the screenshot of my problem

我尝试在预测函数中运行函数加载,但我需要参数[path]和[filename]

def load(self, path, filename):
    with open(os.path.join(path, filename[0])) as stream:
        self.ids.image.source = filename[0]
    self.dismiss_popup()
    pathh = (os.path.join(path,filename[0]))
    return os.path.join(path,filename[0])
def predict(self):
    #need to pass the path and filename here

2 个答案:

答案 0 :(得分:1)

使用类属性

如果您将两个函数放在一个类中(使它们成为方法),您可以将pathfilename设置为类属性

#!/usr/bin/env python3

class Foo:
    def __init__(self):
        self.path = ''
        self.filename = ''

    def load(self, path, filename):
        self.path = path
        self.filename = filename

    def predict(self):
        print(self.path)
        print(self.filename)

foo_instance = Foo()
foo_instance.load('/test/path', 'a_file.txt')
foo_instance.predict()

预期结果:

>> '/test/path'
>> 'a_file.txt'

使用全局变量

如果您不想使用某个类,则可以使用global关键字来修改范围高于该函数的变量。

例如:

#!/usr/bin/env python3

path_outer_scope = ''
filename_outer_scope = ''

def load(self, path, filename):
    global path_outer_scope
    global filename_outer_scope
    path_outer_scope = path
    filename_outer_scope = filename

def predict(self):
    print(path_outer_scope)
    print(filename_outer_scope)

load('/test/path', 'a_file.txt')
predict()

预期结果:

>> '/test/path'
>> 'a_file.txt'

如果您没有使用global关键字,我希望看到

>> ''
>> ''

我应该使用哪个?

将这些功能放在一个类中是一个更干净的代码'因为变量仍然限于该类,并且不适用于不需要它们的函数。它们也在类中命名,因此名称冲突的可能性较小。

答案 1 :(得分:0)

您可以在函数顶部声明空字符串,并在调用load()时指定值:

pth = ""
fname = ""


def load(self, path, filename):
    pth = path
    fname = filename
    # your code here

def predict(self):
    # use pth and fname here