SQLの窓

2018年05月03日


Python3 : 言語的デザインの特徴と要点


グループ化にインデントを使う

参照 Python ドキュメント
ドキュメントでは、多くのコーディングスタイルは begin/end の括弧にそれぞれ一行を使っている事に対して以下のように述べています。

1) 冗長(無駄が多い)になって画面を浪費する。
2) プログラムの見通しが悪くなる。

一つの関数は一画面に収めるのが理想で、20 行の Python は 20 行の C よりもはるかに多くの作業ができると断言しています。
▼ 確かに行数は 4 : 2 です。
if (x <= y)
{
        x++;
}

if x <= y:
        x += 1
実際問題、結局インデントするんだからそれでブロックを決定してしまうのはとても合理的に感じます。問題がある場合は唯一、勉強し始めの初期のプログラマがインデントをうまくできないという事ぐらいでしょう。 式中で代入ができない 参照 Python ドキュメント
要するにプログラマがとても良くやる、条件の中で == と書くところを、= と書いてしまってバグが発生させるのを避けるという趣旨でした。
▼ 今じゃ、こっちのほうが主流になってますが...
while (line = readline(f)) {
	処理
}
自分は昔々 while(1) {} って書いてました。必ず if で脱出条件書くので、後からソースコードが解りやすいです。で、Python ではそれを勧めているようです。
while True:
	line = f.readline()
	if not line:
		break
	処理
さらに、嫌み(あるいはジョーク)たっぷりに以下のようにも言っています。
熟練した Python プログラマは while True イディオムを受け入れていて、式構造中の代入がなくてもそれほど苦労しないようです。Python にそれを強く求めるのは新人だけです。
結局一番良いのは、イテレータを使用して for 文を使えとの事でした。(確かに... イマドキもう for 系で統一すべきだとは前から思ってました)
for line in f:
	処理
switch や case 文がない 参照 Python ドキュメント 正直自分は switch や case 文が嫌いです。自分では無く、自分以外の人がそれでミスして迷惑をこうむるからです。Python 的には、一画面に収めるのが理想 とか言ってるし、無いのは納得できます。 でも、先を見据えて議論はされているようです。 ラムダ式は文を含むことができない 参照 Python ドキュメント おそらく、ブロックをインデントで表現するという記法上、一般的なブロックを引数として渡すのは無理という事だと思います。しかし、Python はこの事についてとても強気に以下のように述べています。
Python のラムダは単なる、関数を定義するのが面倒すぎる場合のための簡略な記法に過ぎないのです。従って、ローカルで定義された関数ではなくラムダを使う利点は、関数の名前を考える必要が無いことだけです
だそうです。 タプルとリストという別のデータ型が用意されている 参照 Python ドキュメント 一般的な解釈では、タプルは変更不可(イミュータブル)で、リストは変更可(ミュータブル)です。ですが、追加の理解として以下のような記述がありました。
タプルは、Pascal のレコードや C の構造体と同様なものと考えられます。
型が異なっても良い関連するデータの小さな集合です。
グループとして演算されます。(一つの型として扱う?)

リストは他の言語の配列に近いものです。
全て同じ型の可変数のオブジェクトを持ちます。
それらが一つ一つ演算される傾向にあります。

イミュータブルな要素だけが辞書のキーとして使えるのでタプルだけがキーとして使えます
list.sort() はソートされたリストを返さない 参照 Python ドキュメント これは一連のデザインの流れにある『合理性』に基づいています。
ソートするためだけにリストのコピーを作るのは無駄が多いそうです。そしてこの仕様上では、うっかり上書きしてしまうようなことがなくなると言っています。

新しいリストを返したいなら、代わりに組み込みの sorted() 関数を使って下さいとの事です。
for key in sorted(mydict):
	mydict[key] で処理
raw 文字列 (r-strings) はバックスラッシュで終わってはいけない 参照 Python ドキュメント 長々と書いてありましたが、要するに最後の \" が一つの文字として認識されるので、文字列が終わって無い事になるそうです。よって、最後にバックスラッシュを追加する為に以下のような事になります。
dir = r"\this\is\my\dos\dir" "\\"
リストやタプルの最後にカンマがあっても良い 参照 Python ドキュメント これ凄いですね。ありがとうと言う他無いですが、これも無駄を回避するデザインであると断言できます。プログラマが皆疑問に思わず受け入れていた『無駄』です。
タグ:Python
posted by lightbox at 2018-05-03 23:35 | Python | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり