繁体   English   中英

Python:将 object 实例从一个 function 传递给另一个?

[英]Python: Passing an object instance from one function to another?

我在将值从一个脚本传递到另一个脚本时遇到问题,试图一次迈出一步,但大局是将值obj1.get_predval打印到我的 Django 视图并等待用户的输入。

我的active_learner.obj1.get_predval脚本中的 active_learner.obj1.get_predval 不起作用,它只是打印出有意义的初始值,因为它没有运行 main.py,但我不确定如何传递obj1.set_predval(machine_prediction)来自 main.py 的obj1.set_predval(machine_prediction) 它在 main.py 脚本中正确输出obj1.get_predval

我假设我有一个根本的误解,现在,我试图返回的是obj1.get_predvalbeta.py的值,当它到达行返回值并等待用户输入然后继续。

下面main.py脚本

obj1 = MachinePred()
def main():
    model = load_model('model_new.h5')
    DATAFILE = "c_user_model_data100000.csv"
    dataset = loadtxt(DATAFILE, delimiter=",")
    X_pool, Y = dataset[:, 0:5], dataset[:, 5:]
    sc_x, sc_y = StandardScaler(), StandardScaler()
    X_pool, Y = sc_x.fit_transform(X_pool), sc_y.fit_transform(Y)

    learner = ActiveLearner(
        estimator = model,   
        query_strategy = uncertainty_sampling
    )

    for i in range(3):
        query_idx, query_inst = learner.query(X_pool)
        print("The machine queried:\n{}\nat index {}".format(
            sc_x.inverse_transform(query_inst),
            query_idx
            )
        )

        machine_prediction = learner.predict(X_pool[query_idx])
        obj1.set_predval(machine_prediction)
        print("predvalue:", (obj1.get_predval()))
        ratings = []
        cc_factor = ["delay", "speed", "missing_words", "paraphrasing"]
        for f in cc_factor:
            user_answer = input("How would you rate the quality of {} between [1-5]: ".format(f))
            ratings.append(user_answer)
        print(ratings, np.array([ratings]).reshape(1,-1))

if __name__ == '__main__':
    main()

beta.py这是我试图将值传递给下面的脚本

import active_learner
print(A is: ", active_learner.obj1.get_predval)

mac.py使用下面的 get 和 set 方法的简单 python 脚本。

class MachinePred:
    predval = 0  # Default value of the 'x' configuration setting

    def __init__(self):
        self.predval = 0

    def set_predval(self, val):
        self.predval = val

    def get_predval(self):
        return self.predval

因此,解决方案非常简单,据我了解,可以使用基于生成器的协程或将其拆分为 class 内的两个函数并使用 OO 设计来完成。 协程方法将使用“yield”,这将强制退出 function 返回值,然后重新输入 function 但这会限制您使用基于非生成器的协程的能力,我确实需要等待来自前端的输入。

Using a class though you could put the active learner model and data in an " init method" then split from the machine_prediction = learner.predict(X_pool[query_idx]) for the first function after returning the values and perform the rest in a second function .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM