python - 下标问题(脚本实例化并从另一个脚本调用)仅运行被调用函数,而不是整个脚本
问题描述
目标:从上标开始,在 for 循环的每次迭代中,将一个列表发送到下标中的函数,更新该列表,退出下标中的函数,并执行几个操作,然后进入下一次迭代。
问题:只运行我从上标调用的函数,而不是整个下标。
CrossValidationSmall.py(上标)
import subfileTest
data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K']
n = 2
for start in range(0, len(data), n):
stop = start + n
test = data[start: stop]
train = data[:start] + data[stop:]
subfileTest.set_train_data(train)
subfileTest.py(下标)
train_data = []
def set_train_data(train):
global train_data
train_data = train
print(train_data) #should output the lists each time subfileTest is called.
预期产出
MacBook-Pro:SmallerEnviromentTest Me$ python CrossValidationSmall.py
['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
['A', 'B', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
['A', 'B', 'C', 'D', 'G', 'H', 'I', 'J', 'K']
['A', 'B', 'C', 'D', 'E', 'F', 'I', 'J', 'K']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
电流输出
MacBook-Pro:SmallerEnviromentTest Me$ python CrossValidationSmall.py
[]
解决方案
据我了解,您需要在每次迭代中完整调用您的下标。
事情是这样的:
- 一旦找到一个新模块就会被执行,并且最初执行的模块会被缓存。
- 当在不同的文件中导入相同的模块时,将返回缓存的版本。
- 此缓存版本存在于整个过程的生命周期中。
由于您需要在每次迭代时重新运行下标,因此可以使用 Class。类的对象:
- 存储每次迭代的数据
- 编写任意数量的函数来处理这些数据
- 根据需要保留每个对象的值
上标:
from subscript import ModelCrossValidator
trial = 0
data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
n = 2
for start in range(0, len(data), n):
trial += 1
stop = start + n
test = data[start: stop]
# train_subset to be used for cross validation
train_subset = data[:start] + data[stop:]
cross_validator = ModelCrossValidator(train_subset)
cross_val_score = cross_validator.calc_score()
print("CrossValSet: {}, Data: {}, Score: {:.2}".format(trial, cross_validator.data, cross_val_score))
下标:
import random
class ModelCrossValidator:
def __init__(self, train_subset):
self.data = train_subset # your folded cross-val data
self.model = None # can pass in a model too here
self.accuracy = 0 # other fields that you might need
def calc_score(self):
# you can have any number of functions like this.
# all will deal with only the data from a single object.
self.accuracy = 0.8 + (random.random()) % 0.2
return self.accuracy
输出:
Macbook-Pro: chimichanga$ python superscript.py
CrossValSet: 1, Data: ['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'], Score: 0.89
CrossValSet: 2, Data: ['A', 'B', 'E', 'F', 'G', 'H', 'I', 'J', 'K'], Score: 0.94
CrossValSet: 3, Data: ['A', 'B', 'C', 'D', 'G', 'H', 'I', 'J', 'K'], Score: 0.9
CrossValSet: 4, Data: ['A', 'B', 'C', 'D', 'E', 'F', 'I', 'J', 'K'], Score: 0.84
CrossValSet: 5, Data: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K'], Score: 0.88
CrossValSet: 6, Data: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], Score: 0.94
推荐阅读
- markdown - 如何让 pandoc 生成书籍零件?
- sql - 自动生成时间间隔记录
- swift - 在 Swift 中使用 AVAssetWriter 录制视频和音频
- sql - 为数据透视生成长 SQLite 语句的最佳方法
- apache - 使用 RewriteRule .htaccess 获取此参数 url
- reactjs - 为什么我在 react-toastify 模块中出现错误?
- google-search - 如何使用谷歌搜索运算符排除网站路径?
- rust - Ownership: differences between tuples and arrays in Rust
- r - 如何将数据框行分组到列表中?
- javascript - Javascript将日期转换为毫秒