Pythonチュートリアル

2章 Pythonインタープリタの使い方

2.1インタープリタの起動

インタープリタとは・・・Jupyer Notebookのコマンドラインのこと

インタープリタの終了方法・・・[Ctrl]+[Z] もしくは quit()

python -c コマンド」

python -m モジュール名」

 

3章 気楽な入門編

3.1 Pythonを電卓として使う

3.1.1数値

17/3・・・除算(最後は四捨五入)

17//3・・・切下げ除算(整数除算)

17%3・・・除算の余り

 

・対話モードでは最後に表示した式を変数「_」に代入する

複素数の接尾辞  「j」「J」

3.1.2文字列

word[-1]・・・「-1」は最後のキャラク

・-0は0と同じことなので、負のインデックスは-1から始まる。

・スライシング可

word[2:5]・・・位置2(2含む)から5(5含まず)まで

・始点は常に含まれ終点は常に除外される。

・大きすぎるインデックスを指定するとエラー・・・word[1000]とか

・スライシングは大きいインデックスを指定してもエラー出ない・・・word[4:1000]とか

・文字列は変更不能体(immutable)

    word[0]="J"とかで変更かけられない

・変更したい場合は、新しいメモリ(文字列)が必要

 

・置換・・・文字列.replace(置換元,置換先,置換回数)

・連結と繰り返し・・・+で連結、*で繰り返し

3.1.4リスト

・リストは異なる型を入れられるが、普通同じ型を入れる

・スライシング可

・リストは変更可能体(mutable)

・ビルトイン関数len()はリストに使える・・・len(['a','b','C']) は 3を返す

3.2プログラミング、はじめの一歩

・print関数 のキーワード引数[end=]・・・出力末尾の改行の抑制や、出力末尾の他の文字列に変更可能

・end='' がないと勝手に改行しおる!!

#改行なしで出力したい時に「end=''」を使います。
print(text_a, end='')
print(text_b)
#複数の文字列の間に空白を開けたくない場合にも使えます。
print(text_c, end='')
print(text_d, end='')
print(text_e)

4章 制御構造ツール

4.2 for文

・反復には2種類ある。シーケンスに対して、シーケンス内順序で反復と

 数字の連なりに対して反復。

・for文にもelseがある。最後に必ず通るもの。ただ、breakを通るとelse節は通らない

*注意:ループはelse節ある。(breakを通るとelse節は通らない。)

4.3 range()関数

range(start,end,skip)

 4.7 関数(無名関数、ラムダ式

・関数(無名関数)の定義

 

 def 関数名(仮引数):

   構文

 

 lambda 仮引数:構文

 

・関数の種類は3つある。

  -可変長引数・・・可変長とはタプル型渡し辞書型渡しを含む関数

    例1)タプル型渡し可変長引数

         定義側 def spam(ham,egg,*arg):

       コール側 spam(1,2,3,4,5)

                           つまり、ham=1,egg=2,arg=(3,4,5)で引き渡す

        勝手にタプルの要素を判断してくれる。要素数も問われない。

    例2)辞書型渡し可変長引数

       定義側 def spam(ham,egg,**arg):

                          コール側 spam(1,2,shopkeeper=3,client=4,sketch=5)

     ・タプル型、辞書型チャンポンの場合は、タプルが前、辞書が後ろ

    例3)タプル・辞書チャンポン型渡し可変長引数

       定義型 def spam(ham,egg,*arg,**arg)・・・タプルが前、辞書が後ろ

 

  -キーワード引数    <=>   位置引数

              定義 def spam(ham,egg,*arg):

    コール側

    ・関数コールする際は、必ず位置引数が先でキーワード引数を後にする

    ・キーワード引数の順序は問われない

    ・

  -デフォルト引数・・・定義時にデフォルト値を引数に与える

              使い方 デフォルトを用意しておいて、必要な時だけ変更する。

 

 

    定義側   def spam(ham,egg=1,bacon=3):

    コール側 spam(0)

                 つまり、ham = 0で残りの引数は設定不要。

 4.7.4 リストのアンパック

・リスト名の前に*を付けるとアンパックできる

>>>args=[3,6]

>>>list(range(*args))

[3,4,5]

5章 データ構造

5.1 リストについての補足

・リスト中のxの個数

 list.count(x)

 

・最初のアイテム削除

 list.remove(x)

・全削除

 list[:] =

   del list

・indexで削除

   list[2:5] =

   del list[2:5]

 

5.1.3 リスト内包

       squares =

       for x in range(10):

            squares.append(x**2)

 

      squares = list(map(lambda x:x**2,range(10)))

      squares = [x**2  for x in range(10) ]

 

リスト内包はにいくつでもfor文を入れられるが、3つ以上はダメ。

for文・if文が連続で入れ子で現れたものを1行にしたもの。

5.3 タプルとシーケンス

・タプルは変更不能体(immutable)

・タプルの初期化は()で行う。例)タプル =()

・タプルの初期化はカッコが要らない 例)タプル= 1,2,3

・タプルは、要素に「,」 例)タプル=1,<=ぶら下がったカンマ

・タプルパッキング・・・ タプル=1,2,3 

・タプルアンパッキング・・・ 要素1,要素2,要素3=タプル

 

5.6 ループのテクニック

・辞書型ループ

   for key,value in 辞書.items():

 

・シーケンスループ

   for idx, v in enumerate(シーケンス):

 

・シーケンスループ逆順

   for seq1,seq2 in reversed(シーケンス):

 

・2つのシーケンスループ

   for seq1,seq2 in zip(シーケンス1,シーケンス2):

5.7 条件についての補足

・論理演算子(ブール演算子、短絡演算子

・比較演算子: in 、 not  in・・・シーケンスに値が存在

5.8  シーケンスの比較、その他の型の比較

・最初のアイテムを比較し、異なっていれば結論、同じならば次のアイテムへ進む

  (1,2,3) < (1,2,4)

 

 

6章 モジュール

6.1 さらにモジュールについて

6.1.2 モジュールの検索パス・・・モジュールインポート時の挙動

①ビルトインモジュール内に   モジュール名   を探す

②sys.path変数で得られるリスト内に   モジュール.py   を探す

   (モジュール検索パスは標準ライブラリのsysモジュールのsys.pathに格納)

 

6.4 パッケージ

・パッケージをimport時に発生するエラーはImportError

・このエラーは、モジュールのディレクトリが変更した際に発生。例えば、バージョンアップとかである。

try:

   from lesson_package import utils

except ImportError:

   from lesson_package.tools import utils

 

こうしていれば旧バージョン、新バージョンどちらでもimportを対応できる。

ただし、ディレクトリに変更内容の詳細を知っている必要がある。

   

 

6.4.1 

7章 入出力

7.1 手の込んだ出力フォーマット

・print関数とstr.formatメソッド

   str.format()メソッドに渡されたオブジェクトが{}に置き換えられる。

           print("{}and{}",.format("spam","eggs"))

 

 

7.2ファイルの読み書き

7.2.2 構造のあるデータをjsonで保存する

pythonプログラム中のデータ(オブジェクト、文字列)をJSON形式に変換することを

 シリアライズという

・逆変換をシリアライズという

・ファイルへのシリアライズ(JSON化):dump()

・文字列へのシリアライズ(JSON化):dumps()

・ファイルからデシリアライズ(Python化):load()

・文字列からデシリアライズ(Python化):loads()

 

 

8章 エラーと例外 

8.3 例外の処理

pythonではすべてのexceptionをcatchして次の処理に進むのはあまり良くない

・できれば、exceptionを指定してcatchする方が良さそう

8.6 クリーンナップ動作の定義

・finally節は外部リソース(ファイルやネットワークのコネクションなど)をその利用

 の成否にかかわらず解放するのに便利。

・finally節は後続の処理に影響がある変数値の設定するのに便利。

・finally節は処理が完了したことを示すログの表示するのに便利。

 

8.6.1 オブジェクトに定義してあるクリーンナップ動作

with open("myfile.txt") as f:

      for line in f:

            print(line,end="")

このwithにはtry~catchが含まれている。

◎ビルトイン関数

・range()

・len()

◎シーケンスとは

・配列と呼ばれる順序付きのコレクション:シーケンス

・リスト型、タプル型、文字列型、バイト型

◎反復子イテレータと反復可能体(イテラブル)

反復子(イテレータ:for演算子、list()関数

反復可能体(イテラブル):range()関数、リスト、タプル

反復可能体を利用する関数や構造は反復子と呼ぶ

・反復可能体=イテラブル=イテラブルオブジェクト・・・まあ元データですなぁ

     -繰り返し可能なオブジェクト

  -反復を掛けることで望みのシーケンスのアイテムを連続的に返すオブジェクト

  -空になるまで連続的にアイテムを供給する元データ・・・このイメージ

  -

  -実際にはリストを作らない

反復子=イテレータ・・・イテラブルのコピー。要素を取り出すと減っていく。

f:id:strongerthansword:20201009164703p:plain

リストからイテレータ