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

これは古い投稿ですが、Googleで上位の結果として表示されたばかりなので、他の人を助けるために答えると思いました。

スライス内のコロン:は、の間の単なる区切り文字[start:stop:step]です。多くの場合、明示的に記述されていないNoneのはstartstopまたはのいずれかstepがデフォルト値のままになっている場合です。

これは、例で見やすくなっています。

# 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[:]

したがって、質問に答えるに:は、セパレータを使用するように求めているため、スライス変数でinを使用することは意味がありません。スライスを直接作成するときに明示的に指定する必要がないため混乱しますがNone、これにより:演算子のように見えます。

TLDR; タイプを使用するときは、slice明示的に指定する必要がありますNone。したがってseq[slice(None, None, None)]、と同等seq[::]です。

于 2020-09-04T09:40:53.000 に答える
-1

この式stuff[var]は、単一の変数を使用して表現できる何かに可能性を不変に固定します。あなたはものがどのように解釈されるかについて考える必要があります。まず、コードが解析されます。この時点で、使用される構文が修正されます。 start:stop:stepは式であり、コンパイラはスライスとして受け入れます。これの特別な場合はです:。他の可能性は、スカラー、リスト、スライスオブジェクトです。単一のオブジェクト。

ゲッターでvarを使用すると、varをリスト、スカラー、またはスライスオブジェクトにのみ設定できます。コロン構文をvarに割り当てようとすると、文字列リテラルが取得され、文字列リテラルはgetter/setterメソッドによって解析されません。変数に値を割り当てて構文を変更することはできません。

于 2013-02-07T11:15:24.353 に答える