「Python」試用録(3)」
%3:「Python」試用録(3)」
「WILDの処理系」作成のための「断片的備忘録」です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
/*「緑」は定義行のみ(他ではシアン).「茶」の語句があるパラグラフは「IDも茶」*/
%31:[@IT_3]/*「数値と算術演算 (1/2)」*/`▼
--------------------------------------------------------------------------------
(1)「1+1」の計算
「In[1]:『1+1』」,「Out[1]:2」.
/*「『□』はコンソール入力」*/
(4)「W7」で「write,. 8(7) .`{1 + 1 `} 」を実行すると「2」と表示される
(5)「W7」の予約トークンを「`□ '」で明示./*「末尾に半角スペース」*/
①例えば「`write,. 」,「`if: 」「`& 」,「`? 」
/*「全角スペースは2個の半角スペースと置換」*/
②【[%221](4)①】の「8( 020 ? )」を「`8( 020 `? )'」と略記./*「`8( 020 ) = &020」*/
③【[%221](4)②】の「9( 020 ? )」を「`9( 020 `? )'」と略記.
(6)システム関数「`len( X )'」は文字列「X」の長さ.
/*「X = 'World'」⇒「`len('Hello'+ X ) = 5 + `len( X )」./*「`len( X ) = 5」*/
(7)システム関数「`addr($X)'」は名前「$X」の定義行の行番号./*「行頭でなければ8進実数」*/
(8)「W7」では実数型の整数部と小数部は独立して計算する.
①小数部の演算結果が整数になっても整数部の値に加算しない
(9)字句解析を容易にするためにトークンの末尾に半角スペースを付加.
--------------------------------------------------------------------------------
`▲
%311:Console入力
`▼
------------------------------------------------------------
(0)「In[1]:『1+1』」,「Out[1]:2」.
(1)参考資料
①https://docs.python.org/ja/3/reference/index.html
②組み込み関数
https://docs.python.org/ja/3/library/functions.html
・input([prompt])引数 prompt が存それが末尾の改行を除いて
標準出力に書き出されます。
・次に、この関数は入力から 1 行を読み込み、
文字列に変換して (末尾の改行を除いて) 返します。
③https://www.python-izm.com/introduction/console_input/
・your_name = input('>> ')/*「[prompt]='>> '」*/
④https://itips.krsw.biz/python-std-input/
・var = input("Please input variable : ")
/*「[prompt]="Please input variable : "」*/
------------------------------------------------------------
`▲
%312:関数定義
`▼
------------------------------------------------------------
(0)「In[3]:」
def helloworld():
name = input('input your name: ')
message = 'Hello '+ name + ' !'
print(message)
(1)参考資料
①[@IT_12]Pythonの関数
②https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions
(2)「(0)」の実行結果
input your name: World
Hello World !
(3)これまでにprint関数とinput関数を利用してきたが、
①関数は「プログラマーが自由に定義」できる。
定義した関数は、print関数などと同様に呼び出しが可能だ(6行目)。
②このプログラムは大きく次の2つの部分に分かれている。
(4)
------------------------------------------------------------
`▲
%313:「リスト」クラス/*「[@IT_16]」*/
`▼
------------------------------------------------------------
(0)「C」の配列は「リスト」で実装できる.
(1)https://docs.python.org/ja/3/library/functions.html#func-list
(1)class list([iterable])
list は、実際には関数ではなくミュータブルなシーケンス型で、
リスト型 (list) と
シーケンス型 --- list, tuple, range にドキュメント化されています。
(2)class object
object は全てのクラスの基底クラスです。
これは、 Python のクラスの全てのインスタンスに共通のメソッド群を持ちます。
この関数はいかなる引数も受け付けません。
①oct(x)
整数を先頭に "0o" が付いた 8 進文字列に変換します。
結果は Python の式としても使える形式になります。
②open(file, mode='r', buffering=-1, encoding=None, errors=None,
newline=None, closefd=True, opener=None)
・mode はオプションの文字列で、デフォルトは 'r' で、
読み込み用にテキストモードで開くという意味です。
・newline は universal newlines モードの動作を制御します (テキストモードでのみ動作します)。
None, '', '\n', '\r', '\r\n' のいずれかです。
------------------------------------------------------------
`▲
%314:「タプル」クラス/*「[@IT_19]」*/
`▼
------------------------------------------------------------
(0)「C」の構造体は「タプル」で実装できる.
(1)class tuple([iterable])/*「組み込み関数」*/
https://docs.python.org/ja/3/library/functions.html#func-tuple
・tuple は、実際は関数ではなくイミュータブルなシーケンス型で、
タプル型 (tuple) と シーケンス型 --- list, tuple, range にドキュメント化されています。
(2)class type(name, bases, dict)
引数が1つだけの場合、object の型を返します。返り値は型オブジェクトで、
一般に object.__class__ によって返されるのと同じオブジェクトです。
オブジェクトの型の判定には、 isinstance() 組み込み関数を使うことが推奨されます。
これはサブクラスを考慮するからです。
(3)zip(*iterables)
それぞれのイテラブルから要素を集めたイテレータを作ります。
この関数はタプルのイテレータを返し、
その i 番目のタプルは引数シーケンスまたはイテラブルそれぞれの i 番目の要素を含みます。
このイテレータは、入力イテラブルの中で最短のものが尽きたときに止まります。
(4)単一のイテラブル引数が与えられたときは、1 要素のタプルからなるイテレータを返します。
引数がなければ、空のイテレータを返します。次と等価です:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
イテラブルの左から右への評価順序は保証されています。
(5)そのため zip(*[iter(s)]*n) を使ってデータ系列を
長さ n のグループにクラスタリングするイディオムが使えます。
これは、各出力タプルがイテレータを n 回呼び出した結果となるよう、
同じ イテレータを n 回繰り返します。
これは入力を長さ n のチャンクに分割する効果があります。
zip() に続けて * 演算子を使うと、zip したリストを元に戻せます:
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True
------------------------------------------------------------
`▲作業中
「WILDの処理系」作成のための「断片的備忘録」です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
/*「緑」は定義行のみ(他ではシアン).「茶」の語句があるパラグラフは「IDも茶」*/
%31:[@IT_3]/*「数値と算術演算 (1/2)」*/`▼
--------------------------------------------------------------------------------
(1)「1+1」の計算
「In[1]:『1+1』」,「Out[1]:2」.
/*「『□』はコンソール入力」*/
(4)「W7」で「write,. 8(7) .`{1 + 1 `} 」を実行すると「2」と表示される
(5)「W7」の予約トークンを「`□ '」で明示./*「末尾に半角スペース」*/
①例えば「`write,. 」,「`if: 」「`& 」,「`? 」
/*「全角スペースは2個の半角スペースと置換」*/
②【[%221](4)①】の「8( 020 ? )」を「`8( 020 `? )'」と略記./*「`8( 020 ) = &020」*/
③【[%221](4)②】の「9( 020 ? )」を「`9( 020 `? )'」と略記.
(6)システム関数「`len( X )'」は文字列「X」の長さ.
/*「X = 'World'」⇒「`len('Hello'+ X ) = 5 + `len( X )」./*「`len( X ) = 5」*/
(7)システム関数「`addr($X)'」は名前「$X」の定義行の行番号./*「行頭でなければ8進実数」*/
(8)「W7」では実数型の整数部と小数部は独立して計算する.
①小数部の演算結果が整数になっても整数部の値に加算しない
(9)字句解析を容易にするためにトークンの末尾に半角スペースを付加.
--------------------------------------------------------------------------------
`▲
%311:Console入力
`▼
------------------------------------------------------------
(0)「In[1]:『1+1』」,「Out[1]:2」.
(1)参考資料
①https://docs.python.org/ja/3/reference/index.html
②組み込み関数
https://docs.python.org/ja/3/library/functions.html
・input([prompt])引数 prompt が存それが末尾の改行を除いて
標準出力に書き出されます。
・次に、この関数は入力から 1 行を読み込み、
文字列に変換して (末尾の改行を除いて) 返します。
③https://www.python-izm.com/introduction/console_input/
・your_name = input('>> ')/*「[prompt]='>> '」*/
④https://itips.krsw.biz/python-std-input/
・var = input("Please input variable : ")
/*「[prompt]="Please input variable : "」*/
------------------------------------------------------------
`▲
%312:関数定義
`▼
------------------------------------------------------------
(0)「In[3]:」
def helloworld():
name = input('input your name: ')
message = 'Hello '+ name + ' !'
print(message)
(1)参考資料
①[@IT_12]Pythonの関数
②https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions
(2)「(0)」の実行結果
input your name: World
Hello World !
(3)これまでにprint関数とinput関数を利用してきたが、
①関数は「プログラマーが自由に定義」できる。
定義した関数は、print関数などと同様に呼び出しが可能だ(6行目)。
②このプログラムは大きく次の2つの部分に分かれている。
(4)
------------------------------------------------------------
`▲
`▼
------------------------------------------------------------
(0)「C」の配列は「リスト」で実装できる.
(1)https://docs.python.org/ja/3/library/functions.html#func-list
(1)class list([iterable])
list は、実際には関数ではなくミュータブルなシーケンス型で、
リスト型 (list) と
シーケンス型 --- list, tuple, range にドキュメント化されています。
(2)class object
object は全てのクラスの基底クラスです。
これは、 Python のクラスの全てのインスタンスに共通のメソッド群を持ちます。
この関数はいかなる引数も受け付けません。
①oct(x)
整数を先頭に "0o" が付いた 8 進文字列に変換します。
結果は Python の式としても使える形式になります。
②open(file, mode='r', buffering=-1, encoding=None, errors=None,
newline=None, closefd=True, opener=None)
・mode はオプションの文字列で、デフォルトは 'r' で、
読み込み用にテキストモードで開くという意味です。
・newline は universal newlines モードの動作を制御します (テキストモードでのみ動作します)。
None, '', '\n', '\r', '\r\n' のいずれかです。
------------------------------------------------------------
`▲
%314:「タプル」クラス/*「[@IT_19]」*/
`▼
------------------------------------------------------------
(0)「C」の構造体は「タプル」で実装できる.
(1)class tuple([iterable])/*「組み込み関数」*/
https://docs.python.org/ja/3/library/functions.html#func-tuple
・tuple は、実際は関数ではなくイミュータブルなシーケンス型で、
タプル型 (tuple) と シーケンス型 --- list, tuple, range にドキュメント化されています。
(2)class type(name, bases, dict)
引数が1つだけの場合、object の型を返します。返り値は型オブジェクトで、
一般に object.__class__ によって返されるのと同じオブジェクトです。
オブジェクトの型の判定には、 isinstance() 組み込み関数を使うことが推奨されます。
これはサブクラスを考慮するからです。
(3)zip(*iterables)
それぞれのイテラブルから要素を集めたイテレータを作ります。
この関数はタプルのイテレータを返し、
その i 番目のタプルは引数シーケンスまたはイテラブルそれぞれの i 番目の要素を含みます。
このイテレータは、入力イテラブルの中で最短のものが尽きたときに止まります。
(4)単一のイテラブル引数が与えられたときは、1 要素のタプルからなるイテレータを返します。
引数がなければ、空のイテレータを返します。次と等価です:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
イテラブルの左から右への評価順序は保証されています。
(5)そのため zip(*[iter(s)]*n) を使ってデータ系列を
長さ n のグループにクラスタリングするイディオムが使えます。
これは、各出力タプルがイテレータを n 回呼び出した結果となるよう、
同じ イテレータを n 回繰り返します。
これは入力を長さ n のチャンクに分割する効果があります。
zip() に続けて * 演算子を使うと、zip したリストを元に戻せます:
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True
------------------------------------------------------------
`▲作業中
コメント
コメントを投稿