Python/基礎
インタプリタ言語。
変数や引数の宣言が不要。動的型付け言語。
ブロックはインデントで表現する。行末にセミコロン等は不要
$ python script.py # スクリプトファイル名を引数に指定する方法
$ python < script.py # スクリプトファイルを標準入力ファイルとして指定する方法
$ python -i script.py # スクリプトファイル実行後にそのまま対話モードに入る方法
$ python -m module [arg] ... # pythonモジュールにはスクリプトとして実行できるものがある
$ python -c 'command [arg] ...' # ワンライナーとして実行
pythonインタプリタでは、一次プロンプトが>>>、二次プロンプトが...であり、# コメントはハッシュ文字#から行の終わりまで
# 複数行のコメントを表すものはない
print('Hello World!')
print(r'C:\some\name') # エスケープしない
print('value is ', i)
print('出力の末尾変更', end=',')
print(f'format pi is {math.pi:.3f}') # 3.142
import sys
print(sys.argv[0]) # C:\Data\script.py
スクリプト名やスクリプト名以後に指定した引数は、文字列のリストに変換されてsysモジュールのargv変数に格納される。i = 1
a, b = 0, 1 # a is 0, b is 1 複数同時代入が可能
tuple = 1, 'hi' # (1, 'hi')
un, pack = tuple # un is 1, pack is 'hi'
list = [1, 4, 9, 16, 25]
list[0] # 1
list[-1] # 25
list[-3:] # [9, 16, 25]
list[:] # [1, 4, 9, 16, 25] リストの新しい (浅い) コピーを返す
list + [36, 49] # [1, 4, 9, 16, 25, 36, 49] リストの連結(代入ではない)
list[3] = 64 # [1, 4, 9, 64, 25]
list.append(216) # [1, 4, 9, 64, 25, 216] 末尾に追加
list[2:5] = [5, 6, 7] # [1, 4, 5, 6, 7, 216] 代入も可能
list[2:5] = [] # [1, 4, 216] 削除も可能
list[:] = [] # [] 全て削除
a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n] # [['a', 'b', 'c'], [1, 2, 3]]
x[0] # ['a', 'b', 'c']
x[0][1] # 'b'
ゼロでない整数値は真となり、ゼロは偽となる
if x < 0:
x = 0
elif x == 0:
print('zero')
else:
print('more')
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
for i in range(5): # 0 1 2 3 4
print(i)
for w in words: # 参照を渡す
print(w, len(w))
for w in words[:]: # コピーを渡す。シーケンスを修正する場合はこっちを推奨
if len(w) > 6:
words.insert(0, w)
for n in range(2, 10):
for x in range(2, n):
if n & x == 0:
break # breakするとelse節は実行されない
else: # ループしきった場合、繰り返し条件が偽になった場合に実行される
print(n, ' is a prime number')
for num in range(2, 10):
if num % 2 == 0:
print("Found an even number", num)
continue
enumrate()関数はインデックスを取り出せる
for i, v in enumerate(['tic', 'tac', 'toe']):
print(i, v) # 0 tic
# 1 tac
# 2 toe
zip()関数を使って各要素をひと組みにする
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
print('What is your {0}? It is {1}.'.format(q, a)) # What is your name? It is lancelot.
# What is your quest? It is the holy grail.
# What is your favorite color? It is blue.
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
print(k, v) # gallahad the pure
# robin the brave
while b < 10:
b = b -1
class MyEmptyClass:
pass # 何もしない
def addtwo(n):
"""ドキュメンテーション文字列"""
return n + 2 # returnなしも作れる
addtwo(10) # 12
デフォルト値は1度だけしか評価されない。リストや辞書のような変更可能なオブジェクトの場合初期化されない
def usedefault(a, b=2, c=1):
return a * b + c
usedefault(5) # 11
usedefault(5, c=4) # 14
def printkeywords(**keywords): # キーワード引数が入った辞書
for k, v in keywords.items():
print(k, v)
printkeywords(cat='ねこ', dog='いぬ')
def printkeywords(*args): # 可変引数、タプルに格納される
for arg in args:
print(arg)
printkeywords('ねこ', 'いぬ')
args = [3, 6]
list(range(*args))
def f(ham: str, eggs: str = 'eggs') -> str: # 引数、戻り値の型を明記
print("Annotations:", f.__annotations__) # Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
return ham + ' and ' + eggs
ラムダは、単一の式で構成される無名関数
def make_incrementor(n):
return lambda x: x + n
f = make_incrementor(42)
f(1) # 43
1 + 2 - (3 * 4 / 5)
17 / 3 # 5.666666666666667
17 // 3 # 5 切り捨て
12 % 5 # 2 余り
5 ** 2 # 25 冪乗
'シングルでもダブルでもよい。\'円マーク\'でエスケープ'
"""複数文字列
改行されたくない場合は行末に\
シングルでもダブルでもよい"""
'str' + 'concat' # 文字列結合
'もふ' * 2 + 3 * 'にゃん' # 'もふもふにゃんにゃんにゃん' 反復が可能
文字列は不変
word = 'Python'
len(word) # 6
word[0] # P 左から指定位置の文字
word[-1] # n 右から指定位置の文字
word[2:5] # tho 開始位置(0ベース)から終了位置(含まず)まで
word[:2] # Py 一番左から指定位置まで
word[2:] # thon 指定位置から一番右まで
word[-2:] # on 右から指定位置を始めとして一番右まで
ary = [3, 6]
print(list(range(*ary))) # 配列自体ではなく、配列の要素をそれぞれ引数に渡したい場合、変数名の前に*を入れる
list(range(5)) # [0, 1, 2, 3, 4]
list(range(2, 5)) # [2, 3, 4]
list(range(0, 3, 2)) # [0, 2] 開始値、終了閾値(絶対値)、増加量
input('Please push any key')
関数 | 説明 | 使用例 |
---|---|---|
Path.cwd | カレントディレクトリを返す | >>>Path.cwd() WindowsPath('C:/Project/HTML/braintree/tech') |