python学習-関数-関数の種類
5469 ワード
1.関数
Pythonには多くの有用な関数が内蔵されています.直接に呼び出すことができます.関数を呼び出すには、絶対値を求める関数
Pythonでは、関数をdef文で定義し、関数名、括弧、括弧のパラメータとコロンを順次書きます.その後、インデントブロックで関数体を作成し、関数の戻り値をreturn文で返します.
私たちは絶対値を求めるmy_をカスタマイズします.abs関数は例です
何もしない空の関数を定義したいなら、パス文を使ってもいいです.
パスは他の語句でも使えます.例えば:
関数を呼び出した場合、パラメータの個数が間違っていると、Python解釈器は自動的にチェックし、
my_を直しましょう.absの定義は、パラメータタイプをチェックし、整数と浮動小数タイプのパラメータのみを許可します.データタイプのチェックは、内蔵関数isinstance()で行うことができます.
関数は複数の値を返しますか?答えは肯定的です.例えば、ゲームでは、ある点から別の点に移動する必要があります.座標、シフト、角度を与えると、新しい座標が計算されます.
その後、私達は同時に戻り値を得ることができます.
結び目
関数を定義するには、関数名とパラメータの個数を決定する必要があります.必要があれば、まずパラメータのデータタイプをチェックしてもいいです.関数の内部は、関数の結果をいつでも返します.関数の実行が完了しても、return文がない場合は、自動的にreturn Noneが実行されます.関数は複数の値を同時に返すことができますが、実際にはtupleです.
付録:ここに小さなコードを書いてax*2+bx+c=0を実現して、x値を求めます.
Pythonには多くの有用な関数が内蔵されています.直接に呼び出すことができます.関数を呼び出すには、絶対値を求める関数
abs
のような関数の名前とパラメータを知る必要があります.パラメータは一つしかありません.Pythonの公式サイトから直接文書を見ることができます.http://docs.python.org/3/library/functions.html#abs 関数を呼び出したとき、着信パラメータの数が間違っているとTypeErrのエラーが発生し、Pythonは明確にあなたに教えます.abs()
には1つのパラメータしかありませんが、2つのパラメータが与えられました.>>> abs(1, 2)
Traceback (most recent call last):
File "", line 1, in
TypeError: abs() takes exactly one argument (2 given)
着信パラメータの数が正しい場合、パラメータタイプは関数によって受け入れられず、TypeErrのエラーも報告され、エラー情報が与えられます.str
はエラーのパラメータタイプです.>>> abs('a')
Traceback (most recent call last):
File "", line 1, in
TypeError: bad operand type for abs(): 'str'
max関数max()は、任意の複数のパラメータを受信し、最大のそれを返すことができる.>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3
Pythonに内蔵された常用関数には、int()関数などのデータタイプの変換関数が含まれています.他のデータタイプを整数に変換できます.>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False
関数名とは、関数オブジェクトの参照を指しています.関数名を変数に割り当てることができます.この関数に「別名」を付けるのに相当します.>>> a = abs # a abs
>>> a(-1) # a abs
1
1.1.定義関数Pythonでは、関数をdef文で定義し、関数名、括弧、括弧のパラメータとコロンを順次書きます.その後、インデントブロックで関数体を作成し、関数の戻り値をreturn文で返します.
私たちは絶対値を求めるmy_をカスタマイズします.abs関数は例です
def my_abs(x):
if x >= 0:
return x
else:
return -x
1.2空き関数何もしない空の関数を定義したいなら、パス文を使ってもいいです.
def nop():
pass
パス文は何もしないですが、何のために使いますか?実際にパスはプレースホルダとして使えます.例えば、関数のコードをどう書くかはまだ決めていません.まずパスを入れて、コードを実行させます.パスは他の語句でも使えます.例えば:
if age >= 18:
pass
pass,
1.3パラメータチェック関数を呼び出した場合、パラメータの個数が間違っていると、Python解釈器は自動的にチェックし、
TypeError
を投げ出します.>>> my_abs(1, 2)
Traceback (most recent call last):
File "", line 1, in
TypeError: my_abs() takes 1 positional argument but 2 were given
ただし、パラメータの種類が間違っていると、Python解釈器は確認してくれません.試してみるmy_abs
と内蔵関数abs
の違い:>>> my_abs('A')
Traceback (most recent call last):
File "", line 1, in
File "", line 2, in my_abs
TypeError: unorderable types: str() >= int()
>>> abs('A')
Traceback (most recent call last):
File "", line 1, in
TypeError: bad operand type for abs(): 'str'
不適切なパラメータが入ったら、内蔵関数absはパラメータエラーを確認します.私達が定義したmy_absはパラメータチェックがないので、if文のエラーが発生します.エラー情報はabsと違います.したがって、この関数の定義は十分ではない.my_を直しましょう.absの定義は、パラメータタイプをチェックし、整数と浮動小数タイプのパラメータのみを許可します.データタイプのチェックは、内蔵関数isinstance()で行うことができます.
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
パラメータチェックを追加したら、エラーのパラメータタイプが入ったら、関数はエラーを投げられます.>>> my_abs('A')
Traceback (most recent call last):
File "", line 1, in
File "", line 3, in my_abs
TypeError: bad operand type
1.4複数の値を返します関数は複数の値を返しますか?答えは肯定的です.例えば、ゲームでは、ある点から別の点に移動する必要があります.座標、シフト、角度を与えると、新しい座標が計算されます.
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
import math
文は、math
パケットを導入することを表し、後続コード参照math
パケット中のsin
、cos
などの関数を許可する.その後、私達は同時に戻り値を得ることができます.
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0 # 2 ,
しかし、これは一種の仮相にすぎません.Python関数が返したのはまだ単一の値です.>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
元の戻り値はtupleです.しかし、文法的には、tupleを返すと括弧を省略することができますが、複数の変数は同時に一つのtupleを受信し、位置に応じて対応する値を与えられます.だから、Pythonの関数は複数の値を返します.結び目
関数を定義するには、関数名とパラメータの個数を決定する必要があります.必要があれば、まずパラメータのデータタイプをチェックしてもいいです.関数の内部は、関数の結果をいつでも返します.関数の実行が完了しても、return文がない場合は、自動的にreturn Noneが実行されます.関数は複数の値を同時に返すことができますが、実際にはtupleです.
付録:ここに小さなコードを書いてax*2+bx+c=0を実現して、x値を求めます.
import math
def quadratic(a,b,c):
# ax**2 + bx + c == 0
#
if not isinstance(a,(int,float)):
raise TypeError('bad operand type')
if not isinstance(b,(int,float)):
raise TypeError('bad operand type')
if not isinstance(c,(int,float)):
raise TypeError('bad operand type')
if b*b - 4*a*c < 0:
print('error!,you have a mistake')
else:
if a == 0 and b != 0:
x = c/b
return x
if a != 0 and b == 0:
x = math.sqrt(-c/a)
return x
print(" b 0, 2 , ")
if a != 0 and b != 0:
y = (b**2 - 4*a*c)/(4*a*a)
x1 = -math.sqrt(y) -b/(2*a)
x2 = math.sqrt(y) -b/(2*a)
return x1,x2
print(' 2 ,a b 0')
print(quadratic(1, 0, -1)) #
2.