Pythonのお勉強 Part75 (974レス)
上下前次1-新
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
967(1): (ワッチョイ 25c4-MlPs) 10/04(土)14:08 ID:lfhYKLud0(3/4) AAS
仮に特別扱いするなら、raise を一種のキーワードとすることになるんだろうね。raise文との違いは構文。もともとraise文の構文ってちょっと分かりにくくないかというのが元の発想だからね。
どちらかというと、raise文の構文は直感的にちょっと分かりにくいので関数呼び出し風の構文糖があったら良かったのに……という方が言いたいことに近いかもしれない。
968: (ワッチョイ 0d54-DOAI) 10/04(土)14:18 ID:ZS4Jz9di0(1/2) AAS
そんな形式上のものはシンタックスシュガーでどうにでもなる
969: (ワッチョイ 3d01-UAuC) 10/04(土)15:12 ID:cv59dmAz0(1/2) AAS
仮にraiseを関数化するとしたらビルトイン関数になるわけでキーワードとして特別扱いするのとは違う
ビルトイン関数を別のraise関数で上書きしたならその時の動作は上書きした人が責任を持てばいい
ただraiseとassertを同じカテゴリで話すのはどうかと思う
raiseはreturn, break, continue, yieldなどと同じcontrol flow statementなので通常関数とは別のカテゴリとして扱うのが言語を使う側にとっても作る側にとっても自然かつ楽
raiseと違いassertはprintなどと同じでビルトイン関数のほうが使う側には自然
コンパイラを改良する労力をかけたくなかったからステートメントのままなんだと思う
970(1): (ワッチョイ 25c4-MlPs) 10/04(土)15:56 ID:lfhYKLud0(4/4) AAS
assert と raise とで区別すべきというのは同感(>>967ではボケていてraiseって書いちゃっているけど、965に書いたとおりこの話は基本的にはassertを想定している)。
ビルトイン関数にするかキーワードにするかというのは正直そんなに意識はしていなかったかな。仮にビルトイン関数にするとしても通常の関数とは異なりインタプリタによる特別扱いが必要なら、いっそキーワードにしてしまう方が簡単なような気もするけど、まぁ、どちらでも良いのかなと。
Pytnonの場合、yieldのような前例があるから同じ構文の中の一定の場合だけを特別扱いするということに比較的抵抗がない文化なのかなとも思うけど、assert に関しては文のままでいい(処理系に手を入れてまで関数っぽいインターフェイスを提供する必要はない)というのが現時点までの開発陣の判断ということよね。個人的にはちょっと残念だけど、まぁ仕方ないのかなとは思う。
971: (ワッチョイ 0d54-DOAI) 10/04(土)16:09 ID:ZS4Jz9di0(2/2) AAS
raiseのノリでexitと書いて何故か終わらない
972: (ワッチョイ 3d01-UAuC) 10/04(土)17:51 ID:cv59dmAz0(2/2) AAS
>>970
今後の拡張でコンパイラが利用可能なアノテーションを関数に付与できるような仕組みでもできればそれを活用してassertを関数化する可能性は個人的には十分あると思う
逆にassertだけのためにそういう仕組みを追加したり内部的にもassertという名前縛りで関数呼び出し箇所のbytecodeを出力しないようにする変更は費用対効果的にまずないと思う
973: (ワッチョイ 43de-MlPs) 10/04(土)19:23 ID:MKE3mvtR0(1) AAS
まぁ、yield と assert とでは色々違うもんね。
974: (ワッチョイ ae60-9taF) 10/05(日)05:42 ID:Wx5pDard0(1) AAS
仮想環境をゴリゴリ作るという観点からanacondaは優秀だと思う。
それ以外は…
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.018s