関數(shù)パラメータ
1. デフォルト値のパラメータ
カスタム関數(shù)では、呼び出し時にパラメータが設定されていない場合、現(xiàn)時點で必要となるデフォルト値を指定する必要がある場合があります。 . デフォルト値のパラメータ。
# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = '男' ): # 打印用戶信息 print('昵稱:{}'.format(name) , end = ' ') print('年齡:{}'.format(age) , end = ' ') print('性別:{}'.format(sex)) return; # 調(diào)用 print_user_info 函數(shù) print_user_info( '兩點水' , 18 , '女') print_user_info( '三點水' , 25 )
出力結(jié)果:
昵稱:兩點水 年齡:18 性別:女 昵稱:三點水 年齡:25 性別:男
デフォルトパラメータを設定した場合、関數(shù)呼び出し時にパラメータを渡さなければデフォルト値が使用されることがわかります。ただし、ここで注意すべき點が 1 つあります: 仮パラメータ リストの最後にあるパラメータのみがデフォルトのパラメータ値を持つことができます。つまり、関數(shù)のパラメータを宣言する場合、最初にデフォルト値を使用してパラメータを宣言し、次にデフォルト値を指定せずにパラメータを宣言することはできません。デフォルト値、仮パラメータ。これは、仮パラメータに割り當てられる値が位置的に割り當てられるためです。たとえば、def func(a, b=1) は有効ですが、def func(a=1, b) は無効です。
デフォルト値パラメータはこれで終わりですか?まだです。よく考えてください。パラメーターが lsit (リスト) や dict (辭書) などの変更可能なコンテナーである場合、デフォルト値として何を使用する必要がありますか?デフォルト値として None を使用できます。次の例のようになります:
# 如果 b 是一個 list ,可以使用 None 作為默認值 def print_info( a , b = None ): if b is None : b=[] return;
例をよく見てください。このような質(zhì)問はありますか?パラメータで直接 b=[] を使用することはできないでしょうか?つまり、次のように書かれています:
def print_info( a , b = [] ): return;
ですよね?実行してみてもエラーは出なかったのですが、このように書いても良いでしょうか?ここで特別な注意が必要な點が 1 つあります。デフォルト パラメータの値は、None、True、False、數(shù)値、文字列などの不変オブジェクトです。上記のように操作すると、デフォルト値が他の場所で変更されたときに問題が発生します。あらゆる種類のトラブル。これらの変更は、次回この関數(shù)が呼び出されるときのデフォルト値に影響します。
例は次のとおりです:
# -*- coding: UTF-8 -*- def print_info( a , b = [] ): print(b) return b ; result = print_info(1) result.append('error') print_info(2)
出力結(jié)果:
[] ['error']
注意深く観察すると、2 番目の出力値がまったく望んでいないことがわかるため、これは避けてください。 . 動作します。
もう 1 つ、デフォルト値が不要な場合があります。デフォルト パラメータに値が渡されているかどうかを判斷したいだけです。これを行うことができます:
_no_value =object() def print_info( a , b = _no_value ): if b is _no_value : print('b 沒有賦值') return;
ここでのオブジェクトは、Python のすべてのクラスの基本クラスです。オブジェクト クラスのインスタンスを作成することはできますが、これらのインスタンスは有用なメソッドを持たず、インスタンス データも持たないため、実際には役に立ちません (インスタンス ディクショナリがないため、作成することもできません)。任意のプロパティ値を設定します)。できることは身元をテストすることだけです。この機能は、値の入力があるかどうかを判斷するためにも使用できます。
2. キーワード パラメーター
Python では、パラメーター リストの定義順序を気にせずに、パラメーター名を使用して関數(shù)にパラメーターを渡すことができます。と呼ばれるキーワードパラメータです。主要なパラメーターを使用することには 2 つの利點があります。
まず、パラメーターの順序を気にする必要がないため、関數(shù)の使用が簡単になります。
2. 他のパラメータにデフォルト値があると仮定すると、必要なパラメータにのみ値を割り當てることができます
# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = '男' ): # 打印用戶信息 print('昵稱:{}'.format(name) , end = ' ') print('年齡:{}'.format(age) , end = ' ') print('性別:{}'.format(sex)) return; # 調(diào)用 print_user_info 函數(shù) print_user_info( name = '兩點水' ,age = 18 , sex = '女') print_user_info( name = '兩點水' ,sex = '女', age = 18 )
出力値:
昵稱:兩點水 年齡:18 性別:女 昵稱:兩點水 年齡:18 性別:女
3.不定長パラメータ
関數(shù)インターフェイスを設計するときに、可変長パラメーターが必要になる場合があります。つまり、渡されるパラメーターの數(shù)を事前に決定することはできません。 Python には、直接定義されていないパラメータを受け入れるためのタプル メソッドが用意されています。このメソッドは、パラメーターの前にアスタリスク * を追加します。関數(shù)の呼び出し時にパラメータが指定されていない場合、その関數(shù)は空のタプルになります。名前のない変數(shù)を関數(shù)に渡すこともできません。
例:
# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = '男' , * hobby): # 打印用戶信息 print('昵稱:{}'.format(name) , end = ' ') print('年齡:{}'.format(age) , end = ' ') print('性別:{}'.format(sex) ,end = ' ' ) print('愛好:{}'.format(hobby)) return; # 調(diào)用 print_user_info 函數(shù) print_user_info( '兩點水' ,18 , '女', '打籃球','打羽毛球','跑步')
出力結(jié)果:
昵稱:兩點水 年齡:18 性別:女 愛好:('打籃球', '打羽毛球', '跑步')
出力結(jié)果から、*hobby は可変パラメータであり、hobby は実際にはタプルであることがわかります (オリジナル) ancestor)
可変長パラメータはキー パラメータもサポートしています。未定義のキー パラメータは辭書に配置されます。この方法は、パラメータの前に ** を追加し、上記の例を次のように変更します。
# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = '男' , ** hobby ): # 打印用戶信息 print('昵稱:{}'.format(name) , end = ' ') print('年齡:{}'.format(age) , end = ' ') print('性別:{}'.format(sex) ,end = ' ' ) print('愛好:{}'.format(hobby)) return; # 調(diào)用 print_user_info 函數(shù) print_user_info( name = '兩點水' , age = 18 , sex = '女', hobby = ('打籃球','打羽毛球','跑步'))
出力結(jié)果:
昵稱:兩點水 年齡:18 性別:女 愛好:{'hobby': ('打籃球', '打羽毛球', '跑步')}
上記の例とこの例を比較すると、次のようになります。 *hobby は変數(shù)パラメータであり、hobby は実際にはタプル (元の祖先) であり、**hobby はキーワード パラメータであり、hobby は dict (辭書) です。
4. キーワード パラメータのみを受け入れます
キーワード パラメーターは使いやすく、パラメーター エラーが発生しにくいです。そのため、定義した関數(shù)で、キーワード パラメーターを使用して特定のパラメーターを渡す必要がある場合があります。このとき、どうすればよいでしょうか?
この効果は、* パラメータまたは単一の * の後に必須のキーワード パラメータを配置することで実現(xiàn)できます。例:
# -*- coding: UTF-8 -*- def print_user_info( name , *, age , sex = '男' ): # 打印用戶信息 print('昵稱:{}'.format(name) , end = ' ') print('年齡:{}'.format(age) , end = ' ') print('性別:{}'.format(sex)) return; # 調(diào)用 print_user_info 函數(shù) print_user_info( name = '兩點水' ,age = 18 , sex = '女' ) # 這種寫法會報錯,因為 age ,sex 這兩個參數(shù)強制使用關(guān)鍵字參數(shù) #print_user_info( '兩點水' , 18 , '女' ) print_user_info('兩點水',age='22',sex='男')
この例から、年齢と性別のキーワードが指定されていないことがわかります。該當するパラメータはエラーを報告します。
多くの場合、必須のキーワード パラメーターを使用すると、位置パラメーターを使用するよりも意味が明確になり、プログラムが読みやすくなります。必須のキーワード パラメータを使用することは、**kw パラメータを使用するよりも優(yōu)れており、必須のキーワード パラメータは、より高度な狀況でも役立ちます。