Python関数の定義とパラメーターの説明

Python関数の定義とパラメーターの説明#

関数定義##

まず、指定した範囲内でフィボナッチシリーズを出力する関数を作成しましょう。

#! /usr/bin/env python 
# coding=utf-8'''
2016年9月4日午後2時に作成:37:31
@ author: Flowsnow
@ file: D:/Workspaces/eclipse/HelloPython/main/FibonacciSeries.py
@ function:機能を定義する-指定された範囲内でFibonacciシーケンスを出力します
'''
def Fibonacci(n):
 # print "success"
 a=0
 b=1while a<n:
  print a,
  a,b=b,a+b

# call the function Fibonacci
Fibonacci(2000)
print '\n',
print Fibonacci
f=Fibonacci
f(100)
print '\n',
print Fibonacci(0)

出力は次のとおりです。

011235813213455891442333776109871597< function Fibonacci at 0x000000000258D9E8>01123581321345589 
None

最初の行から、Fibonacci関数が2000年以内にFibonacciシーケンスを出力していることがわかります。
2行目は、メモリ内のFibonacci関数のアドレスを示しています
3行目から、Fibonacci関数のアドレス値を別の変数fに割り当てた後、fは重複名メカニズムに似た関数であることがわかります。
4行目から、Fibonacci関数には returnステートメントがありませんが、 printを使用して出力すると、戻り値は残っていることがわかりますが、戻り値はPythonの組み込み名である Noneです。

フィボナッチシーケンスの値を出力せず、その値を戻り値として返す関数を作成することもできます。

#! /usr/bin/env python 
# coding=utf-8'''
2016年9月4日午後3時に作成:07:06
@ author: Flowsnow
@ file: D:/Workspaces/eclipse/HelloPython/main/FibonacciSeriesAdv.py
@ function:関数定義-直接印刷する代わりにFibonacciシーケンスを返す
'''
def Fibonacci(n):
 a=0
 b=1
 result=[]while a<n:
  result.append(a)
  a,b=b,a+b
 return result
result=Fibonacci(2000)for x in result:
 print x,

出力結果:0 1 1 2 3 5 8 13 21 34 55 89144233377610987 1597

詳細なパラメータ##

Pythonの組み込み標準タイプには、可変タイプと不変タイプに分けられる分類標準があります

上記の関数定義のパラメーターはすべて不変の型です。

可変パラメータには、デフォルトパラメータ、位置パラメータ * argsキーワードパラメータ ** kwargsの3つのケースがあります。

デフォルトパラメータ###

デフォルトパラメータの利点は、関数を呼び出すときに書き込まれるパラメータが、関数が定義されているときよりも少ないことです。例えば:

#! /usr/bin/env python 
# coding=utf-8'''
2016年9月5日午後2時に作成:50:12
@ author: Flowsnow
@ file: D:/Workspaces/eclipse/HelloPython/main/askYesOrNo.py
@ function:デフォルトパラメータの使用をテストします
'''
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):while True:
  ok =raw_input(prompt)if ok in('y','ye','yes'):return True
  if ok in('n','no','nop','nope'):return False
  retries = retries -1if retries <0:
   raise IOError('refusenik user')
  print complaint

この関数を呼び出すには、次のような多くの方法があります。

デフォルト値に関しては、デフォルト値は関数が定義されたときに一度だけpythonによって解析されることに注意する必要があります。したがって、

i =5

def f(arg=i):
 print arg

i =6f()

このコードの出力は6ではなく5である必要があります。これは、関数の定義時にiが解析されるため、この時点ではi = 5です。

**重要な警告:**デフォルト値は1回だけ解析されます。デフォルトのパラメータが可変オブジェクトの場合、リスト、辞書、クラスオブジェクトなどの影響は比較的大きくなります。以下に示す関数は、パラメーターを累積し、後続の関数呼び出しに渡します。

def f(a, L=[]):
 L.append(a)return L

print f(1)
print f(2)
print f(3)

このコードは出力します

[1][1,2][1,2,3]

後続の関数呼び出しでデフォルトのパラメーターを共有したくない場合は、この形式で関数を記述できます。

def f(a, L=None):if L is None:
  L =[]
 L.append(a)return L

このコードは出力します

[1][2][3]

位置パラメータ* args

位置パラメーターは、パラメーターの前にアスタリスクを追加する必要があります。パラメータを変数argsとしてタプルに収集します。位置パラメータと呼ばれる理由は、各パラメータを順番に受け取るためです。

def argTest(arg1,*args):
 print arg1
 print('~start to print *args~')for x in args:
  print x,argTest(1,'two',3)

このコードは出力します

1~ start to print *args~
two 3

argsは、複数の変数を含むタプルとして解釈されます。したがって、次のように書くこともできます。

def argTest(arg1,*args):
 print arg1
 print('~start to print *args~')for x in args:
  print x,

# argTest(1,'two',3)
args=['two',3]argTest(1,*args)

キーワードパラメータ** kwargs

関数は、 kwarg = valueの形式のキーワード引数を使用して呼び出すこともできます。キーワードパラメータには、2つのアスタリスクを前に付ける必要があります。その機能は、パラメーターの名前と値を含むパラメーターを辞書タイプに収集することです。

def argTest(arg1,**kwargs):
 print 'arg1',arg1
 for key in kwargs:
  print key,kwargs[key]argTest(1,arg2='aa',arg3='bb')argTest(arg1=1,arg2='aa',arg3='bb',arg4='cc')
arg={'arg2':'bb','arg3':'cc','arg4':'dd'}argTest(arg1='ss',**arg)argTest(arg1='ss',**arg)

このコードは出力します

arg1 1
arg2 aa
arg3 bb
arg1 1
arg2 aa
arg3 bb
arg4 cc
arg1 ss
arg2 bb
arg3 cc
arg4 dd
arg1 ss
arg2 bb
arg3 cc
arg4 dd

参考文献##

[ Python公式ウェブサイト-defining-functions](https://docs.python.org/2/tutorial/controlflow.html#defining-functions)

Passing arguments to Python functions1.pdf

[ Pythonの* argsと** argsの違い](http://bbs.chinaunix.net/thread-3572865-1-1.html)

Recommended Posts

Python関数の定義とパラメーターの説明
Python関数パラメータ分類の原理の詳細な説明
pythonコマンドの-uパラメーターの詳細な説明
Python and Go
Python enumerate()関数
Python関数バッファー
Pythonの内省と考察
Pythonカスタム関数の基本
Pythonの結合関数
Python組み込み関数-compile()
[python] ubuntuの下のpython2とpython3
Python関数の基礎学習
Pythonデータ分析-関数の適用
Python3組み込み関数table.md
Pythonの分解とパッケージ化
Python3の構成とentry.md
Pythonプリントプリントタイマー機能
Pythonは関数メソッドを定義します
Pythonの自動操作とメンテナンス2
Pythonの紹介と環境のインストール
Pythonの上位関数の使用法の概要!
Pythonはクローラーとアンチクローラーを知っています
Pythonはオンライン翻訳機能を実現します
centos7はpython3とipythonをインストールします
ubuntu18.04python3.8をコンパイルしてインストールします
Centos6.10はpythonとyumを再インストールします
Pythonオープン読み取りおよび書き込み
CentOS7はpython3とpip3をインストールします
Pythonトルネードアップロードファイル機能
Pythonの自動操作とメンテナンス1
Pythonのデータ構造とアルゴリズム
Pythonマジック関数eval()学習
Pythonマルチプロセスおよびマルチスレッドの基本
PythonがFTP機能を実装する方法
CentOS6.9はpythonをコンパイルしてインストールします
CentOS6はpython3をコンパイルしてインストールします
パラメータを渡すPythonメソッド
Pythonのジェネレーターとイテレーター
Pythonは画像スティッチング機能を実装しています
Pythonの上位関数の使用法の概要!