提问人:Farideh 提问时间:8/15/2022 最后编辑:Karl KnechtelFarideh 更新时间:9/13/2022 访问量:192
将 Matlab 代码转换为 Python
Convert Matlab codes to Python
问:
我必须将我朋友的一些小代码从 Matlab 转换为 Python,我试图在 Matlab 中找到“assign”单词的良好翻译,但不幸的是没有答案。 你能帮我在Matlab中完成这段代码并将其翻译成Python吗,我特别卡在最后一行。感谢您的帮助
function importfile1(fileToRead1)
%IMPORTFILE1(FILETOREAD1)% Imports data from the specified file % FILETOREAD1: file to read % Import the file
newData1 = load('-mat', fileToRead1);
% Create new variables in the base workspace from those fields.
vars = fieldnames(newData1);
for i = 1:length(vars)
assignin('base', vars{i}, newData1.(vars{i}));
end
答:
我同意这样的评论,即这有点不好的做法,而且两者有很大的不同,这并不完全有意义,但我们可以尝试最好的模拟。Python 不使用相同的“工作区”术语(有些东西可能不会整齐地交叉),但从文档来看,它似乎主要用于通过访问范围(全局)或其他函数范围来为当前不在范围内的变量分配值。在 python 中,您可以(在函数中)指示要使用带有关键字的变量的全局版本,然后像往常一样为其分配一个值:then .如果在封闭作用域中同时具有全局版本和同名版本,并且想要访问更高一级(但不一定是全局作用域),则改用关键字 nonlocal
。assignin
"base"
global
global myvar
myvar = "some_value"
这个函数做的另一件事是允许你以编程方式创建变量名,这通常被认为是不好的做法,因为你的变量名通常应该是固定的,而不是变量本身。在这种情况下,代码似乎正在复制从交互式会话中保存所有变量的功能,然后稍后在新的交互式会话中重新加载它们。在这种情况下,没有“变量变量”的一般智慧不太适用,并且确实比“变量变量”的一般解决方案(字典(或其他数据结构)更有意义。以编程方式创建新变量的实际解决方案是函数,由于许多原因,通常避免使用函数,但特别是与来自实时编码会话的信息进行交互可能是合适的。在这种情况下,您将构建一个表示相应 python 表达式的字符串,例如:eval
eval(str(vars[i]) + "=" + str(newData1[vars[i]]))
*请注意,您将不得不花一些时间来弄清楚如何确保构建正确的表达式,因为这是一个非常粗略的例子。eval
评论
=