Python
基本
インストール
ドキュメント
用語
Python
プログラミング言語Pythonインタプリタ
Python コードを逐次実行するプログラム(python に main 関数などは無い)IDLE
REPL 環境(shell)とエディタを備えた、Python 付属の IDEPyPI
Python Package Index。サードパーティライブラリの集中型リポジトリpip
PyPI 上に公開されているパッケージのインストールユーティリティ
クオート
- 文字列は
'
で囲む('
のエスケープが必要なときはダブルでも OK) - docstring(heredoc) は
"""
で囲む。複数行に渡って書ける。
ライブラリ
- モジュール(
os
,datetime
など)-> 関数の集まり - ライブラリ -> モジュールの集まり。特に、デフォルトで用意されているライブラリを標準ライブラリと呼ぶ。
import os
import sys
import datetime
sys.platform
sys.version
os.getcwd()
os.environ
os.getenv("home")
datetime.date.today()
# モジュールに定義されている関数の一覧を表示
dir(os)
# 関数の使い方を調べる
help(os.environ)
import
import
でモジュール全体を読み込むfrom - import
で関数だけを読み込む- インポートはファイルのトップレベルでのみ行う。関数内で行うと、呼び出すたびに実行され、問題が発生する。
import time
time.sleep()
from time import sleep
sleep()
インデント
- Python では
{}
を廃止し、インデントでコードブロック(suite)を区別する - コードブロックの前には
:
が必ず入る
if a == 1:
do_something()
else:
do_something()
文字列
# リストを特定の文字列を区切りとして結合する
'|'.join(['a','b','c']) # => 'a|b|c'
# 文字列を特定の文字で分割する
'a|b|c'.split('|') # => ['a', 'b', 'c']
format by placeholder
%s
str()
で出力。特殊文字はそのまま出力される。%r
repr()
で出力。特殊文字はただの文字列にエスケープされる。%d
整数で出力%1.0f
float で出力
print("I'm going to inject %s text here, and %s text here." % (x, y))
format by format()
print('The {2} {1} {0}'.format('fox', 'brown', 'quick'))
print('First Object: {a}, Second Object: {b}, Third Object: {c}'.format(
a=1, b='Two', c=12.3))
format by f-string
a = 1
b = 'wow'
print(f'{a} and {b}') # => '1 and wow'
Docstring
"""
を使うと docstring(heredoc)を書ける- 複数行に渡って書くことができる。
コレクション
type | description |
---|---|
List | 可変配列(JS の Array 相当) |
Tuple | 不変配列 |
Dictionary | key-value ペア |
Set | ユニーク値の集合 |
Boolean
True
かFalse
。パスカルケースのみ。
False と判定されるものは下記のとおり。これ以外はすべてTrue
である。
0
0.0
''
[]
{}
None
Date and Times
dt.datetime
--- 日時dt.time
--- 時間dt.timedelta
--- 期間
# 作成する
birthday = dt.datetime(1985,2,13)
# テキストをパースして作成する(p=parse)
birthday = dt.datetime.strptime('24/12/1984', '%d%m%Y)
# フォーマットして出力する(f=format)
birthday.strftime('%d%m%Y')
Falsy な値に関する注意
下記の 2 つは、異なるものである。
if cond is not None:
=>None
であった場合のみ何もしないif cond:
=>None
,0
,''
,[]
,{}
であった場合に何もしない
例えば、if somedict['some_key']:
だと、値が None だった場合だけでなく、値が 0 や空文字列の場合にも実行されない。
コンディションを書くときは 「None 以外の falsy な値(0 や空文字列)であった時に、何かする必要があるか」 を考え、falsy な値を拾う必要があれば、is not None
を使うこと。
None で無いことを調べた後に、追加の対応が必要な場合もある。例えば文字列なら空文字列でないか、配列なら要素が 0 ではないか、など。例えば、「None ではなく、空文字列でもない、文字列」を保障するには下記のようになる。
if cond is not None and \
type(cond) == str and \
cond != '':
制御
for
python の文字列はシーケンスなので反復処理できる
for i in [1,2,3]:
print(i)
for l in "hello":
print(l)
インデックスを取得する方法
for index, word in enumerate(['hello','my','friend']):
print(index, word)
# 0 hello
# 1 my
# 2 friend
Built-in Functions
print()
コンソール等に文字を出力する
print('some string')
print('some string', file=file_object) # ファイルに出力
print('some string', end='') # 行末を何にするか(デフォルトは改行)
print('a', 'b', 'c', sep=',') # => 'a,b,c'
pprint()
オブジェクトをきれいにコンソールに出力する
import pprint
pprint.pprint(some_ugly_dictionary)
range()
range(終了値)
range(開始値, 終了値, 刻み)
- 終了値は結果に含まない
range(5) # [0, 1, 2, 3, 4]
range(10, 0, -2) # [10, 8, 6, 4, 2]
sorted()
sorted()
は、dict の key や、Set を、ソートされたリストにして返す。
dict = {'e': 0, 'd': 0, 'c': 0, 'b': 0, 'a': 0}
sorted(dict) # => [a,b,c,d,e]
for key in sorted(dict):
do_something(dict[key])
my_set = {'b','c','a'}
sorted(my_set) # => ['a','b','c']
list(), set()
list や set を作る。
list('john')
set('hello')
type()
タイプを判定する
id()
変数のメモリアドレス表現する一意の数値を取得する
str()
オブジェクトを文字列にして返す
dunder name dunder main
__name__
オブジェクトには、下記の値が入る
- そのコードが、Python で直接実行されたとき=>
__main__
- そのコードが、モジュールとしてインポートされたとき=>モジュール名
下記のコードは'dunder name dunder main'と呼ばれる。コードが直接実行されているか、又はインポートされているかを調べる。
if __name__ == '__main__':
do_something()
コレクション
List
- 順序は保証される
# リテラルで作成
numbers = [1, 2, 3, 4, 5]
# ビルトイン関数で作成
list('john') # => ['j','o','h','n']
# 長さを調べる
len(numbers)
# 参照渡し
new_numbers1 = numbers
# 値渡し
new_numbers2 = numbers.copy()
# 最初の要素と最後の要素
numbers[0]
numbers[-1]
リストメソッド
# listに関するメソッドを表示
help(list)
# 追加する
numbers.append(6)
# 配列で追加する
numbers.extend([7, 8, 9])
# 指定した場所に追加する
numbers.insert(0, "first-element")
# 削除する(インデックス値ではなく、削除したい値自体を渡す。最初に見つかった値が削除される)
numbers.remove(2)
# 末尾や特定位置の要素を削除する
numbers.pop()
numbers.pop(2)
ス ライス表記
[開始値, 終了値, 刻み]
の表記をスライス表記という。いずれも省略可。- 非破壊的にリストの要素を抽出できる
- リスト以外も含むあらゆるシーケンスからスライスできる
numbers[0:5:2]
numbers[::1]
numbers[1::2]
for とリスト
for はリストやスライスを理解できるので、そのまま渡してやることができる。
Dictionary
- 構造を持つデータには Dictionary(key-value ペア)を使う。
- C++, Java ではマップと呼ばれ、Ruby ではハッシュと呼ばれるものに相当。
- 順序は保証されない
# 作成
person = {
'name': 'John',
'mail': 'john@john.com',
}
# キーの追加
person['age'] = 33
# for(キーの順は非保証)
for key in some_dictionary:
print(some_dictionary[key])
メソッド
items()
key-value ペアのリストを返す
some_dict = {'e': 0, 'd': 0, 'c': 0, 'b': 0, 'a': 0}
some_dict.items()
# => [('e', 0), ('d', 0), ('c', 0), ('b', 0), ('a', 0)]
# => 上記はdict_itemsという特殊な型
for key, value in some_dict.items():
# or
for key, value in sorted(some_dict.items()):
setdefault()
キーが未初期化だった場合に初期化を行う
some_dict.setdefault('somekey', 'somevalue')
# これは下記と等価
if 'somekey' not in some_dict:
some_dict['somekey'] = 'somevalue'
pop('キー名')
キー名の要素を抜き出して返す。辞書からは削除する。
値へのアクセス
- キーの存在が確実である場合(なければならない場合)
dict['somekey']
- キーの存在が不確実である場合
dict.get('somekey')
=> キーが存在しなければ None を返すdict.get('somekey', 'default value')
=> キーが存在しなければdefault value
を返す