関数の引数渡し
Pythonでは、関数に引数を渡すことは本質的に代入操作です
def func(arr)
arr = 1
print(arr)
a=2
func(a)
print(a)
- 最初に2つの変数arrとaがあり、2つのオブジェクト1と2があります
- aは2にバインドされ、func(a)はaがバインドしているオブジェクト2にarrというラベルを貼ります
- この時点で、オブジェクト1はまだ作成されておらず、2にはaとarrのラベルが貼られています
- $arr=1$操作により、2からarrラベルが剥がされ、オブジェクト1が作成されてarrラベルが貼られます
- 出力結果
1
2
入力と出力
print()関数
>>>print("文字列")
文字列
>>>print("str1","str2","str3")
str1 str2 str3#カンマがスペースに置き換わる
print(a+b**c)#数値を計算してから出力
print(sum(a,b/c))#sum()関数が優先的に実行
==プロトタイプ==
$$print(self,*args,sep=' ',end='\n',file=None)$$- sepパラメータ:区切り文字、複数の出力結果(戻り値)間の区切り文字、デフォルトはスペースで手動設定可能
- endパラメータ:印刷後の終了方法、デフォルトは$\n$改行、’ ‘に設定すると改行なし
input()関数
ユーザー入力を取得し、==文字列==として保存 数字が入力された場合、int()でオブジェクトを数字に変換可能
>>>age=input("年齢を入力してください:")
年齢を入力してください:18
>>>print(age)
'18'#type(age)==<class'str'>
>>>age=int(age)
>>>print(age)
18
- $input()$には文字列を渡せば、入力プロンプトとして表示される
- $int()$を使用する際、余分なスペースがあれば$strip()$メソッドで除去可能、文字列オブジェクト保存時も同様
- $input()$は改行を消費し、プログラム実行を一時停止するために使用可能 [[データ型と演算子#文字列フォーマット]]
ユーティリティ関数
id()
例 [[データ型と演算子#代入方法]] id(変数名)で変数がバインドするオブジェクトのメモリアドレスを取得 変数がバインドするオブジェクトが変更されると、クエリ結果も変更され、元のオブジェクトのメモリアドレスは変わらない
type()
- 1つの引数でオブジェクトの型を返す
- 3つの引数で新しいオブジェクト型を返す
- type(name,bases,dict)
- name – クラスの名称
- bases – 基底クラスのタプル
- dict – 辞書、クラス内で定義された名前空間変数
# パラメータの一例
```python
>>> type(1)
<type 'int'>
>>> type('runoob')
<type 'str'>
>>> type([2])
<type 'list'>
>>> type({0:'zero'})
<type 'dict'>
>>> x = 1
>>> type( x ) == int # 型が等しいかどうかを判断する
True
# 3つの引数
>>> class X(object):
... a = 1
...
>>> X = type('X', (object,), dict(a=1)) # 新しい型 X を生成する
>>> X
<class '__main__.X'>
next()
[[基礎データ構造#イテレータオブジェクト]]
文字列関数
文字列オブジェクトの組み込み関数
- 先頭と末尾の空白または文字を削除する$lstrip()$,$rstrip()$,$strip()$
str=" 人生苦短,我用Python。 "
print(str.lstrip())#左側の空白を削除して出力
print(str.rstrip())#右側の空白を削除して出力
print(str.strip())#左右の空白を削除して出力
str_1='333与君相别离,不知何日是归期,我如朝露转瞬晞。333'
print(str_1.strip('3'))#左右のすべての文字'3'を削除して出力
==注意:この関数は本質的に文字列の一部を切り取るものであり、元のオブジェクトを変更するものではない== $lstrip()$は、文字列の左側の空白または指定された文字を削除した新しい文字列を返します。
str=" 人生苦短,我用Python。 "
str.lstrip()#関数を呼び出すだけで代入も出力も行わない
print(str)
'''
この場合の出力結果は依然として
人生苦短,我用Python。
左右ともに空白を含む
オブジェクトが変更されていないことを示す
'''
- 文字列が特定の文字列で始まる/終わるかどうかを判定する$startswith()$,$endswith()$ 該当すればTrue、しなければFalseを返す
str="山有木兮木有枝,心悦君兮君不知。"
print(str.starswith("山"))#Trueを返して出力
print(str.endswith('不知'))#'。'がないためFalseを返して出力
文字列をフォーマットする
$$f"文字列内容{他の文字列変数名}文字列内容"$$フォーマットされた文字列を返す 未記入
文字列を分割する$split()$ 特定の文字で文字列をいくつかの部分文字列に分割し、部分文字列には区切り文字を含まず、文字列リストを返す
str='根,紧握在地下,叶,相触在云里,每一阵风过,我们都互相致意。'
strP=str.split(',')#中英文の句読点に注意
print(str)#元の文字列オブジェクトを出力
print(strP)#分割して得られた文字列リストを出力
print(strP[1])#"紧握在地下"を出力
数値処理関数
- 絶対値 $$abs()$$
- 切り捨て $$int()$$
- 四捨五入(整数を返す) $$round()$$
- 大小・真偽の判定(ブール関数) $$bool()$$ [[データ型と演算子#ブール値と空値]]
データ型変換関数
- $$int(x [,base])$$ xは元のオブジェクト、baseはオプションのパラメータで、デフォルトは10(10進数を表す)
- $$float(x)$$
- $$complex(real[,imag])$$ realは実部、imagはオプションの虚部パラメータ
- $$str(x)$$
- $$repr(x)$$ オブジェクトxを式の文字列に変換(Pythonインタプリタが読み取れる形式)
- $$chr(x)$$ 整数を1文字に変換
- $$ord(x)$$ 1文字をその整数値に変換
- $$hex(x)$$ 整数xを16進形式の文字列に変換
- $$oct(x)$$ 整数xを8進形式==文字列==に変換
- $$eval(str)$$ 文字列内の有効なPython式を評価し、オブジェクトを返す
- $$tuple(s)$$ シーケンスsをタプルに変換して返す
- $$list(s)$$
- $$set(s)$$ シーケンスsを可変集合に変換
- $$frozenset(s)$$ シーケンスsを不変集合に変換
- $$dict(d)$$ (key,value)形式のタプルシーケンスdをdictに変換
データ型の高低
「高いデータ型」と「低いデータ型」は==暗黙的な型変換==においてデータの精度を説明するための概念。
==精度==はデータ型が表現できる情報量や詳細度と理解できる。Pythonでは、データ型の「高」「低」は主にその精度によって判断される。
ここでの「高い」データ型とは、より多くの情報(またはより正確な情報)を表現できるデータ型を指し、「低い」データ型は表現できる情報が少ない。 具体的には、浮動小数点数は整数よりも「高い」、なぜなら浮動小数点数は整数だけでなく小数も表現できるから。したがって、例では整数は自動的に浮動小数点数に変換され、情報が失われないよう保証される。
また、複素数(complex)は浮動小数点数(float)や整数(int)よりも「高い」、なぜなら複素数は実数と虚数を表現できるが、浮動小数点数と整数は実数のみを表現できるから。演算時にオペランドに複素数が含まれる場合、他の浮動小数点数や整数は複素数に変換される。
一般的に、Pythonのデータ型の「高低」は以下の順序で理解できる: ブール(bool)< 整数型(int) < 浮動小数点型(float)< 複素数型(complex)。 この順序は主にデータ型が表現できる情報範囲と精度によって決定される。
異なるデータ型間で自由に変換できるか
Pythonはいくつかの組み込み関数を提供して異なるデータ型間の変換を実現しているが、例えば$int(), float(), str(), list(), tuple(), set()$など、すべての型のデータが他の任意の型に変換できるわけではない。変換が可能かどうかは、主にデータ自体が目標の型を表現するのに十分な情報を含んでいるかによる。
例: 整数を文字列に簡単に変換できる、なぜならすべての整数には明確な文字列表現があるから(例えば、整数123は文字列"123"として表現できる)。
同様に、数字のみを含む文字列(例:“123”)は整数や浮動小数点数に変換できる、なぜならこの文字列には数字を表現するのに十分な情報が含まれているから。
しかし: 数字以外の文字列(例:“Hello”)は整数や浮動小数点数に変換できない、なぜならこの文字列には数字を表現する情報が含まれていないから。
リストやタプルは、(その要素が不変であれば)集合に変換できるが、整数には変換できない、なぜなら集合やリストの要素を単一の数字として合理的に表現できないから。
総じて、データ型の変換は==無制限ではない==、それは元のデータが目標の型を表現するのに十分な情報を提供できるかによる。プログラミングで型変換を行う際、この点に注意が必要。
判断とループ文
$if,elif,else$文
if condition1:
条件1が成立する場合の操作
elif condition2:
条件1が不成立で条件2が成立する場合の操作
else:
条件1,2ともに不成立の場合の操作
例:
name=input('Who are you?')
age=input('How ord are you?')
if name=='朱冰倩'and age>=19:
print('Daring,long time no see.')
elif name=='朱冰倩' and age==18:
print('Thank you for being in my life.')
else:print('こんにちわ。')
- 偽値: None、空リスト、空集合、空辞書、空タプル、空文字列、0、Falseなど
- 真値: 非空リスト、非空集合、非空辞書、非空タプル、非空文字列、非0数値、Trueなど
$for,break,continue$文
通常のループ
for x in シーケンス(list, dict, string, tupleなど):
実行コードブロック
- forはシーケンス中の要素を順番にxに代入する
インデックス付きループ
- ループ中にインデックスも取得したい場合、$enumerate()$関数を使用できる
- $enumerate()$関数は、リストやタプル、文字列などの反復可能オブジェクトをインデックス付きで返す
- Python 2.3以上で使用可能、2.6でstartパラメータ追加
- $$enumerate(sequence,[start=0])$$
- sequence: 反復可能オブジェクト
- start(オプション): インデックスの開始値、デフォルトは0
galgames=['咖啡馆','千恋万花','天使骚骚']
for index,galgame in enumerate(galgames,1):
print(f'今日は{index}番目の作品{galgame}をプレイ。')
出力: 今日は1番目の作品咖啡馆をプレイ。 今日は2番目の作品千恋万花をプレイ。 今日は3番目の作品天使骚骚をプレイ。
break
現在のループを中断、異なる階層のbreakは異なるループを中断する
continue
continueは後続のコード実行を停止し、次のループに移行する
for-else
- forループ後にforと同じ階層のelseを記述、forループが正常終了した場合、自動的にelseに入る
- breakで中断された場合(continueは正常と見なす)、else分岐に入らない
while文
while 条件式:
実行文
条件式が成立(True)している間、実行文をループ実行;不成立の場合、ループを抜ける ==無限ループを避けるため、実行文がループ条件を破るかbreakをトリガーできるか確認==
while-else
for-elseと同様、breakで中断されずにwhileループが終了した場合、後続のelse分岐を実行;異常終了した場合elseは実行されない

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