3

我想使用一个变量来存储切片表达式。这是我尝试的:

    if variable is not None:
        var = variable
    elif self.__filter is not None:
        var = self.__filter
    else:
        # this doesn't work, : alone understandably gives a syntax error
        var = ':'

然后在这里使用 var:

return stuff[var]

我想这样做是为了在我的代码中获得更好的结构。另一种方法是根据大小写返回此表达式:

return stuff[variable]
return stuff[self.__filter]
return stuff[:]

引发异常:ValueError: invalid literal for int() with base 10

有没有办法将冒号分配给 var 以便它可以在切片表达式中使用(转义或类似的东西),还是我必须使用它var = slice(0, self.getNumberOfVariables())

PS:我在问之前搜索过,但没有找到类似的东西。对不起,如果我错过了重复。

4

3 回答 3

8

不能直接使用冒号。它是操作的文字符号;Python 通常不允许直接使用这种标点符号,而是需要使用函数(参见算术运算符和operator模块中的相应函数)。

要使用的函数是内置函数slice,它返回切片的显式表示。用于slice(None)包含所有内容。

一个例子:

>>> s = slice(None)
>>> x = range(10)
>>> x[s]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2013-02-07T11:29:46.153 回答
3

这是一篇旧帖子,但它只是作为谷歌的最高结果弹出,所以我想我会回答它以帮助其他人。

切片中的冒号:只是 . 之间的分隔符[start:stop:step]。通常没有明确写出的是,或None之一保留其默认值。startstopstep

这在示例中更容易看到:

# Slice with all parameters specified
# start:1, stop:4, step:1    
seq[1:4:1]

# Slice with default step value (default=1)
# start:1, stop:4, step:1
# All the following are equivalent    
seq[1:4:None]
seq[1:4:]
seq[1:4]

# Slice with default stop value (default = len(seq))
# start:1, stop:len(seq), step:1
# All the following are equivalent    
seq[1:None:1]
seq[1::1]

# Slice with default step and stop value
# start:1, stop:len(seq), step:1
# All the following are equivalent    
seq[1:None:None]
seq[1::]
seq[1:]

# Slice with default start value
# start:1, stop:4, step:1
# All the following are equivalent    
seq[None:4:1]
seq[:4:1]

# Slice with all default values
# start:1, stop:len(seq), step:1
# All the following are equivalent    
seq[None:None:None]
seq[::]
seq[:]

所以要回答你的问题,:在切片变量中使用是没有意义的,因为你要求使用分隔符。虽然这很令人困惑,因为您不必None在直接创建切片时显式声明,所以这使得它:看起来像一个运算符。

TLDR;使用slice类型时,必须显式声明None. 所以seq[slice(None, None, None)]等价于seq[::]

于 2020-09-04T09:40:53.000 回答
-1

表达式stuff[var]不变地固定了某事的可能性,可以使用单个变量来表达。您必须考虑如何解释事物。首先解析代码。此时得到固定使用哪种语法。 start:stop:step是一个表达式,编译器接受为一个切片。这种情况的一个特例是:。其他可能性是标量、列表和切片对象。单个对象。

在 getter 中使用 var,我只能将 var 设置为列表、标量或切片对象。当试图将冒号语法的东西分配给 var 时,我只得到一个字符串文字,而字符串文字不会被 getter/setter 方法解析。您根本无法通过为变量分配一些值来更改语法。

于 2013-02-07T11:15:24.353 回答