Pythonメモ:変数 演算子 データ型 type関数
Pythonの基本メモ2
詳細はPythonリファレンス組み込み型算術演算子
演算子 | 役割 | 式の例 | 計算結果 | 優先順位 |
+ | 加算 | print(5+2) | 7 | 低 |
- | 減算 | print(10-3) | 7 | 低 |
* | 乗算 | print(5*6) | 30 | 中 |
/ | 除算(小数) | print(100/8) | 12.5 | 中 |
// | 除算(整数) | print(100//8) | 12 | 中 |
% | 剰余 | print(7%4) | 3 | 中 |
** | 累乗 | print(2**3) | 8 | 高 |
優先度が高い物から計算される。先に優先度が低いものを計算したいときは()で囲む。同じ優先度なら左から計算される。
14番の計算は2の2乗がまず計算されて2×3÷2=が計算されて3%4が計算されて12+2が計算されて14-(3÷4の余り)3が計算されて11となる。
小数になる演算は不動小数点数に注意する(コンピュータは小数を正確に表現できない)
小数点以下を切り離したり小数点を付けたいときはint関数やfloat関数で型変換を行う。
文字列の算術演算子
演算子 | 役割 | 例 | 結果 |
+ | 文字列の連結 | print('hello' + 'world') | helloworld |
* | 文字列の反復 | print('hello' * 3) | hellohellohello |
アスタリスク(*)
*は乗算、文字列の反復の他にリストの拡張やアンパックなど様々な用途がある。
代入演算子
代入演算子 | 役割 | 例 | 左と同じ意味 |
= | 左辺の変数に右辺の値を代入 | lite=100 | |
+= | 左辺の変数の値と右辺の値を加算して代入 | lite+=20 | lite=lite+20 |
-= | 左辺の変数の値から右辺の値を減算して代入 | lite-=30 | lite=lite-30 |
*= | 左辺の変数の値に右辺の値を乗算して代入 | lite*=2 | lite=lite*2 |
/= | 左辺の変数の値を右辺の値で除算して代入(少数) | lite/=6 | lite=lite/6 |
//= | 左辺の変数の値を右辺の値で除算して代入(整数) | lite//=3 | lite=lite//3 |
%= | 左辺の変数の値を右辺の値で除算した剰余を代入 | lite%=4 | lite=lite%4 |
**= | 左辺の変数の値を右辺の値で累乗して代入 | lite**=3 | lite=lite**3 |
型の自由性:Pythonでは再代入する際に型を変更することができる。
真偽値
bool型 | 真偽 |
True | 真 |
False | 偽 |
int型のサブクラスのbool型なので演算も出来る。
False 0 0.0 None 空文字("" '') 空な物(値なし[]{}set()、値が0な物range(0))
True 1 空じゃないもの
比較演算子
比較演算子 | 意味 |
== | 左辺と右辺が等しい |
!= | 左辺と右辺が等しくない |
> | 左辺が右辺より大きい |
< | 左辺が右辺より小さい |
>= | 左辺が右辺と同じか大きい |
<= | 左辺が右辺と同じか小さい |
is | 同一のオブジェクト |
is not | 同一のオブジェクトではない |
==は値が等しいかどうか比べる演算子で左辺と右辺の値が同じならTrueを返す。
isはオブジェクトが同一のものであるかを判定する演算子。判定はオブジェクトの識別値で判定される。リストとかは変数が違うと違うIDになるから中身が一緒でも違う物と判定される。リストのコピーは同じIDになり同一判定される。同じIDのリストは中身を書き換えたら
同じIDのリスト全部が書き換わる。
id関数
id(object)組み込み関数
オブジェクトの "識別値" を返します。この値は整数で、このオブジェクトの有効期間中は一意かつ定数であることが保証されています。有効期間が重ならない 2 つのオブジェクトは同じ id() 値を持つかもしれません。
メモリの消費を抑えるためと処理の高速化の為にPythonがIDの使いまわしを行っているらしい。
intern関数
import sys
sys.intern(string)
文字列を同一オブジェクトにする関数。(文字列の値が一致しているが別の識別値が与えられている場合に識別値を同一化する)文字列を==ではなくisで比較評価するようになり処理が少し早くなる。(==では一文字ずつ一致しているか確認してから判定するのに対してisだとidが一致するかで判定するので文字列が長いほど処理も早まる)
string を "隔離" された文字列のテーブルに入力し、隔離された文字列を返します -- この文字列は string 自体かコピーです。隔離された文字列は辞書検索のパフォーマンスを少しだけ向上させるのに有効です -- 辞書中のキーが隔離されており、検索するキーが隔離されている場合、(ハッシュ化後の) キーの比較は文字列の比較ではなくポインタの比較で行うことができるからです。通常、Python プログラム内で利用されている名前は自動的に隔離され、モジュール、クラス、またはインスタンス属性を保持するための辞書は隔離されたキーを持っています。
隔離された文字列はイモータルではありません。その恩恵を受けるためには intern() の返り値への参照を維持しなくてはなりません。
アルファベットと数字と_で構成される文字列は自動でintern化される。
論理演算子
論理演算子 | 意味 | 真となる条件 | 優先度 |
and | 論理積 かつ | A <100 and B==120AとB両方が真 | 中 |
or | 論理和 または | A==100 or B>100 AかBのどちらかが真 | 低 |
not | 否定 ~でないなら | not A==B 条件式が成立しない場合真 | 高 |
変数varの値が100以上200以下(100~200の範囲内) var>=100 and var<=200
変数varの値が100未満または200より大きい場合(100~200の範囲外)
var<100 or var>200
変数varの値が100~200の範囲内でない場合(上のorと同じ意味)
not(var>=100 and var<=200)
リストに特定の値が含まれていない場合 not "apple" in fruit
Pythonでは数値の範囲指定は100<= var <=200のようにも記述できる。
条件式で左右にあるオペランドが評価されるとTrueかFalseに置き換わる。論理値に対する演算をするので論理演算子と呼ばれている
in演算子
所属検査演算
in not inは所属関係を調べる。
in演算子は全ての組み込みシーケンス型と集合型、辞書のキーの中に指定の値が含まれているか調べて含まれていればTrue、含まれていなければFalseを返す。
not inはin演算子の否定で含まれていればFalseを含まれてなければTrueを返す。
データ型と型の変換
データ型 | 型の値 | 例 | 型を変換する関数 | 関数の説明 |
int | 整数 | 100 -100 | int() | ()内の引数の値をint型に変換(小数点以下は切り捨てられる)数値に変換できない文字列はエラーになる |
str | 文字列 | "Hello" 'World' | str() | ()内の引数の値をstr型に変換 |
float | 小数 | 1.5 -30.0 | float() | ()内の引数の値をfloat型に変換(30なら30.0になる)数値に変換できない文字列はエラーになる |
bool | 真偽値 | True False | bool() | ()内の引数の値をbool型に変換 |
bool型をint型に変換するとTrueは1にFalseは0になる。
0はbool型にするとFalseに、0以外だとTrueになる。
変数
変数は値を保持管理して利用するためにメモリにある区画に名前を付けて格納したもの。(メモリに値が書き込まれる)
変数名=オブジェクト
代入 値を変数に格納すること
参照 変数名から格納されている値を取得
再代入(上書・書き換え)
使用済みの変数名に違う値を代入すること。
Pythonではfinal宣言がないけど・・・書き換えられたくない変数名は大文字にするぽい。変数の使いまわしはしないのが無難らしい。countするときにcount+=1みたいな代入はよく行われる。参照元(変数に値を代入した場所)の値が変われば参照先(変数を参照している箇所)の値も変わるので与えられた値によって変化する柔軟なプログラムができるし値を修正したいときも代入した箇所だけ修正するだけで済む。
変数名のルール
- 予約語(for ifなど)は使えない。(エディタに打ち込むとき色が変わる単語は大抵使えない)
- 先頭が数字はNG
- 先頭が __アンダースコア2つはNG(コンストラクタに使われるため予約されている)
- 小文字で始まるのが望ましい。
- 名詞にするのがわかりやすい
- 大文字と小文字は区別される
- 使用済みの変数名と同じ名称の変数名はNG(値が書き換えられるだけ)
- 複数の単語をつなげる時はスネークケースが推奨されている。例:members_no
アンパック
纏めて代入する。a,b,c=10,20,30 変数と値をカンマで繋げる。aには10がbには20がcには30がそれぞれ代入される。1行で複数の変数に一遍に代入できる。複数の値をそれぞれの変数に分解して代入する。
a,b,c=map(int,input().split()) 標準入力からの半角スペース区切りの数値の値を分割して変数にそれぞれ代入する。
list_test=[10, 20, 30,40] a,b,c,d=list_test リストの要素がそれぞれの変数に代入される
アンパックは左辺と右辺の数が同じでないとエラーになる。必要のない値を代入したくない場合は_を使用したりする。使わない変数名 _ アンダ-バー
文法上必要だが「使わない」という意味で_ アンダーバーを変数名の代わりに使用する。
アンパックやリスト内表記とかでよく使う。
li = [int(input()) for _ in range(n)] for文で 変数に数値を代入させる必要がないときなどに使う。
スワッピング
スワッピングとは値の入れ替えのこと。変数同士の値の入れ替え、リストの要素の並べ替えなど。Pythonでは簡単に一行で入れ替えが出来て便利。
変数のインポート
モジュールを取り込んでモジュール内の変数を利用することが出来る。モジュールは変数や関数など、とある機能をひとまとめにしたPythonファイル。パッケージはモジュールを一まとめにしたフォルダ。
Jupiter labで自作する場合は新規→PythonFileかTextFileを選んでそのファイル内に記述する。→ファイル名を変更する。(ファイル名.py(拡張子を.pyにする))Jupiter labで新規作成をする場合は同じディレクトリ内にファイルが作成されるが他で作成したファイルはここのディレクトリに入れるかpathを通すかしないと利用できない。パッケージにまとめたいときはパッケージフォルダをここの階層(ディレクトリ)にいれる。パッケージフォルダの1つ下のディレクトリにファイルがくるのでインポートする際はパッケージ名.モジュール名でインポートする。
import モジュール名 で1つのファイルごと取り込み
参照する場合は モジュール名.変数名で使用する。
from モジュール名 import 変数名 とすると特定の変数のみ取り込める。参照する場合は変数名だけで利用できる。
import の後ろをカンマ区切りで複数取り込むことが出来る。
import モジュール名,モジュール名
from モジュール名 import 変数名,変数名
パッケージ(フォルダ)に入っている場合はfrom パッケージ名 import モジュール名で取り込む。特定の変数名だけ取り込みたいときはfrom パッケージ名.モジュール名 import 変数名で取り込む。import パッケージ名.モジュール名で取り込んだ場合はパッケージ名.モジュール名.変数名で利用する。
長い値とか共通で利用したい値とか・・・複数人でプログラムする際に同名の変数名を定義して衝突による上書きとかしないようにだとかたぶんそんな感じで使うんだと思う。
何回も使う値とかなっがい値とか予め登録しておけばいちいち変数宣言しなくても使えるようになるのは便利かも。しかしうっかり同名で上書きしてしまう可能性も(;´Д`)
上書しちゃったらdel 消したい変数名 をすると上書きした分が消せます。ファイル自体が書き換わるわけではないのでうっかり上書きしちゃったらdelで消しましょう。これは関数も同じです。でもまたインポートしなおさないと呼び出せないみたいです(;´∀`)
type関数
type(調べたい変数名)
type(object)
引数のオブジェクトのクラス型を返す。組み込み関数 Pythonでは変数のデータ型の指定をしないので変数にはデータ型がないが値には型があるので変数に格納されている値がなんのデータ型かわからないときに調べるための関数がtype関数。データ型だけでなくオブジェクトがなんのクラス型なのか調べる関数。
コメント
0 件のコメント :
コメントを投稿