Python学習ノート(八):常用文法
24011 ワード
1.コード宣言
'''
# -*- coding: -*-
# vim:fileencoding=
'''
# :
# -*- coding: utf-8 -*-
2.ゴミ収集
一般に、Pythonは、使用者が変数やデータ構造で参照しないため、使用されなくなったオブジェクトを削除します.たとえば、名前バインドの値をNoneに設定すると、元のバインドの値はメモリに「ドリフト」され、名前バインドされていません.それを取得して使用することはできないので、Python解釈器はこの値を直接削除し、ゴミ収集と呼ばれます.もう1つの方法はdel文を使用することです.delを使用して削除されるのは、値ではなく名前だけです.実際、Pythonでは値を削除することはできません(削除値の問題もあまり考慮する必要はありません.ある値が使用されなくなったとき、Python解釈器がメモリの回収を担当するためです).
二、内装タイプ
1.真値テスト
以下の値は、False①None②False③の任意の数値タイプのゼロとみなされます.たとえば、0、0 L、0.0、0 jです.④任意の空のシーケンス、例えば、''、()、[].⑤空のマッピング、例えば{}.⑥ユーザー定義のクラスの例、クラスが1つの__を定義した場合nonzero__()または_len__()のメソッドで、整数ゼロまたはブール値Falseを返す場合
'''
bool(val)
val False False , True
'''
import math
bool(None) # False
bool(0j) # False
bool() # False
bool({}) # False
bool(math.nan) # True
2.ブール演算
操作
意味
結果
x or y
xが偽であればyを返し,そうでなければxを返す
0 or 2出力結果:2
x and y
xが偽であればxを返し,そうでなければyを返す.
0 and 2出力結果:0
not x
xが偽の場合はTrueを返し、そうでない場合はFalseを返します.
not 1出力結果:False
3.比較
操作
意味
結果
<
より厳密に小さい
1<2出力結果:True
<=
以下
1<=2出力結果:True
>
より厳密に大きい
1>2出力結果:False
>=
以上
1>=2出力結果:False
==
に等しい
1==2出力結果:False
!=
等しくない
1 != 2出力結果:True
is
オブジェクトIDが同じかどうか
a=b=1,a is b出力結果:True
is not
オブジェクトIDが異なるかどうか
a=b=1,a is notb出力結果:False
4.整数タイプのビット操作
原号:第一位は符合(1はマイナス0がプラス)を表し、残りの位は値の逆符号:正数の逆符号は原号で、負数の逆符号はその原号の基礎の上で、記号の位は不変で、残りの各位は逆符号を取ります:正数の補符号は原号で、負数の補符号は逆符号の基礎の上で+1です
[+1] = [00000001] = [00000001] = [00000001]
[-1] = [10000001] = [11111110] = [11111111]
操作
意味
結果
x | y
xとyの(補符号)ビットまたは(1が1であり、残りが0である)
0 | 1 = 1,0 | -1 = -1
x ^ y
xとyの(符号化)ビット別または(2つの数が同じ結果は0であり、異なる結果は1である)
0^1 = 1
x & y
xとyの(符号を補う)ビットと(0が0であり、残りは1である)
0 & 1 = 0,0 & -1 = 0
x << n
x(補符号)左シフトnビット、右欠落補0
1<<2=[100]補=4,−1<<2=[1111100]補=−4
x >> n
x(符号化)右にnビットシフトし、左に欠けている箇所に符号ビット(すなわち正数補正0、負数補正1)を補正する
1>>2=0,-1>>2=[1111111]補=-1
~x
x(補符号)ビット別逆取り
~1=[1111110]補=-2
三、簡単な文
1.条件文
if 1:
1……
elif 2:
2……
elif 3:
3……
else:
4……
2.forサイクル
for var in sequence:
……
for var in sequence:
1……
else:
2……
forループはelse文を使用することができ、pythonではfor...elseはこのような意味を表し、forの中の文は普通の文と変わらず、elseの中の文はループが正常に実行された(すなわちforはbreakジャンプで中断されたものではない)場合に実行され、while...elseも同じである.
3.whileサイクル
while :
……
while :
1……
else:
2……
4.break文
break文はCと同様に,最近のforループまたはwhileループから飛び出すために用いられる.
5.continue文
continue文はCと同様で,次の反復を継続することを示す.
6.pass文
pass文は何もしません.文法的に文が必要ですが、プログラムが何もする必要がない場合に使用されます.通常、最小クラスを作成するために使用されます.
四、関数式プログラミングツール
1. filter()
filter(function,sequence)が返すシーケンスはfunction(item)の結果が真の要素からなる.sequenceが文字列またはメタグループの場合、結果は同じタイプになります.そうでない場合、結果は常にリストになります.
def f(x): return x > 0
list(filter(f, range(-2,3))) # [1, 2]
2. map()
map(function,sequence)は、シーケンス内の各要素に対してfunction(item)関数を呼び出し、結果のリストを返します.複数のシーケンスを転送できます.この場合、入力された関数にもシーケンス数と同じパラメータが必要であり、実行時には各シーケンスに対応する要素で関数が順次呼び出されます(あるシーケンスが他のシーケンスより短い場合はNoneで置き換えられます).
def f(x, y): return x*2-y
list(map(f, range(-2,3), range(1, 6))) # [-5, -4, -3, -2, -1]
3.lambda式
Lambdaキーワードを使用して、小さな匿名関数を作成できます.構文:lambda[arg 1[,arg 2,...argn]]:expression
list(filter(lambda x : x > 0, range(-2,3))) # [1, 2]
list(map(lambda x, y : x*2-y, range(-2,3), range(1, 6))) # [-5, -4, -3, -2, -1]
4.付与文の特殊なテクニック
#
x, y, z = 1, 2, 3
x, y, z # (1, 2, 3)
x, y = y, x
x, y, z # (2, 1, 3)
#
x = y = somefunction()
#
y = somefunction()
x = y
5.収集パラメータ
'''
,
'''
def print_params(*params):
print params
print_params('params') # ('params',)
print_params(1, 2, 3) # (1, 2, 3)
'''
'''
def print_params(title, *params):
print title, params
print_params(1, 2, 3) # 1 (2, 3)
'''
, ,
'''
def print_params(title, *params1, **params2):
print title, params1, params2
print_params('params') # params () {}
print_params(1, 2, 3) # 1 (2, 3) {}
print_params('title', x = 1, y = 2, z = 3) # title () {'y': 2, 'x': 1, 'z': 3}
'''
'''
def add(x, y):
return x + y
params = (1, 2)
add(*params) # 3
def print_params(**params):
print params['width'], params['height']
params = {'width': 10, 'height': 20}
print_params(**params) # 10 20
五、異常
1.一部の内部建設異常
クラス名
説明
Exception
すべての例外のベースクラス
AttributeError
プロパティ参照または付与に失敗した場合に開始
IOError
存在しないファイル(他の状況を含む)を開こうとしたときに開始
IndexError
シーケンスに存在しないインデックスの使用時に開始
KeyError
マッピングに存在しないキーの使用時に開始
NameError
名前(変数)が見つからない場合に開始
SyntaxError
コードがエラー形式の場合に開始
TypeError
組み込み操作または関数がエラータイプのオブジェクトに適用されたときに開始
ValueError
組み込みオペレーションまたは関数は、正しいタイプのオブジェクトに適用されますが、そのオブジェクトが適切でない値を使用している場合に開始されます.
ZeroDivisionError
除算または型抜き操作の2番目のパラメータが0の場合に開始
2.処理異常
'''
try/except 。
try/except try , except 。
try:
#
except :
# try 'name' ,name ( )
except as :
# 'name' , msg
else:
# try ,else
'''
'''
try/finally 。
, finally 。
try:
finally:
# try
'''
try:
a = 1/0
print('right')
except (ZeroDivisionError, IOError) as msg:
print('error:', msg)
else:
print('else')
finally:
print('finally')
# :
# error: division by zero
# finally
3.トリガ異常
raise文を使用して、例外を自分でトリガーできます.
def f( x ):
if x < 1:
raise Exception("low x!")
# ,
try:
f(0)#
except Exception as msg:
print('error:', msg)
else:
print('else')
# :error: low x!
4.カスタム例外クラス
新しい例外クラスを作成することで、独自の例外を持つことができます.例外クラスはExceptionクラスから継承されます.直接継承したり、間接的に継承したりできます.
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(2*2)
except MyError as e:
print('error:', e.value)
# :error: 4
raise MyError('oops!')
# :__main__.MyError: 'oops!'
六、モジュール
1.モジュールの導入
import module
from module import somefunction
form module import *
import module as name
2. name
モジュールでは、モジュールの名前(文字列)はグローバル変数nameの価値があります.
import numpy
numpy.__name__ # 'numpy'
__name__ # '__main__'
3.dir()関数
内蔵関数dir()は、モジュールに定義されている名前を特定するために使用されます.順序付けされた文字列のリストを返します.
dir() # ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
七、その他の組み込み関数(未完、続き)