Python:检查列表中的索引是否已设置

时间:2015-08-20 15:22:10

标签: javascript python

我正在尝试将以下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'相对应。

2 个答案:

答案 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编写: