「Python試用録(13)」

% D0:「Python試用録(13)」

「WILDの処理系」作成のための「断片的備忘録★」です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
/*「」は定義行のみ(他ではシアン).「」の語句があるパラグラフは「IDも茶」*/

%D1:[@IT_37]/*「例外の送出と例外クラス」*/
`▼
--------------------------------------------------------------------------------
(0)「In[4]:」
class MyStack:
  def __init__(self):
      self.stack = []
  def push(self, item):
      self.stack.append(item)
  def pop(self):
    if len(self.stack) == 0:
      raise IndexError('stack is empty')
    return self.stack.pop()
(1)参考資料
 ①https://www.atmarkit.co.jp/ait/articles/1909/10/news013.html
 ②https://docs.python.org/ja/3/reference/simple_stmts.html#the-raise-statement
(2)「②」の説明
--------------------------------------------------------------------------------
`▲

%D2:「Python試用録(□)」引用記事一覧
`▼
--------------------------------------------------------------------------------
(1)[@IT_□]/*「目次」*/
(2)[@IT_2]/*「Hello Python(2/3)」*/
(3)[@IT_3]/*「数値と算術演算(1/2)」*/
(4)[@IT_5]/*「文字列の基本(1/2)」*/
(5)[@IT_9]/*「if文」*/
(6)[@IT_10]/*「for文」*/
(7)[@IT_16]/*「リストの基本」*/
(8)[@IT_19]/*「タプル」*/
(9)[@IT_25]/*「オブジェクト」*/
(10)[@IT_27]/*「演算子のまとめ」*/
(11)[@IT_28]/*「クラス」*/
(12)[@IT_30]/*「スタックとキュー」*/
(13)[@IT_37]/*「例外の送出と例外クラス」*/
(14)[@IT_38]/*「ファイル操作の基本」*/
(15)[@IT_53]/*「コーディングスタイルガイド」*/
(16)[@IT_20]/*「辞書」*/
(17)[@IT_21]/*「集合」*/
(18)[@IT_23]/*「モジュールの作り方」*/
(19)[@IT_24]/*「パッケージ」*/
(20)[@IT_33]/*「クラスのスコープとプライベートな属性」*/
(21)[@IT_42]/*「urllib.requestモジュールによるWebページの取得」*/
(22)[@IT_49]/*「ジェネレータ関数とジェネレータイテレータの基礎」*/
--------------------------------------------------------------------------------
`▲

%D3:引用記事の切り替え
・[@IT_□]の記事を引用し難くなったのでサンプルコードの引用源を
 「https://docs.python.org/ja/3/tutorial/」に切り替えます
%D31:目次の紹介`▼
--------------------------------------------------------------------------------
1. やる気を高めよう
2. Python インタプリタを使う
2.1. インタプリタを起動する
2.1.1. 引数の受け渡し
2.1.2. 対話モード
2.2. インタプリタとその環境
2.2.1. ソースコードの文字コード
3. 形式ばらない Python の紹介
3.1. Python を電卓として使う
3.1.1. 数
3.1.2. 文字列型 (string)
3.1.3. リスト型 (list)
3.2. プログラミングへの第一歩
4. その他の制御フローツール
4.1. if 文
4.2. for 文
4.3. range() 関数
4.4. break 文と continue 文とループの else 節
4.5. pass 文
4.6. 関数を定義する
4.7. 関数定義についてもう少し
4.7.1. デフォルトの引数値
4.7.2. キーワード引数
4.7.3. 特殊なパラメータ
4.7.3.1. 位置またはキーワード引数
4.7.3.2. 位置専用引数
4.7.3.3. キーワード専用引数
4.7.3.4. 関数の例
4.7.3.5. 要約
4.7.4. 任意引数リスト
4.7.5. 引数リストのアンパック
4.7.6. ラムダ式
4.7.7. ドキュメンテーション文字列
4.7.8. 関数のアノテーション
4.8. 間奏曲: コーディングスタイル
5. データ構造
5.1. リスト型についてもう少し
5.1.1. リストをスタックとして使う
5.1.2. リストをキューとして使う
5.1.3. リストの内包表記
5.1.4. ネストしたリストの内包表記
5.2. del 文
5.3. タプルとシーケンス
5.4. 集合型
5.5. 辞書型 (dictionary)
5.6. ループのテクニック
5.7. 条件についてもう少し
5.8. シーケンスとその他の型の比較
6. モジュール
6.1. モジュールについてもうすこし
6.1.1. モジュールをスクリプトとして実行する
6.1.2. モジュール検索パス
6.1.3. "コンパイル" された Python ファイル
6.2. 標準モジュール
6.3. dir() 関数
6.4. パッケージ
6.4.1. パッケージから * を import する
6.4.2. パッケージ内参照
6.4.3. 複数ディレクトリ中のパッケージ
7. 入力と出力
7.1. 出力を見やすくフォーマットする
7.1.1. フォーマット済み文字列リテラル
7.1.2. 文字列の format() メソッド
7.1.3. 文字列の手作業でのフォーマット
7.1.4. 古い文字列書式設定方法
7.2. ファイルを読み書きする
7.2.1. ファイルオブジェクトのメソッド
7.2.2. json による構造化されたデータの保存
8. エラーと例外
8.1. 構文エラー
8.2. 例外
8.3. 例外を処理する
8.4. 例外を送出する
8.5. ユーザー定義例外
8.6. クリーンアップ動作を定義する
8.7. 定義済みクリーンアップ処理
9. クラス
9.1. 名前とオブジェクトについて
9.2. Python のスコープと名前空間
9.2.1. スコープと名前空間の例
9.3. クラス初見
9.3.1. クラス定義の構文
9.3.2. クラスオブジェクト
9.3.3. インスタンスオブジェクト
9.3.4. メソッドオブジェクト
9.3.5. クラスとインスタンス変数
9.4. いろいろな注意点
9.5. 継承
9.5.1. 多重継承
9.6. プライベート変数
9.7. 残りのはしばし
9.8. イテレータ (iterator)
9.9. ジェネレータ (generator)
9.10. ジェネレータ式
10. 標準ライブラリミニツアー
10.1. OSへのインタフェース
10.2. ファイルのワイルドカード表記
10.3. コマンドライン引数
10.4. エラー出力のリダイレクトとプログラムの終了
10.5. 文字列のパターンマッチング
10.6. 数学
10.7. インターネットへのアクセス
10.8. 日付と時刻
10.9. データ圧縮
10.10. パフォーマンスの計測
10.11. 品質管理
10.12. バッテリー同梱
11. 標準ライブラリミニツアー --- その 2
11.1. 出力のフォーマット
11.2. 文字列テンプレート
11.3. バイナリデータレコードの操作
11.4. マルチスレッディング
11.5. ログ記録
11.6. 弱参照
11.7. リスト操作のためのツール
11.8. 10 進浮動小数演算
12. 仮想環境とパッケージ
12.1. はじめに
12.2. 仮想環境の作成
12.3. pip を使ったパッケージ管理
13. さあ何を?
14. 対話入力編集と履歴置換
14.1. タブ補完と履歴編集
14.2. 対話的インタープリタの代替
15. 浮動小数点演算、その問題と制限
15.1. 表現エラー
16. 付録
16.1. 対話モード
16.1.1. エラー処理
16.1.2. 実行可能な Python スクリプト
16.1.3. 対話モード用の起動時実行ファイル
16.1.4. カスタマイズ用モジュール
--------------------------------------------------------------------------------
`▲4.8. 間奏曲:https://www.python.org/dev/peps/pep-0008/

%D32:「WILD.pdf」からの引用
`▼
--------------------------------------------------------------------------------
%191:ソース9.W8

 $EX9.SAME,.DATA:( 
    LET:(   
        $&A.LIKE,.' 3';
        $&B.LIKE,.' 4';
        $&C.LIKE,.' 5';
        $A.$B.$C.$X.LIKE,.R7&;
        $P.$Q.LIKE,.A&;
        $SWAP(P;Q).SAME,.DO:(
             X.=R7&@P; R7&@P.=R7&@Q; R7&@P.=X
             )"[SWAP]"
        );
    DO:(
    IF:A<B..SWAP(A#; B#);
    IF:C<B..SWAP(B#; C#);
         X.=A*A+B*B-C*C     )"[データは生成しない]"
    IF:A+B>C..DATA:(
         IF:X<0" "..%[鋭角三角形]%
         IF:X=0" "..%[直角三角形]%
         IF:1"   "..%[鈍角三角形]%   )
    ;:1..%[  非三角形]%
   )
 」
%192: 開き括弧があると行頭の深さを+1、閉じ括弧があると行頭の深さを-1する。
 ・行頭の深さを構文解析時に修正し、短縮コード 「DATA:(74;11;N; &)」の「N」に設定。
 ・解釈実行時に行頭の深さを調べることで、ブロックのスキップが容易になる。
--------------------------------------------------------------------------------
`▲

%D321:「%D32」への補足
`▼
--------------------------------------------------------------------------------
(0)【%191-%192】は「WILD.pdf」/* [Trial_11]① */からの引用
 ・「WILD.html」/* [Trial_11]⑧ */は「W6」の文法と「WOS」の紹介
 ・「Python」の「elif」は「W6」の「;:」と同じ/*【[Trial_5](5)】*/
 ・行頭のインデントでネストの深さを見るのは「Python」と同じ
(1)参考資料
 ①「WILD.pdf」 @https://1drv.ms/b/s!Ahb2teuYQIZ7glV-bOfqJ9mf-DV1?e=YkVWDa
 ②「WILD.html」@samewhere in https://mypocket.ntt.com/
 ③ [Trial_5]   @https://oshino3.blogspot.com/2020/05/python5_48.html
 ④ [Trial_11]  @https://oshino3.blogspot.com/2020/06/python11.html
 ⑤「L8」     @https://blog.goo.ne.jp/bonsai-juku/e/17b9d274a5a4717bc35a770385ea54f8
 ⑥「C&IN」     @[%18] in「①」
(2)「W6」の当初の目標は「tinyPython」と同様
 ①「WILD」の中間コードで記述した256KBのインタプリタで動作する組込用ソフト
 ②「C言語」と同様にコンソール入出力はライブラリ関数「C&IN」,「C&OUT」.
 ③「WOS(WILD&OS)」のコンソール画面とコマンド([%02]の[%7])は時間切れ.
 ④文字列は電話機と同様のテンキーで入力./*「SI / SO」に「* / #」*/
 ⑤「W7」の文字列は ASCII だから全角スペース(1面1区)不可
  「http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0213/
(2)
(3)
(4)
--------------------------------------------------------------------------------
`▲
%D322:headboost.jp/page/14/」からの引用
`▼
--------------------------------------------------------------------------------
1. イテレータとは
1.1. イテラブルからイテレータを作る | iter 関数
1.2. イテレータから要素を順番に取り出す | next 関数
2. ジェネレータとは
2.1. ジェネレータ関数でイテレータを作る
2.1.1. def 文でジェネレータ関数を定義する
2.1.2. ジェネレータ関数を変数に代入してジェネレータ型オブジェクトを作る
2.1.3. ジェネレータから要素を 1 個ずつ取り出す | next 関数
2.2. ジェネレータを使ったコード例
2.2.1. 数値列を作る
2.2.2. FizzBuzz ゲームを作る
2.2.3. 単語当てクイズ
3. 様々なジェネレータ式
3.1. ジェネレータ内包表記
3.2. ジェネレータに値を送る
3.3. サブジェネレータからメインジェネレータに値を送る
4. まとめ
--------------------------------------------------------------------------------
`▲「https://www.headboost.jp/page/□/」(1≦□≦19)

%D33:コーディングスタイル」のコピー/*【[Tutr_4.8]】*/
`▼
--------------------------------------------------------------------------------
Python には、ほとんどのプロジェクトが守っているスタイルガイドとして「PEP 8」があります。
 それは非常に読み易く目に優しいコーディングスタイルを推奨しています。
 全ての Python 開発者はある時点でそれを読むべきです。
 ここに最も重要な点を抜き出しておきます:

(1)インデントには空白 4 つを使い、タブは使わないこと。
 空白 4 つは (深くネストできる) 小さいインデントと
  (読み易い) 大きいインデントのちょうど中間に当たります。
 タブは混乱させるので、使わずにおくのが良いです。

(2)ソースコードの幅が 79 文字を越えないように行を折り返すこと。
 こうすることで小さいディスプレイを使っているユーザも読み易くなり、
 大きなディスプレイではソースコードファイルを並べることもできるようになります。

(3)関数やクラスや関数内の大きめのコードブロックの区切りに空行を使うこと。
(4)可能なら、コメントは行に独立で書くこと。
(5)docstring を使うこと。
 演算子の前後とコンマの後には空白を入れ、
 括弧類のすぐ内側には空白を入れないこと: a = f(1, 2) + g(3, 4)。

(6)クラスや関数に一貫性のある名前を付けること。
慣習では「 UpperCamelCase★ 」をクラス名に使い、
★https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%A1%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9
 lowercase_with_underscores を関数名やメソッド名に使います。
 常に self をメソッドの第 1 引数の名前
 (クラスやメソッドについては クラス初見 を見よ) として使うこと。

(7)あなたのコードを世界中で使ってもらうつもりなら、
 風変りなエンコーディングは使わないこと。
 どんな場合でも、Python のデフォルト UTF-8 またはプレーン ASCII が最も上手くいきます。

(8)同様に、ほんの少しでも他の言語を話す人がコードを読んだり
 メンテナンスする可能性があるのであれば、非 ASCII 文字も識別子に使うべきではありません。
--------------------------------------------------------------------------------
`▲
%D38:
`▼
--------------------------------------------------------------------------------
(0)趣旨:「with all the ASCII characters, including"$","?" and "`"
(1)参考資料
 ①[%61]@https://oshino3.blogspot.com/2020/05/python6.html
(2)非慣用トークンには先頭に「`」を付加して末尾に1個以上の半角スペースを付ける.
 ・「Courier」は等幅フォントだから見落としにくい.
  /*【[%61](2)①】のようにオプションで左端のスペースをシアンにする」*/
(3)
(4)
--------------------------------------------------------------------------------
`▲

%D39:
`▼
--------------------------------------------------------------------------------
(0)趣旨:「IDLE」準拠に拘らない」/*「(4)②」*/
(1)参考資料
 ①[Tutr_2.2.1]@https://docs.python.org/ja/3/tutorial/interpreter.html#source-code-encoding
  ・https://docs.python.org/ja/3/tutorial/
 ②「ピークの定理(17)」@https://oshino3.blogspot.com/2020/05/17.html
(2)「(1)①」からの引用
 ・デフォルトでは、Python のソースコードは UTF-8 でエンコードされているものとして扱われます。
  UTF-8 では、世界中のほとんどの言語の文字を、同時に文字列リテラル、識別子、コメントなどに書けます。
 ・ただし、標準ライブラリは識別子に ASCII 文字のみを利用していて、
  その他のポータブルなコードもその慣習に従うべきです。
 ・それらの文字を正しく表示するためには、エディターはそのファイルが UTF-8 である事を識別して、
  そのファイルに含まれている文字を全てサポートしたフォントを使わなければなりません。
(3)「(1)②」の%2(3)からの引用
 ①{擬似コードによる表現}@https://blog.goo.ne.jp/bonsai19/e/bb51b0440ad573d19b28a4fd73041416
 /*「TeXに準じた記法の背景色は Cyan」as「x^{3} - 1 = 0」,「A^{(i, j)}」*/
 ②[_数学記号の表]@https://ja.wikipedia.org/wiki/数学記号の表
 ③「+」「-」「*」「/」は「C言語」の算術演算子と同じ./*「%」は使わない */
 ④比較演算子には「」,「」,「」,「」,「」,「」を使う./*背景色は「Cyan」*/
 ④非慣用記法は本文中に「 :=」で定義する./*「□」の背景色は「Green」*/
(4)「(1)②」の数式の例/*「'∠'はJISの数学記号」*/
 ①「W`(K' / M) = cos`( ∠`(K' / M)) + i_ * sin( ∠(K' / M) )
 ②「IDLE★」is an「idle」importer of Library functions.だから気にしない.
  ★https://ja.wikipedia.org/wiki/IDLE_(Python)
  /*〔マルチウィンドウ型のテキストエディタである。〕*/
  /*〔「JDK★」と類似の「PDK」の方がよい?〕*/
  ★http://e-words.jp/w/JDK.html
 ③「C言語」の標準関数を用いて「IDLE」を実装するのが常道?
 ④「MicroPython★」 is not idle !
  ★https://ja.wikipedia.org/wiki/MicroPython
(5)【[reference]】より【[tutorial]】に準拠した「PDK」を各国が自作すればよい.
②国名コード/*「e-mail」*/   https://ja.wikipedia.org/wiki/%E5%9B%BD%E5%90%8D%E3%82%B3%E3%83%BC%E3%83%89
 ③IOCコード一覧/*「一番分かりやすい」*/   https://ja.wikipedia.org/wiki/IOC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7
--------------------------------------------------------------------------------
`▲


%D34:準備中/*「順不同」*/
`▼
--------------------------------------------------------------------------------
%D0:Dscarding「In[□]:」
%E0:Extracted Paragraphs
%F0:Final Document/*「Trial_15」*/
%G0:Genearated Class for OctalPython
%H0:Help about「Python」/*「OKWave」*/
%I0:「CourierPython」/*【[%D38]:International】*/
%J0:「KanjiPython」/*【[%D39]】:for(ja-jp★)*/
 ★http://tooljp.com/qa/6A06A52AFF619E1149257F760058738C.html
--------------------------------------------------------------------------------
`▲

%D4:「ピークの定理(17)★」関連資料へのリンク
 ★https://oshino3.blogspot.com/2020/05/17.html
`▼
--------------------------------------------------------------------------------
(0)行数に余裕があるので「gooブログ」へのリンクを追加
(1)参考資料
 ⑤「〔第1章〕の復習(5)★」@
 ★https://blog.goo.ne.jp/blogmura-yy/e/44f62cc03d4d7c0d33d6a4fe59e26331
 ⑥「〔第2章〕の復習(6)★」@
 ★https://blog.goo.ne.jp/blogmura-yy/e/1494b69f0bbb8c6d7793afb467dcafa0
 ⑦「〔第2章〕の復習(7)★」@
 ★https://blog.goo.ne.jp/blogmura-yy/e/db7541e83f506a504199fa715a513b12
 ⑧「〔第2章〕の復習(8)★」@
 ★https://blog.goo.ne.jp/blogmura-yy/e/2cb7c35acfcc634cf14d095283143f6b
--------------------------------------------------------------------------------
`▲①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳


コメント

このブログの人気の投稿

「日記帳(2023 冬)」

ブログの教材で学ぶMATH(1)