定数と変数
- 変数は型宣言不要
- Pythonでは$=$で変数に値を代入し、$==$で二つの値が等しいか比較し、等しければTrue、等しくなければFalseを返す。
- 変数は使用前に必ず代入が必要(C言語とは異なり)、変数は代入後に初めて作成される。
- 変数未定義エラー
>>> age
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
定数——変化しない変数 Pythonには変数がオブジェクトを変更しないことを保証する仕組みがなく、変更されてもエラーが出ず、C言語のconstのようなものがないため、使用時には十分注意が必要
代入方法
代入演算子$=$は==右結合性==
単一の代入
- age = 18
一括代入
- a = b = c = 1
- これはC/C++では考えられない:(
- a = b = c = 1
計算後に代入
- age = 17+1
個別代入
- a,b,c=1,2,3
- a == 1,b == 2,c == 3
a = “Jack"と書いた時、Pythonインタプリタは以下の2つのことを行う: メモリに’Jack’という文字列オブジェクト(定数)を作成; メモリにaという名前の変数を作成し、‘Jack’を指すようにする。 変数aを別の変数bに代入する操作は、実際には==変数bを変数aが指すデータに向ける==ことであり、例えば以下のコード:
- a,b,c=1,2,3
>>> a = "Jack"
>>> a
'Jack'
>>> b = a
>>> b
'Jack'
>>> id(a)
4332916664
>>> id(b)
4332916664
id()関数は変数のメモリアドレスを確認するために使用 [[基礎関数#id()]]
- もし別の変数をaに代入すると、id(a)は変わり、id(b)は変わらない
>>>a = "Ross"
>>>a
'Ross'
>>>id(a)
別の数値(4332916664とは異なる)
変数とオブジェクト
Pythonではすべてがオブジェクトであり、数字もオブジェクト、リストもオブジェクト、関数もオブジェクト、何もかもがオブジェクト。変数はオブジェクトへの参照(またはラベルや名前とも呼ばれる)であり、オブジェクトの操作はすべて参照を通じて行われる。
例えば
>>>a = 1
- この場合、数字1がオブジェクト、aが変数(変数名)
- 代入操作$=$は名前をオブジェクトにバインドする(オブジェクト1にラベルaを付ける)。
- 明らかに、オブジェクトは複数のラベル(変数)をバインドできる。しかし、一つの変数は一つのオブジェクトしかバインドできない。
- 変数自体には型がなく、型はオブジェクト内に保存され、オブジェクトの型によって決定される
- そのためPythonでは変数の型を事前に宣言する必要がなく、オブジェクトのデータ型を自動的に判断する。これはC/C++と大きく異なる点
文字列
- Pythonでは単一文字と文字列を区別しない
- シングルクォート$''$またはダブルクォート$""$で文字列を作成できる(混在不可!)
- トリプルシングルクォートまたはトリプルダブルクォートで複数行の文字列を作成可能
>>>name_1='Jack'
>>>name_2="Rose"
>>>sentence_1='''Rose,
Jack,
You jump,
I jump!'''
>>>sentence_2="""Life is short,
you need Python."""
#完璧に動作!
- クォートを使用したい場合はエスケープ文字”\“を追加 [[基礎関数#文字列関数]]
文字列フォーマット
%メソッド
$$print('My\ wife\ is\ \%c,she\ is\ \%d.\ '\%(name,age))$$- $\%$の後はtuple|dictで、フォーマットする値を渡す
- プレースホルダの種類: ![[Pasted image 20230628233506.png]]
>>>name='ブローニャ'
>>>age=18
>>>print('My wife`s name is %s,she is %d years old.'%(name,age))#順番に%は文字列後の%()内の内容に対応
My wife`s name is ブローニャ,she is 18 years old.
- 応用
- $$\%[データ名][整列フラグ][幅].[精度][型]$$
- データ名はdict代入用、配列の場合は記入不要
- 整列フラグ
- +:正負符号表示
- -:左揃え
- space:正数の前にspaceを追加して負数と揃える
- 0:正数の前に0を追加して負数と揃える
- 幅:フォーマット後の文字列長、不足分は0またはスペースで埋める
- 精度:小数点以下の桁数
- データ型:プレースホルダの種類
format
- 文字列中で$\{ \}$を使用してプレースホルダを設定し、文字列の後に$.format()$関数を続ける。この関数の引数が文字列に埋め込む変数。
>>>name='キアナ'
>>>age=18
>>>print('My wife is {},she is {}.'.format(name,age))#順番に埋め込む
>>>print('My wife is {1},she is {0}.'.format(age,name))
'''
{}内でインデックス使用可能
{}内の数字は.format()のタプル/辞書のインデックス
'''
>>>print('My wife is {name},she is {age}.'.format(name=name,age=age))#変数名で直接置換も可能(オブジェクト属性マッピング)
>>>print('My wife is {name},she is {age}.'.format(name='キアナ',age=18))#キーワードマッピング
>>>list1=['キアナ',18]
>>>print("My wife is {0[0]},she is {0[1]}.".format(list1))#辞書インデックスでマッピング
- 応用
- $$\{:[埋め文字][整列方法][符号フラグ][\#][幅][,][.精度][型]\}$$
- 埋め文字:未記入時はスペースで埋める
- 整列方法
- ^:中央揃え
- $`<$:左揃え
- $`>$:右揃え
- 符号フラグ
- +:正負符号表示
- space:正数の前にspaceを追加して負数と揃える
- $\#$:2進数、8進数、16進数の前に0b、0o、0xを表示するか
- 幅:出力文字列の総幅
- $,$:千単位区切りを使用
- 精度:小数点以下の桁数
- 型:プレースホルダの型
f-string
Formatted String Literals(リテラル文字列フォーマット)、略してf-string、Python3.6以降でサポート 文字列の前に$f$を付け、$f-string$を有効にすると、$\{\}$内で直接変数を使用可能
>>>print(f'My wife is {name},she is {age}.')
- f-stringもformatのフォーマット制御パラメータをサポート $$\{変数名:[埋め文字][整列方法][符号フラグ][\#][幅][,][.精度][型]\}$$
⭐スライス
- スライス可能なオブジェクト:文字列、タプル、リスト $$name[a:b:c]$$
- 選択範囲は$[a,b)$でaを含みbを含まない。aを省略すると0から開始、bを省略すると末尾まで。
- cはステップで、スライスの間隔。省略時はデフォルトで1。 ==cが負の時は後ろからスライス==
>>>name="polaris"
>>>print(name[1:3])
'ol'
>>>print(name(::-3))
'sap'
'''
'ris'からs、'ola'からa、'p'からpを取得
'''
>>>print(name[::-1])
'siralop'
#文字列反転
- スライス操作は元のオブジェクトを変更せず、スライス代入でコピーを作成可能
>>>x=[2,3,6,2,5]
>>>y=x[:]
>>>y.sort()
>>>print x
[2,3,6,2,5]
>>>print y
[2,2,3,5,6]
整数、浮動小数点数、複素数
整数(Int)
- 0x16進数
- 0o8進数
浮動小数点数(Float)
- 小数形式
- 科学記数法、10をeで代替
- 例:1.23e-6
複素数(Complex)
- 実部+虚部、a+bj
- complex(a,b)
- a&bはともに浮動小数点数
[[基礎関数#type()]]
剰余(除算の整数部分)
$$a//b$$余り
$$a\%b$$絶対値
>>>a=10
>>>b=3
>>>a//b
3
>>>a%b
1
ブール値とNone値
- True:真(非0数値、デフォルト1)
- False:偽(=0数値、デフォルト0)
- None:空値、0(整数)ではなく、ブール型ではなくNoneType
- 注意事項
- 先頭大文字
- すべての計算結果、判断式の呼び出し戻り値がTrueまたはFalseになるプロセスはブール演算と呼べる。例えば比較演算。
- 以下は偽値に変換
- 0、0.0、-0.0
- None
- 空文字列、空リスト、空タプル、空辞書
- 以下は真値に変換
- -1、1または他の非0数値
- すべての非空文字列、
"False"を含む - すべての非空辞書、非空リスト、非空集合、非空タプル
- ブール値は四則演算可能、True == 1、False == 0
ブール演算
- 論理積 $and$
- すべてがTrueの場合のみ、and演算の結果はTrue
- 論理和 $or$
- 一つでもTrueがあれば、or演算の結果はTrue
- 否定 $not$
- 単項演算子、TrueをFalseに、FalseをTrueに [[基礎関数#数値処理関数]]
演算子
Python言語は以下のタイプの演算子をサポート:
- 算術演算子
- 比較(関係)演算子
- 代入演算子
- 論理演算子
- ビット演算子
- メンバー演算子
- 同一性演算子
- 演算子の優先順位
算術演算子
- $**$:べき乗、$x**y$はxのy乗を返す ==右から左に結合==(右結合性)
>>>2**2**3
256
>>>(2**2)**3
64
>>>2**(2**3)
256
- $//$:剰余、商の整数部分を返す
- 整数と浮動小数点数の混合演算時、整数は浮動小数点数に変換される
比較演算子
- $==$:二つのオブジェクトが等しいか比較 ==Pythonの比較演算子は連鎖可能== $$a>b==cはa>b\ and\ b==cと等価$$
代入演算子
- $**=$:べき乗代入演算子、 $$c**=aはc=c**aと等価$$
- $//=$:剰余代入演算子、 $$c//=aはc=c//aと等価$$
- «=:左シフト代入 $$a<<=2はa=a<<2と等価$$
=:右シフト代入
- &=:ビットAND代入 $$a\&=bはa=a\&bと等価$$
- |=:ビットOR代入
- ^=:ビットXOR代入
ビット演算子
- $\&$:ビットAND==右結合性==
- $|$:ビットOR
- ^:ビットXOR
- ~:ビットNOT==右結合性==
- $<<$:左シフト
- $>>$:右シフト
論理演算子
- $and$:論理積
- x and y、xがFalseならFalseを返し、それ以外はyの計算値を返す
- $or$:論理和
- x or y、xが非0ならxの値を返し、それ以外はyの計算値を返す
- $not$:論理否定
- not x、xがTrueならFalse、xがFalseならTrueを返す
- ==右結合性==
>>>True and True
True
>>>True and False
False
>>>False and True
False
>>>True and 0+3
3
>>>True or False
True
>>>0 or True
True
>>>0 or 0
0
>>>False or 31
31
>>>not 3
False
メンバー演算子
- $in$:x in Y(xはオブジェクトまたは変数名、Yは文字列、辞書またはタプル)、指定シーケンスでxが見つかればTrue、それ以外はFalse
- $not\ in$:x not in Y、見つからなければTrue
同一性演算子
- $is$:二つの識別子が同じオブジェクトを参照しているか判断、つまり本質的に同一か
- x is y、if id(x)== id(y),return True
- $is\ not$:if id(x) != id(y),return True
⭐演算子の優先順位
- ():小括弧
- $[\ ]$:インデックス演算子
- x.attribute:属性アクセス
- $**$:べき乗演算
- ~:ビットNOT
- +@、-@:==単項==プラスマイナス(正負符号)
- +@、-@は==右結合性==単項演算子
- $*$、/、%、$//$:乗除、剰余、剰余除算
- +、-:二項加減
- «、»:ビットシフト左右
- &:ビットAND
- ^:ビットXOR
- |:ビットOR
- $<,<=,>,>=,==,!=$:比較演算子
- =,+=,-=……:代入演算子
- is,is not:同一性演算子
- in,not in:メンバー演算子
- not:否定
- and:論理積
- or:論理和
- $,$:カンマ演算子

いつまた一杯の酒を飲み、細かい論文を議論するのか。