ホームページ  >  記事  >  バックエンド開発  >  Python のパラメーターとスコープの使用方法を説明する

Python のパラメーターとスコープの使用方法を説明する

WBOY
WBOYオリジナル
2016-06-16 08:46:211253ブラウズ

この記事では、ステートメントを関数に編成する方法について説明し、パラメーターとスコープの概念、再帰の概念とプログラムでのその使用法についても詳しく説明します。
1. 関数を作成します
関数を呼び出すことができ、特定の動作を実行して値を返します。 def ステートメントを使用して関数を定義できます。 (すべての関数が何かを返すわけではありません)

コードをコピー コードは次のとおりです:

def fibs(num):
result = [0,1]
for i in range(num-2):
result.append(result[-2]+result[-1] )
戻り結果

関数の記録
人々が理解できるように関数を文書化したい場合は、コメント (# で始まる) を追加できます。もう 1 つの方法は、docstring と呼ばれる関数の一部として保存される文字列を直接記述することです。
コードをコピー コードは次のとおりです:

def square(x):
'x の 2 乗を計算します。 '
return x*x

#docstring は次のようにアクセスできます:
>>> square._doc_
'x の 2 乗を計算します'

2. パラメーター マジック
関数は使用が非常に簡単で、作成も複雑ではありませんが、関数パラメーターの使用法は場合によっては信じられないほどです。
2.1 パラメータを変更できますか?
関数内のパラメータに新しい値を代入しても、外部変数の値は変更されません:
コードをコピー コードは次のとおりです:

>>> def to_change(n):
n = 's'
> >> name = ' b'
>>> to_change(name)
>>> name
'b'

数値とタプル) は不変、つまり変更できません。ただし、リストなどの変更可能なデータ構造をパラメーターとして使用した場合、パラメーターは変更されます。
コードをコピー コードは次のとおりです:

>>> def change(n):
n[0 ] = 'ss'
>>> 名前 = ['aa','zz']
>>> 変更(名前)
>>> names
['ss', 'zz']


2.2 キーワードパラメータとデフォルト値
これまでに使用したパラメータは次のように呼ばれます。位置パラメータ 。パラメーターの順序を覚えるのが難しい場合は、パラメーターの名前を指定することもできます。
コードをコピーします コードは次のとおりです。 :

>>> def hello(greeting,name):
print '%s,%name!'
>>> hello',name = 'world')
hello, world!

このように、パラメーターの順序はまったく影響しませんが、パラメーターの名前と値は対応している必要があります。 。
このようにパラメータ名を使用して提供されるパラメータは、キーワードパラメータと呼ばれ、その主な機能は各パラメータの役割を明確にすることです。
キーワード パラメーターの最も強力な点は、関数のパラメーターにデフォルト値を指定できることです:
>>> def hello(greeting = 'hello',name = 'world') :
'%s,%name!'
パラメータにデフォルト値がある場合、呼び出し時にパラメータを指定する必要はありません。パラメータを指定しないか、一部またはすべてを指定できます。
コードをコピー コードは次のとおりです:

>hello()
'こんにちは。世界!'
>>> こんにちは('挨拶')
'こんにちは、世界!'
>>> こんにちは(名前 = '宇宙') '


2.3 パラメータの収集
ユーザーが関数に必要なだけパラメータを指定できると便利です。これを行う必要があります: 関数を定義する パラメーターを指定する場合は、その前にアスタリスクを追加します。

コードをコピー コードは次のとおりです:
>>> def print_para(*paras):
print paras
>>> print_para('ss')
('ss',)
>>> print_para(1,2,3)
(1, 2, 3 )

パラメータの前のアスタリスクは、すべての値を同じタプルに配置します。これは、これらの「他の位置のパラメータ」を再利用のために収集すると言えます。コレクション要素が指定されていない場合、引数は空のタプル () になります。
しかし、キーワード パラメータの「コレクション」操作を処理する必要がある場合は、2 つのアスタリスク "**" が必要です:

コードをコピー コードは次のとおりです。以下のように:

>>> def print_params(x,y,z=3,*pospar,**keypar):
print x,y,z
print pospar
print keypar

>>>>print_params(1,2,3,5,6,7,foo=1,bar=2)
1 2 3
(5, 6, 7)
{'foo': 1, 'bar': 2}
>>> print_params(1,2)
1 2 3
()
{}

最初の 3 つのパラメータは固定されており、5 番目のパラメータは複数のパラメータを収集できます。5 番目のパラメータはキーワード パラメータであり、複数のキー ワード パラメータを収集できます。 。入力がない場合、デフォルトは空のタプルまたは空の辞書になります。

2.4 逆の処理
パラメーターをタプルと辞書として収集する方法について説明しましたが、* と ** を使用すると、逆の操作を実行することもできます。 (1) 呼び出し時に
を使用してコード をコピーします。 コードは次のとおりです。 def add(x ,y): return x+y
>>>>params =(1,2)
>>>>add(*params)
3


(2) 定義時に
をコピーするには、

を使用します。 コードは次のとおりです。 🎜>>>> def with_stars(**kds): print kds['name'],'is',kds['age'],'year old'>>> ; args = {'name': 'ガンビーさん','年齢':42} >>> with_stars(**args)ガンビーさんは 42 歳です



Three . スコープ

x=1 代入ステートメントの実行後、名前 x は値 1 を参照します。これは辞書を使用するのと似ており、キーは値を参照します。もちろん、変数と対応する値は「目に見えない」辞書を使用します。組み込みの vars 関数は、この辞書を返すことができます:

コードをコピーします
コードは次のとおりです:
>> ;> x=1 >>> スコープ = vars()>> スコープ['x']>> 'x'] += 1>>> x
2


この目に見えない辞書は、名前空間またはスコープと呼ばれます。グローバル スコープに加えて、各関数呼び出しによって新しいスコープが作成されます。
プログラミングを勉強したことがある人は基本的にスコープについて知っているので、ここでは詳しく説明しません。


4. 再帰
再帰定義には、独自の定義内容への参照が含まれます。
有用な再帰関数には次の部分が含まれます:
(1) 関数が値を直接返す場合、基本的なインスタンス (最小尤度問題) があります
(2) 1 つ以上の最小問題を含む再帰インスタンス 部分的再帰呼び出し。
ここで重要なのは、問題を小さな部分に分割することです。再帰は常に最小尤度問題で終了するため、永遠に続けることはできません。その問題は基本インスタンスに保存されます。 3 つの古典的な再帰の例を見てみましょう:
A. Factorial
>>>gt; if n == 1:
return 1
else :
return n *階乗(n-1)
[/code]
B. Power



コードをコピー

コードは次のとおりです。


>>> def power(x,n):
if n == 0: return 1 else: return x * power( x,n-1)
C. 二分探索 (数値がシーケンス内にある必要があると仮定)



コードをコピー

コードは次のとおりです:

>>> def search(sequence,number, lower,upper):
if lower == upper:assert num == sequence[upper | 上) else: return search(シーケンス,番号,下,中)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。