2

これは、「Python では、すべてのリテラル値によってオブジェクトが作成される」という意味ですか?

私はPythonを学んでおり、ここからこの文を入手しました: http://python4java.necaiseweb.org/Fundamentals/FunctionsAndMethods

しかし、私はその意味をよく理解していません。

まず、「リテラル値」とは何ですか?

次に、この文を説明してください。

例を挙げていただけると助かります!

4

4 に答える 4

3

123Python には、実際にはさまざまなコンテキストで「リテラル」の定義がいくつかありますが、基本的な考え方だけが必要な場合"abc": のような表現123 + 456はありません。

Java で を記述する123と、それは Java オブジェクトへの参照ではなく、「ネイティブ」整数です。Python では、Python オブジェクトへの参照です

Python ではすべてがオブジェクトであるため、整数にはメソッドがあり、コレクションなどにスタックできます。「ボックス化」と「ボックス化解除」はどこにもありません。123リストに固執したい場合は、次のようにします。

>>> my_list = list()
>>> my_list.append(123)
>>> my_list
[123]

リストの値を整数として使用する場合は、次のようにします。

>>> my_list[0] - 120
3

さらに言えば、他のオブジェクトと同じようにリテラルを使用して、リスト表示を記述できます。

>>> my_other_list = [my_list, 2]

(リスト表示もリテラルかどうかを尋ねないでください。「異なるコンテキストの異なる定義」が実際に重要になるのはそのためです…)


「すべてのリテラル値がオブジェクトの作成につながる」というのは本当ではないことを指摘する価値があります。リテラル新しいオブジェクトの場合もありますが、同じ値を持つ既存のオブジェクトへの参照の場合もあります。例えば:

>>> a = 3
>>> b = 3
>>> a is b
True
>>> id(a) == id(b)
True

(これは言語によって真であるとは限りませんが、通常、ほとんどの Python 実装ではそうです。)

そのb = 3ため、オブジェクトの作成には至らず、同じオブジェクトへの別の参照がa = 3. (実際、3コードを見る前に、インタープリターによって既に事前にビルドされ、事前にキャッシュされている可能性が高いです。)

3しかし、は不変であるため、これを気にする必要はありません。同じ3オブジェクトを取得するか別のオブジェクトを取得するかは問題ではありません。なぜなら、isとがなければid、違いを見分ける方法がないからです。文字列、フロートなどについても同じことが言えます。

于 2013-04-12T22:52:59.813 に答える
2

Python を学習するための本当に優れた方法は、対話型インタープリターを使用することです (通常Python、シェルで入力すると見つかります)。

これを行ったら、、、、およびを使用して、次の_ようにオブジェクト タイプと情報を確認します。typedirhelp

>>> 4             # a literal 4
4
>>> type(_)       # what is the type of the last object?
<type 'int'>      # int
>>> dir(int)      # what methods does it have?
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
>>> help(int)
... bunch of help text on int class ...

>>> type(4.4)
<type 'float'>
# do the same interview of Python to tell you about the float class...
于 2013-04-12T23:01:48.470 に答える
2

以下は、リテラル値の例です

>>> 0
0
>>> 'a'
'a'
>>> 1.9
1.9
>>> 'foo'
'foo'

以下に示すようintに、 のメソッドを確認できます0

>>> dir(0)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']

私が望むなら、私は電話することができます:

>>> (-1).__abs__() # abs(-1) is better but this is just to show it's an object
1
于 2013-04-12T22:53:24.403 に答える
2

123467.2、またはのような値を入力する"this is a string"と、オブジェクトとして処理されることを意味します。

于 2013-04-12T22:53:41.850 に答える