この章の内容: 関数の複数の戻り値、関数のさまざまなパラメータの受け渡し方法、無名関数など、Python の関数に関する高度な知識の紹介。
関連するコードはすべてhttps://github.com/hzyao/Python-Cookbook
で参照できます。ご興味がございましたら、私の公開アカウントをフォローしていただくこともできます。Xiaobiは知りたいと思っています。ありがとうございます! !!
学びと練習を同時に行い、やがて発見できるのは素晴らしいことです。一緒に食べるとさらに美味しいかも!
ところで、もう一度聞きますが、私と同じように、Python を開いたときに R が恋しくなる人はどれくらいいるでしょうか。
高度な機能
1 関数の複数の戻り値
関数が複数の戻り値を持ちたい場合は、戻り値の順序に従って複数の変数を対応する順序で記述するだけでよく、変数はさまざまなタイプのデータをサポートするためにカンマで区切られますreturn
。
# 使用多个变量接收多个返回值
def multi_return():
return 6, "xmy", True
x, y, z = multi_return()
print(x)
print(y)
print(z)
2 パラメータを関数に渡すさまざまな方法
使用方法の違いにより、関数パラメータの一般的な使用方法は次の 4 種類に分類できます。
- 位置パラメータ
- キーワード引数
- デフォルトパラメータ
- 可変長パラメータ
2.1 位置パラメータ
位置パラメータ: 関数を呼び出すとき、パラメータは関数で定義されたパラメータの位置に従って渡されます。
注: 渡されるパラメータの順序と数は、定義されたパラメータと一致している必要があります。
# 位置参数
def test_func(name, age, gender):
print(f"姓名:{
name}, 年龄:{
age}, 性别:{
gender}")
test_func("xmy", "17", "male")
2.2 キーワードパラメータ
キーワード パラメーター: パラメーターは、関数の呼び出し時に **"key=value"** の形式で渡されます。
機能: パラメーターの順序をクリアしながら、関数をより明確かつ使いやすくすることができます。
注: 関数を呼び出すとき、位置パラメータがある場合、位置パラメータはキーワード パラメータの前になければなりませんが、キーワード パラメータ間に順序はありません。
# 关键字参数
def test_func(name, age, gender):
print(f"姓名:{
name}, 年龄:{
age}, 性别:{
gender}")
test_func("xmy", gender="male", age="17") # 可以与关键字参数混用,且可不按照参数定义顺序
2.3 デフォルトパラメータ
デフォルト パラメータ: デフォルト パラメータとも呼ばれ、関数を定義し、パラメータのデフォルト値を提供するために使用されます。関数を呼び出すときにデフォルト パラメータの値を渡す必要はありません。
機能: 関数を呼び出すときにパラメータが渡されない場合、デフォルト パラメータに対応する値がデフォルトで使用されます。デフォルト パラメータに値が渡された場合、デフォルト パラメータのデフォルト値が変更されます。
注: 関数定義や呼び出しを含むすべての位置パラメータは、デフォルト パラメータの前に指定する必要があります。つまり、デフォルト パラメータは最後に定義する必要があります。
# 缺省参数
def test_func(name, age, gender="male"):
print(f"姓名:{
name}, 年龄:{
age}, 性别:{
gender}")
test_func("xmy", "17")
test_func("run", 18, gender="female")
2.4 不定長パラメータ
不定長パラメータ: 不定長パラメータは可変パラメータとも呼ばれ、呼び出し時に渡されるパラメータの数 (パラメータがない場合も含む) が不明なシナリオで使用されます。
機能: 関数を呼び出すときにパラメーターの数がわからない場合は、可変長パラメーターを使用できます。
可変長パラメータのタイプ:
- 位置渡し:
*
仮パラメータをマークし、通常は という名前のタプルargs
の形式でパラメータを受け入れます。 - キーワードの受け渡し:仮パラメータをマークし、通常は という名前の辞書
**
の形式でパラメータを受け入れます。kwargs
# 不定长参数
## 位置传递
def test_func(*args):
print(f"args参数类型是:{
type(args)},内容是{
args}")
test_func(666, "xmy")
## 关键字传递
def test_func(**kwargs):
print(f"kwargs参数类型是:{
type(kwargs)},内容是{
kwargs}")
test_func(num=666, name="xmy")
3 匿名関数
3.1 パラメータとして渡される関数
これまでの研究では、私たちが使用してきた関数は、数値、文字列、辞書、リスト、タプルなどのデータをパラメータとして受け取ります。
実際、関数自体をパラメータとして別の関数に渡して使用することもできます。
機能:データではなく、計算ロジックの転送。任意のロジックを自分で定義し、関数として渡すことができます。
# 函数作为参数传递
## 定义一个函数,接受另一个函数作为参数传入
def test_func(compute):
result = compute(1, 2)
print(type(compute))
print(result)
## 定义一个函数,即将作为参数传入另一个函数
def compute(x, y):
return x + y
## 调用并传入函数
test_func(compute)
3.2 ラムダ匿名関数
関数定義では次のようになります。
def
、名前を付けて関数を定義できますlambda
、匿名関数 (名前なし)を定義できます。
名前のある関数はその名前に基づいて繰り返し使用できますが、名前のない匿名関数は一時的に 1 回しか使用できません。
匿名関数定義の構文:lambda 传入参数:函数体
lambda
はキーワードであり、無名関数の定義を示します。- 匿名関数の仮パラメータを示すパラメータを渡します。次のようなものです。
x, y
2 つの仮パラメータを受け取ることを示します。 - 関数本体は関数の実行ロジックです。注:記述できるのは 1 行のみであり、複数行のコードを記述することはできません。複数行が必要な場合は、
def
名前を付けて定義された関数を使用する必要があります。
# lambda 匿名函数
## 定义一个函数,接受另一个函数作为参数传入
def test_func(any):
result = any(1, 2)
print(result)
## 通过 lambda 匿名函数形式,将匿名函数作为参数传入
test_func(lambda x, y: x + y)
# 以上使用 def 和 lambda 定义的函数功能完全一致,只不过 lambda 定义的函数是匿名的,无法二次使用。