[python 3]公式言語を読む練習1


エンコーディング宣言


Pythonスクリプトの1行目または2行目のアノテーションが正規表現coding[=:]\s*([-\w.]+)と一致する場合、アノテーションは符号化宣言として処理される.この正規表現の最初のグループは、ソースファイルの符号化名を指定します.エンコーディング宣言は、行全体に1つしか表示されません.2行目の場合、1行目はコメントです.コード宣言の提案形式は2種類ある.
# -*- coding: <encoding-name> -*-
# vim:fileencoding=<encoding-name>
デフォルトエンコーディング宣言が見つからない場合、デフォルトエンコーディングはUTF-8です.また、最初のファイルがUTF-8 BOM(b'\xef\xbb\xbf')である場合、ファイル符号化はUTF-8によって宣言されるべきである.

Byte Order Markとは?


UTF-8は1993年初めに紹介された、16ビットコード単位でucs-2の方法で符号化されたUnicode textの全盛法です.16ビットコード単位でバイトを表す方法は2種類あり、最も意味のあるバイトが前のBigEndianメソッドと最も意味のあるバイトが後のLittle Endianメソッドである.
伝送を受ける側はUnicodeがどのように表現されているかを知る必要がある.だから意味のあるテキストの前にU+FEFFという魔法の数字を入れます.この数字はBOM(Byte Order Mark)です.

明示的な行のマージ


2つ以上の物理行は、逆スラッシュ文字(\)を使用して論理行に結合することができる.物理行が文字列やコメントの一部ではなく、反スラッシュ文字で終わると、反スラッシュと後の行開き文字が削除されます.
if 19000 < year <2100 and 1 <= month <= 12 \
    and 1 <= day <= 31 and 0 <= hour < 24 \
    and 0 <= minute < 60 and 0 <= second < 60:
        return 1

インデント


論理行の先頭のスペースは、行のインデントレベルを計算するために使用され、文の組合せを決定するためにも使用されます.
タブ(左から右)は1~8個のスペースに変換され、整列したスペース文字の総数は8の倍数になります.△これはUnixが使用するルールに合致するためです.最初の空白以外の文字の前の空白の合計数を決定します.インデントは反スラッシュで区切ることはできません.
ソースファイルにタブとスペースが混在している場合は、タブがどのくらいのスペースに対応しているかによって異なる解釈ができ、TabErrorになります.
連続行のインデントレベルは、スタックを使用してINDENTタグとDEDEDENTタグを作成するために使用されます.
ファイルの最初の行を読み込む前に、0をスタックに入れます.この値段はこれ以上言うことはない.スタック内の値は、常にスタックが下から上に上がると単調に増加します.各論理行の先頭で、行のインデントレベルはスタックの一番上の値と比較されます.同じ場合、何も起こりません.より大きい場合は、その値をスタックに入れ、INDENTトークンを作成します.より小さい場合は、スタック内の値の1つである必要があります.この値より大きいすべてのスタックの値を取り出し(pop)、取り出し回数と同じDEDEDENTタグを作成します.ファイルの最後に、スタックの0より大きい値を持つDEDENTタグを作成します.

キーワード


次の識別子は、保持語または言語のキーワードとして使用され、通常の識別子として使用できません.
Flase, None, True, and, as, assert, async, await, break, class, continue,
def, del, elif, else, except, finally, for, from, global, if, import, in,
is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield

識別子と保存領域


_*


特別な識別子_は、インタラクティブ割り込みにおいて最後に実行された結果の値を記憶するために使用される.builtinsモジュールに格納されます.インタラクティブモードでなければ、_は特別な意味も定義もありません.

__*__


システム定義名.非公式に「ダンテ=DoubleUNDERSCOREメソッド」と呼ばれています.

__*


クラス内のプライベート・セクションの名前を定義します.これは、親クラスと子クラスのprivateプロパティ間の名前の競合を回避するためです.
次は2.4リットル
  • Python言語リファレンス
  • The byte-order mark(BOM) in HTML