2017-07-04 10 views
1

これはおそらく悪いタイトルですが、私はそれで意味することは以下の通りです:関数型引数のデータ型になるとPythonがなぜfexlibeにならないのですか?

Pythonは動的型付けなので、なぜ特定の機能がは、特定のデータ型のみで使用されている上を主張しないと変換を処理しません。必要に応じて内部的に自分自身ですか?どのような問題が発生する可能性がありますか?

例:

startswith():引数としてstrイングスとtupleの両方をとり。

  • なぜlistの すぎ?それには正当な理由がある場合(おそらく のケース)、内部的に変換するのはなぜですか?

join() は:のみstr INGのアイテムのコンテナを受け入れます。

  • なぜそれが単に[str(x) for x in whatever]をしませんか?言語の設計から

、私はこれまでのところ、それは純度より柔軟より多くの値、したがって、上記の動作は、非典型的な一種のようだという印象を持っている...


別の例としては、から来ています@VPfB

"IPv4アドレス(ホスト、ポート)は、リストライブラリではなくタプルでなければなりません。"

不変性のためにタプルが好きかもしれませんか? tupleが拒否され、listのみが受け入れられる場合はありますか? Pythonの標準ディストリビューションとそのモジュールの一部です。

+1

私は最初のケースではわかりませんが、2番目のケースは意図しない副作用が検出されないようにするために行われています...プログラマにとっては彼らは通訳者よりも前提を作るために通過しているものです。 –

+0

@cᴏʟᴅssuchこのような意図しない副作用の例を教えてください。 –

+2

待ち時間、タプルには「startswith」メソッドがありますか?いつから? –

答えて

1

言語の設計から、これまでのところ、純度以上の柔軟性を重視しているため、上記の動作は非典型的なようです。

あなたの印象は間違っています。 Pythonは動的に型付けされていますが、強く型付けされているため、オブジェクトの型は常に固定されています。異なるタイプのオブジェクトが必要な場合は、それを一方向に比較する必要があります。

2番目の質問は正当なものですが、可能でした。しかし、暗黙的より明示的です。

+0

_ "Pythonは動的に型付けされていますが、強く型付けされているため、オブジェクトの型は常に固定されています。"どのようにしてオブジェクトの型は常に固定されていて、Pythonは多相ですか? – direprobs

1

Pythonはと強くという動的に型指定されています。つまり、オブジェクトには明確な型があり、変換は明示的に実行する必要があります。理由については、Zen of Pythonを考えてみてください:

明示的なものは暗黙のものよりも優れています。

関連する問題