この文は正しいですか?Pythonデータ型
Pythonでは、コンテナまたは変数に厳密な型 を強制しません。この コンセプトに、開発者は データ
の種類を保持するために コンテナを設計することができ、私は、Pythonでエッセイを行うと、random siteにこの文を見つけ、誰も私のためにそれを明確にすることができればちょうど思ったんだけど、お願いします。
この文は正しいですか?Pythonデータ型
Pythonでは、コンテナまたは変数に厳密な型 を強制しません。この コンセプトに、開発者は データ
の種類を保持するために コンテナを設計することができ、私は、Pythonでエッセイを行うと、random siteにこの文を見つけ、誰も私のためにそれを明確にすることができればちょうど思ったんだけど、お願いします。
リストが4つの項目、異なるタイプの各々を有する
mixed = [ "hello", 3.1415926, 42, (1+2j) ]
このリストを検討してください。
Javaでは、型を宣言する必要があります。
List<String> javaList= new LinkedList<String>();
このJavaリストには、Stringオブジェクトしか格納できません。
はい。
コンテナを設計するだけでなく、定期的なリストはいくつかのタイプ
>>> myList = [1, 3.14, 'string', {'key1':'value1'}, frozenset([5,2,2,3]), [1,2,3],(5+2j),(4.0,5.0), True, type(5)]
>>> myList
[1, 3.1400000000000001, 'string', {'key1': 'value1'}, frozenset([2, 3, 5]), [1, 2, 3], (5+2j), (4.0, 5.0), True, <type 'int'>]
>>> [type(x) for x in myList]
[<type 'int'>, <type 'float'>, <type 'str'>, <type 'dict'>, <type 'frozenset'>, <type 'list'>, <type 'complex'>, <type 'tuple'>, <type 'bool'>, <type 'type'>]
でもtype
を保持することができますが、Pythonのすべてがタイプ
であるオブジェクトです:
ここ>>> id("hello world")
4312841696
、あなたが見ることができますどのようにリテラル(この場合は文字列)にもメモリスペースが予約されています。
>>> class Foo(object):
... pass
...
>>> id(Foo)
4297723600
偶数クラスはオブジェクトのインスタンスです。したがって、これを考慮すると、list/dict/setには、クラスに関係なく、オブジェクトへの参照が含まれているだけです。
>>> a = [40L, "test", Foo, Foo()]
>>> a[0]
40L
>>> a[1]
'test'
>>> a[2]
<class '__main__.Foo'>
>>> a[3]
<__main__.Foo object at 0x1010e8710>
幸運!
numpy
)は両方とも効果を発揮します。他の回答として、これは確かにPythonに当てはまります。また、これはRubyやJavaScript(iirc)を含むいくつかの高水準言語の機能であることを指摘したいと思います。Javaが進んでいる限り、 の複数の型を保持するコンテナを設計することは技術的に可能ですが、同じ型から型を派生させる必要があり、型を通常通り使用するためにキャストする必要があります。 Javaで例えば1は書くことができます:
Object[] mObjArr = new Object[2];
String mString = "This is a String";
Double mDouble = 3.1415;
void assignElements() {
mObject[0] = (Object) mString;
mObject[1] = (Double) mDouble;
}
String getString() {
if (mObject[0] instanceof String) return (String) mObject[0];
else return null; // or empty string or throw exception etc.
}
Double getDouble() {
if (mObject[1] instanceof Double) return (Double) mObjects[1];
else return null; // or Double.NaN or throw exception etc.
}
voidへのポインタを使用してC/Cでの同様のソリューションは、++ 可能ですが、型チェックは、控えめに言っても毛深いなります。
技術的には、 'List'を' List
リストはもちろん、Javaではまったく動作しません。 –
@piquadrat - あなたがJavaのオブジェクトリストを持っている場合、それらのリスト要素でのみObject操作(メンバ関数または引数として)を実行できます。 Pythonリスト 'mixed'では、文字列の混合[0]を繰り返したり、mixed [2]のreal/imag部分を得ることができます。 –