前提
- python初学者、触ったことない人が投稿しています
- 個人的にあまり馴染みのない書き方について記載しています
変数宣言
-
const
みたいな宣言方法ではない 型定義をしなくても勝手に型推論してくれる- 変数が保持してるオブジェクトIDを取り出してtype関数に渡し、type関数はオブジェクトが持ってる型情報を返すだけです
なので、型推論してるというわけではなさそうです。(コメントにてご教授いただいただきました) - 型が気になったら
type(num)
みたいな感じで確認可能 - 上書きも簡単にできる(値、型にかかわず)
→ 上書き(再代入)は、型変換しているのではなく、違うオブジェクトIDが代入されて参照先が変わるだけのことです。(コメントにてご教授いただいただきました)
.py
num = 1 # int
name = 'Taro' # string
is_ok = true # bool
# 後から入れた変数に簡単に型変換、上書きが可能
num = name
print(num) # 'Taro'
# python3.6から型宣言してあげることも可能になった
num: int = 1
# 頭文字に数字を入れるとSyntax Errorになる
1num = 1
- 出力方法
なんかふーんと思ったので記載
.py
print('hoge') # hoge
# カンマとかで区切って出力できる "sep=''"
print('Hi','hoge',sep=',') # Hi,hoge
# 末尾に関しても指定して出力できる(デフォルトは "\n" になっている)
print('Hi','hoge',sep=',',end='.\n') # Hi,hoge.
数値
- 大半の数学関数は作成されているので
math
をインポートすることで使えるようになる
.py
# 商
17 / 3 # 5.666667
# 商を切り下げたものを取得できる
17 // 3 # 5
# べき乗
5 * 5 * 5 * 5 * 5 # 3125
# 上のべき乗と同じ動きになる
5 ** 5 # 3125
文字列
.py
# バックスラッシュを文字列として出力したい
print(r'\name\name') #\name\name
# ダブルクォートを3つ繋げると改行込みで出力してくれる
# バックスラッシュを使うと次の行からという命令になる
print("""\
改行
改行\
""")
>>>
改行
改行
# *が使える
print('Hi.' * 3) # Hi.Hi.Hi.
# 文字の代入(.format)
'a is {0} {1} {2}'.format(1,2,3) # a is 1 2 3
# 指定代入
'My name is {name} {family}. Watashi ha {family} {name}'.format(name='Taro', family='Tanaka');
# Python3.6からformatでなく、f-stringになったみたい。
# f-stringの方が処理が早いようです
a='a'
print(f'a is {a}') # a is a
x, y, z = 1, 2, 3
print(f'a is {x}, {y}, {z}') # a is 1, 2, 3
print(f'a is {z}, {y}, {x}') # a is 3, 2, 1
name = 'Taro'
family = 'Tanaka'
print(f'My name is {name} {family}. Watashi ha {family} {name}')
# My name is Taro Tanaka. Watashi ha Tanaka Taro
リスト
.py
array =[1,2,3,4]
# 全体を指定
array[:] # [1,2,3,4]
# 一つ飛ばしになる
array[::2] # [1,3]
# 順番が逆になる
array[::-1] # [4,3,2,1]
# 配列のデータを削除
del array # 何も表示されない
# リストのコピー
arr = [1,2,3]
arr2 = arr # [1,2,3]
# メモリが同じ場所を参照しているためarr2も更新される
arr[0] = 100
print(arr) # [100,2,3]
print(arr2) # [100,2,3]
# copyを使う
arr2 = arr.copy() # arr[:]でも同じことができる
arr[0] = 100
print(arr) # [100,2,3]
print(arr2) # [1,2,3]
タプル型
- (1,2,3,4,5)と囲って使う型
- 読み込み専用?みたいなイメージ、追加等はできない
- カンマを使うとタプルになるので、忘れてしまうとstrやintになる
- typeはtuple
.py
t=(1,2,3,4,5)
t[0] = 100 # errorになる
# tupleに配列を挿入することはできる
t = ([1,2],[3,4])
t[0][0] = 5 # このようなタプルの中の配列の書き換えは可能
# カンマを使うとタプルと認識される
t = 1,2
print(type(t)) # tuple
# タプルのアンパッキング
new_one = (10,20);
x,y = num_tuple
# 要するに展開している
print(x,y) # 10,20
辞書型
- オブジェクトみたいな感じ
- delとかpopはkeyを指定して、使うことが可能
- コピーする際は参照渡しになるので、
copy()
を使うと参照渡しにならない - typeはdict
.py
d = {'x':1, 'y':2}
>>> d['x'] # 1
# 上書き
d['x'] = 10
>>> d # {'x':10, 'y':2}
# 追加
d[1] = 'hoge'
>>> d #{'x':10, 'y':2, 1:'hoge'}
# 以下のような生成方法もある
dict([('a':1),('b':2)]) #{'a':1, 'b':2}
集合
- {}で囲って定義すると重複がなくなる
- typeはset
- 集合には並びはないので
a[0]
のような指定はできない
.py
a = {1,2,3,4,3,2,4}
>>> a # {1, 2, 3, 4}
# a,bを比較し、重複していな値を抽出
b={4,3,5,6}
# aを基準にbと重複していない値
>>> a-b #{1, 2}
# bを基準にaと重複していない値
>>> b-a #{5, 6}
# 重複した値を取得
>>> a & b # {3,4}
# どちらかにある値
>>> a || b # {1,2,3,4,5,6}
# どちらかにしかない値
>>> a ^ b # {1,2,5,6}
どんなmethodsがあるかわからなくて困った際
- help関数を使って中身等を確認できる(printとかしてあげれば出力可能)
.py
import math
help(math)
学習してみて
実際にコードを書いてみないとなんとも言えないが、以下学習を通して感じたこと
- これまで触った言語とはことなる書き方が多々あった
- 型を意識しない書き方、上書き等は書きやすい反面、バグを生むリスクが高くなると感じた
- 基本的に他の言語の基礎を学んでいれば、とっつきにくい等は感じなさそう
最後に
次はもう少し深ぼって実際のコードに触れてみようと思う