我正在尝试将以下JavaScript代码迁移到Python。
// return the nth term in Fibonacci series
var fib = function () {
var memo = [0, 1];
return function fib(n) {
if (typeof memo[n] !== 'number') { // check if memo[n] is available
memo[n] = fib(n - 1) + fib(n - 2);
}
return memo[n];
};
}();
然而,在Python中似乎无法确定列表中的索引是否与JavaScript代码typeof memo[n] !== 'number'
相对应。
答案 0 :(得分:2)
在Python中,采用EAFP原则。要求宽恕比获得更容易。这意味着您应该假设索引存在并将其包装在try except
中,以便在索引丢失时捕获。它看起来像这样:
try:
list[i]
except IndexError:
# list has no index i
这是Python中的常见用法,因为它实际上比首先检查索引是否有效然后调用它更快。如果您提供的指数通常是有效的,并且您偶尔需要捕获不正确的值,那么它会特别快。
在您的特定情况下,这将是一个很好的格式:
try:
return memo[n]
except IndexError:
# Calculate the answer since it's not stored
memo.append( fib(n - 1) + fib(n - 2) )
return memo[n]
答案 1 :(得分:0)
OAuth2Parameters oA2Parm;
if (gCredential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Result) {
oA2Parm = new OAuth2Parameters() {
AccessToken = gCredential.Token.AccessToken
};
} else {
eMsgImap = @"Error. setIMapTrue: can't get Access Token.";
return eMsgImap;
}
GoogleMailSettingsService gEmailSettingService;
AppsExtendedEntry ee;
GOAuth2RequestFactory rf = new GOAuth2RequestFactory("apps", "gMail APIs", oA2Parm);
gEmailSettingService = new GoogleMailSettingsService(gDomain, "gMail API");
while ....
ee = gEmailSettingService.RetrieveImap(userID);
您可以使用len函数来检查索引是否超出列表的长度 以前的js代码可以用python编写: