2

Python で型変換を行いたい場合は、組み込み関数を使用する必要があることはわかっていました。

例えば:

number = int('100')

しかし、私はC#スタイルを使用して次のような変換を行っています

number = (int)('100')

それも機能します。なぜそれが機能しているのか教えてください。

以下のコードを使用して同じことをしようとしても、うまくいきません。

number = (int)'100'
4

5 に答える 5

6

Python には「型変換」がありません。あなたはコンストラクターに渡し'100'ています。型を括弧で囲んでも値は変わりませんが、型の引数から括弧を削除すると、コンストラクター呼び出しではなく、構文エラーになります。int

于 2012-09-17T23:15:40.997 に答える
4

関数の引数を指定する場合を除いて、(x)は と同じxであるため、(int)('100')と同等int('100')です。

それらは同じバイトコードにコンパイルされます:

>>> import dis
>>> dis.dis(lambda: int('100'))
  1           0 LOAD_GLOBAL              0 (int)
              3 LOAD_CONST               1 ('100')
              6 CALL_FUNCTION            1
              9 RETURN_VALUE
>>> dis.dis(lambda: (int)('100'))
  1           0 LOAD_GLOBAL              0 (int)
              3 LOAD_CONST               1 ('100')
              6 CALL_FUNCTION            1
              9 RETURN_VALUE
于 2012-09-17T23:19:46.640 に答える
2
int('100')

これは、「 という名前のオブジェクトを見つけて、それを関数として呼び出し、引数としてint渡す」ことを意味します。'100'

(int)('100')

これは同じことを意味します。なぜなら、左側が と同じであるから(int)です。これは、 とint同じ理由で(3)と同じ3です。

(int)'100'

同じ原則により、これは と同じでint '100'、構文エラーです。2 つのオブジェクト (intクラスと文字列'100') が隣り合っており、演算子や、それらがどのように相互作用するかを示す他の指示がありません。

于 2012-09-17T23:58:10.670 に答える
0

Python では "int" はクラスであり、"int('100')" を呼び出すと、int クラスの __init__ メソッドが引数 '100' で呼び出されます。これは int オブジェクトを構築します。

"(int)" という表現は "int" と同じです。Python には、他の言語のようなキャスト/変換演算子がありません。

于 2012-09-17T23:19:58.360 に答える
0

Python では、関数はファースト クラス オブジェクトであるためint、 と(int)は実際には同じオブジェクトであり、組み込み関数intです。

>>> a = (int)
>>> a('100')
100
>>> a is int
True

上記の例のように関数を呼び出すことはできますが、C スタイルのキャストとして使用することはできません。

于 2012-09-17T23:23:21.653 に答える