検索
ホームページバックエンド開発Python チュートリアルPython の関数パラメーターの詳細な紹介 (例付き)

Python の関数パラメーターの詳細な紹介 (例付き)

Sep 06, 2018 pm 05:59 PM
python関数パラメータ

この記事では、Python の関数パラメータについて詳しく説明します (例とともに)。一定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。

Python の関数定義は比較的単純で、キーワード def を使用して実装されていますが、パラメーターは非常に柔軟です。通常定義される必須パラメータに加えて、デフォルト パラメータ、変数パラメータ、キーワード パラメータ、名前付きキーワード パラメータ、およびパラメータの組み合わせも使用できます。これにより、関数によって定義されたインターフェイスで複雑なパラメータを処理できるだけでなく、呼び出しも簡略化できます。演算子のコード

1. 位置パラメータ

関数を定義するときに、パラメータの位置順序を指定します。位置パラメータは、呼び出される関数定義内の正確な順序で渡す必要があります。

例: x

def powern(x,n):
    s = 1
    while n >0:
        s = s * x
        n = n -1
    return s
の n 乗を計算します。

2 つのパラメーター x と n は位置パラメーターです。関数を呼び出す際には、渡された 2 つの値を位置順にパラメータ x と n に渡して代入する必要があり、デフォルトで省略されている場合はエラーが報告されます。例:

>>> powern(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: powern() missing 1 required positional argument: 'n'</module></stdin>

2. デフォルトパラメータ

関数定義では、パラメータのデフォルト値があらかじめ定義されています。関数が呼び出されるとき、パラメータに指定された値が指定されていない場合は、デフォルト値が使用されます。
たとえば、x の n 乗を求める作業はまだ残っていますが、デフォルトは x の 3 乗です。

def powern( x,n = 3):
    s = 1
    while n >0:
        s = s * x
        n = n -1
    return s

実行: powern(2) (powern(2,3) の呼び出しと同等)
2 の 4 乗が必要な場合は、powern(2,4)## を実行する必要があります。

#デフォルトのパラメータを設定する利点は何ですか? デフォルト パラメーターを使用すると、関数呼び出しが簡素化され、関数呼び出しの難しさが軽減されます。単純な呼び出しであっても複雑な呼び出しであっても、定義する必要がある関数は 1 つだけです。
たとえば、上記の powern() の例では、n の他の値が渡されると、x の他の n 乗を実現できます。

しかし、デフォルトのパラメータを使用する場合、不適切に使用すると落とし穴があります。まず、関数パラメータとしての可変パラメータと不変パラメータの違いを理解しましょう。

関数パラメータとしての不変パラメータ

>>> a = 1
>>> def func(a):
...     print('func_id:',id(a))
...     a = 2
...     print('after_func_id:',id(a),'id(2):',id(2))
...
>>> print('out_of_func_id:',id(a),'id(1):',id(1))
out_of_func_id: 501962480  id(1): 501962480   # 全局变量a的id
>>> func(a)            # 将全局参数a传入函数
func_id: 501962480    # a=1 的id
after_func_id: 501962496  id(2): 501962496  
>>> print(a)            # 退出函数,a的值仍为1
1
グローバル a を関数に渡すとき、その後、関数は参照のコピーを自動的にコピーします。 a=2を実行すると、id(a)のメモリアドレスが変化します。しかし、それは外側のaとは何の関係もありません。

関数パラメータとしての変数オブジェクト

>>> a = []
>>> def func2(a):
...     print('func2_id:',id(a))
...     a.append(1)
...
>>> print('out_of_func2_id',id(a))
out_of_func2_id 59694296
>>> func2(a)
func2_id: 59694296
>>> print(a)
[1]
変数 a の型はリストであり、変数オブジェクトです。関数の参照は可変オブジェクトを指しており、アドレスは変化しないため、関数の操作後に a の内容が変化します。

そのため、func2(a) 関数を再度実行すると、結果は予期した結果と異なります。

>>> func2(a)
func2_id: 59694296    # a地址不变
>>> print(a)
[1, 1]        # 因为第一次执行func2(a)时,已经修改了a=[1],再次调用时,在[1]里新增
例:

def add_end( L=[] ):  # 设置为一个list变量L(对象可变)
    L.append('end')
    return L
>>> add_end( )
['end']
>>> add_end()  
['end', 'end']
デフォルトのパラメーターが繰り返し呼び出される場合、結果が間違っています。

Python 関数が定義されると、デフォルトのパラメーター L の値が計算されます。これは [] です。 L もオブジェクト [] を指す変数です。関数が呼び出されるたびに、L の内容が変更されると、次回呼び出されたときにデフォルト パラメータの内容が変更され、変更されなくなります。関数が定義されたときの []。

def add_end( L=None ):  # L为不变对象  
    if L is None:          
    L = []            
    L.append('end')   
    return L
に変更すると、何度呼び出しても問題ありません。

したがって、デフォルト パラメータを定義するときに留意すべきことが 1 つあります。
デフォルト パラメータは不変オブジェクトを指す必要があります。不変オブジェクトが作成されると、オブジェクト内のデータは変更できないため、データの変更によって発生するエラーが減少します。 さらに、オブジェクトは変更されないため、マルチタスク環境でオブジェクトを同時に読み取る場合、ロックは必要ありません。

デフォルトパラメータを設定する場合、いくつかの注意点があります。 1.必須パラメータが最初に来て、デフォルトパラメータが最後に来ます。そうしないと、Python インタープリタはエラーを報告します。 ### 二。デフォルトのパラメータを設定するにはどうすればよいですか?関数に複数のパラメーターがある場合は、変化の大きいパラメーターを前に配置し、変化の小さいパラメーターを後ろに配置します。変更が少ないパラメータはデフォルトのパラメータとして使用できます。 ### 三つ。変更可能なオブジェクトをデフォルトのパラメータとして使用しないでください。


3. 可変パラメータ *args

可変パラメータ、つまり、渡されるパラメータの数は 0 から任意の数まで可変です。 パラメータの数は不確実であるため、リストまたはタプルを使用して渡すことができます。関数が呼び出されるときに、それは自動的にタプルにアセンブルされます。

例:

def calc(numbers):  # 变量        
    sum = 0               
    for n in numbers:       
        sum = sum + n * n   
    return sum            
>>> calc( [1,2,3] )   # 传入的是一个list
14

変数パラメータを使用する *引数:
def calc( *numbers ):  
    sum = 0        
    for n in numbers:    # 在函数内部,numbers组装成一个tuple
    sum = sum + n * n
    return sum
>>> calc( )            # 0个参数  
0
>>> calc( 1,3,5,7 )    # 多个参数 
84
>>> num = [1,2,3]      # list
>>> calc( *num )       # *list –> tuple
14   
>>> t = (1,3,5)
>>> calc( t )          # tuple(错误)  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in calc
TypeError: can't multiply sequence by non-int of type 'tuple'
>>> calc( *t )                  
35</stdin></module></stdin>
関数コードはまったく変更されません。ただし、この関数を呼び出すときは、0 個のパラメーターを含め、任意の数のパラメーターを渡すことができます。

4. キーワード パラメータ **kw

キーワード パラメータ **kw を使用すると、パラメータ名を含む任意の数のパラメータに 0 を渡すことができます。これらのキーワード パラメータは自動的にアセンブルされて、関数内の辞書。例:
def person(name , age , **kw ):
    print('name:',name,'age:',age,'other:',kw)
>>> person('xiong',18)
name: xiong age: 18 other: {}
>>> person('xiong',18,city = 'SH')          # city是原本没有的参数,但是因为有**kw
name: xiong age: 18 other: {'city': 'SH'}

主要なパラメータは何に使用されますか?関数の機能を拡張することができます。たとえば、person() 関数では、name と age という 2 つのパラメータを受け取ることが保証されています。ただし、さらに多くのパラメーターが指定されている場合は、それらを受け取ることもできます。もちろん、最初に辞書を組み立ててから、その辞書をキーワード パラメータに変換して渡すこともできます。

>>> extra ={'city':'shanghai','job':'SET'}                     # dict的定义
>>> person('xiong',18,city = extra['city'],job=extra['job'])   # dict的使用
name: xiong age: 18 other: {'city': 'shanghai', 'job': 'SET'}  # dict的内容
>>> person('xiong',18,**extra)
name: xiong age: 18 other: {'city': 'shanghai', 'job': 'SET'}
[概要] **extra は、追加の辞書のすべてのキーと値を渡すことを意味しますキーワード パラメータに変換します。関数の **kw パラメータ、kw は辞書を取得します。kw によって取得された辞書は extra のコピーであることに注意してください。kw を変更しても、関数の外側の extra には影響しません。

五、命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数。需要一个特殊分隔符“”,“”后面的参数被视为命名关键字参数。如果缺少“*”,Python解释器则无法识别位置参数和命名关键字参数。在调用时,必须指定参数名字与参数值。
例如,只接收city和job作为关键字参数,可以使用如下定义:

def person( name ,age,*,city,job):
    print(name , age , city , job )
>>> person('xiong', 18, city='shanghai', job='tester')
xiong 18 shanghai tester

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

>>> def person( name,age,*args,city,job ):     # 此处city和job也是命名关键字参数
...   print(name, age, city, job)

命名关键字参数必须传入参数名,如果没有传入参数名,调用将会报错:

>>> person('xlp',18,'shanghai','tester')          # 错误调用 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: person() missing 2 required keyword-only arguments: 'city' and 'job'
>>> person('xlp',18,city='shanghai',job='tester')  # 正确调用 
xlp 18 shanghai tester</module></stdin>

命名关键字参数可以有缺省值,从而简化调用:

>>> def person1(name,age,*,city='shanghai',job):
...   print(name,age,city,job)
...
>>> person1('xlp',18,job='engineer')
xlp 18 shanghai engineer

六、参数组合

在Python中定义函数,可以用位置参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。
但是要注意,参数定义的顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。

【总结】

(1)定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个list、tuple;
**kw是关键字参数,kw接收的是一个dict;
(2)调用函数时如何传入可变参数和关键字参数的语法:
可变参数直接传入:func(1,2,3)
可变参数间接传入:先组装成list或tuple,l=(1,2,3),再通过args传入,func(l)
关键字参数直接传入:func(a=1,b=2)
关键字参数间接传入:先组装成dict,d={‘a’:1,’b’:2},再通过kw传入,func(d)
(3)命名关键字参数 是为了限制调用者可以传入的参数名,同时可以提供默认值。
(4)定义命名的关键字参数在没有可变参数的情况下,不要忘记写分隔符*,否则定义的将是位置参数

相关推荐:

Python中函数的可变参数

理解Python中函数的参数

以上がPython の関数パラメーターの詳細な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Apr 25, 2025 am 12:28 AM

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

同じシステムで異なるPythonバージョンをどのように処理しますか?同じシステムで異なるPythonバージョンをどのように処理しますか?Apr 25, 2025 am 12:24 AM

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?Apr 25, 2025 am 12:21 AM

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

アレイの均質な性質はパフォーマンスにどのように影響しますか?アレイの均質な性質はパフォーマンスにどのように影響しますか?Apr 25, 2025 am 12:13 AM

パフォーマンスに対する配列の均一性の影響は二重です。1)均一性により、コンパイラはメモリアクセスを最適化し、パフォーマンスを改善できます。 2)しかし、タイプの多様性を制限し、それが非効率につながる可能性があります。要するに、適切なデータ構造を選択することが重要です。

実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?Apr 25, 2025 am 12:11 AM

craftexecutablepythonscripts、次のようになります

numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?Apr 24, 2025 pm 03:53 PM

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Apr 24, 2025 pm 03:49 PM

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

CTypesモジュールは、Pythonの配列にどのように関連していますか?CTypesモジュールは、Pythonの配列にどのように関連していますか?Apr 24, 2025 pm 03:45 PM

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター