もうすぐエンジニアとして働き始めて2年目になります。
最近の業務はフロントエンドが多めですが、バックエンドの守備範囲を広げておこうと思い、Pythonチュートリアルをやってみました。
学習メモです。
雑感
- プログラミング初学者向けではない(プログラミング用語が説明もなくサラッと出てくるので)
- 経験者が文法を概観するのにはよいかな
- 細かい説明が多いので、手を動かすのは気になったところだけでいい
所要時間
- 説明は結構ちゃんと読んで、手を動かすのは少し: 8h
- 侍さんには60時間と書かれていました
気になったところをいくつかあげてみる
仮引数のアスタリスク(*
)
関数に可変長引数を指定する場合に使うんですね。
1個の場合と2個の場合でまとめられ方が違うようです
# *1個の場合はタプルにまとめられる
def hello(*people):
for person in people:
print("hello " + person)
hello("Tom", "Sam", "Nick")
# 2個の場合は辞書型にまとめられる
def fuga(**args):
for key, value in args.items():
print('key:' + key + ' / value:' + value)
# フォーマット済み文字列リテラル(f-string )
print(f'key: {key} / value: {value}')
fuga(a='aaa', b='bbb', c='ccc')
関数の引数として、単独で/
や*
があった場合は、引数の受け渡し方に制限がかかるようです。
# /(スラッシュ)はそれより前の引数を位置専用引数として制限する
def self_introduce(first_name, last_name):
print(f"hello, I'm {first_name} {last_name}.")
self_introduce("naoya", "tanaka")
# *はそれより後の引数をキーワード引数として制限する
def kwd_only_arg(*, arg):
print(arg)
参考: [python初心者向け]関数の引数のアスタリスク(*)の意味
ドキュメンテーション文字列
>>> def my_function():
... """Do nothing, but document it.
...
... No, really, it doesn't do anything.
... """
... pass
...
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn't do anything.
関数定義の中にドキュメントを書くことが標準で推奨・サポートされていることに驚きました。
関数名.__doc__
で記載したドキュメントにアクセスできるんですね。
リスト型
5.1. リスト型についてもう少し
「リスト型って、JavaScriptでいうところの配列かな?」と思っていたら、別途「array」もあるんですね
- リスト
- 組み込み型
-
import
なしで使えるので使い勝手が良い(簡単な処理であれば、基本これ使うらしい) - 違うデータ型を格納できる
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
list = [1, "hello", [1, 2, 3]]
- array
- 標準モジュールである
array
をimport
して使う - 同じデータ型の値のみ格納できる
- 第一引数で型(型コード)を指定する
- 一次元配列のみ
- 標準モジュールである
import array
arr_int = array.array('i', [1, 2, 3, 4])
他にも、演算に色々便利なnumpy.ndarray
というのがあるらしい
-
numpy.ndarray
- Numpyをインストール & importして使う
-
numpy.array
でnumpy.ndarray
型の配列を作成する - 演算に便利な関数・メソッドが色々とあるらしい
import numpy as np
arr_2d = np.array([[1, 2, 3], [3 ,4, 5]])
参考: Pythonのリストと配列とnumpy.ndarrayの違いと使い分け
パッケージ
パッケージ (package) は、Python のモジュール名前空間を "ドット付きモジュール名" を使って構造化する手段です。
ディレクトリ単位でモジュールを構造化して、モジュール名.サブモジュール名
という形でアクセスできるようになるんですね。
パッケージとしたいディレクトリに内に__init__.py
を配置することが必要で、パッケージを読み込むと、__init__.py
に記載された処理が実行されるようです。
詳しくはこちら: Python の init.py とは何なのか
他にもdoctest
やvenv
について振り返りたかったのですが、長くなってしまったのでここまでにしておきますw
(せめてメモとりながら勉強しないと、どこに何が書いてあったか忘れてしまうなぁ...)