Pythonの関数を使用する方法

組織機能が良い、再利用可能であり、コードセグメントは、単一の、または関連する機能を実装するために使用されます。
アプリケーションの機能モジュールが向上し、コードの再利用することができます。あなたはすでにPythonが提供していることを知っている多くのビルトインな印刷などの機能、()。しかし、あなたはまた、ユーザー定義関数と呼ばれ、独自の関数を作成することができます。
機能を定義し
、あなたが自分自身で所望の機能の関数を定義することができますが、以下のルールは単純です:
デフキーワード)(括弧内の関数名と識別子が続くと機能コードブロックが開始されます。
すべての受信パラメータと引数は括弧の中央に配置する必要があります。括弧の間でパラメータを定義するために使用することができます。
最初の文関数は、選択的に説明文字列を使用することができます-機能命令を格納するため。
機能の内容コロン、およびインデントを開始します。
リターン[式]エンド機能は、選択的に呼び出し元に値を返します。リターンなしと同等の表現せずに戻ります。

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

デフォルトでは、パラメータ名とパラメータ値が一緒に関数宣言を一致させるために定義されています。
実施例
以下に、文字列パラメータがそれを通過し、次いで、標準的な表示装置上に印刷するように、Pythonの単純な関数です。

def printme( str ):
   "打印传入的字符串到标准显示设备上"
   print str
   return

関数呼び出し
のみ与えられた名前の関数としての機能を定義するには、関数を指定するパラメータ、及び符号ブロック構造を含みます。
この機能の基本的な構造が完了した後、あなたは別によって実行される機能を呼び出すことができ、Pythonのプロンプトから直接実行することができます。
次の例プリントミーの()関数の呼び出し:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def printme( str ):
   "打印任何传入的字符串"
   print str
   return

# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")

上記の出力の例:

我要调用用户自定义函数!
再次调用同一函数

渡されたパラメータ
のpythonには、オブジェクトタイプに属し、変数の型がありません:

a=[1,2,3]

a="Runoob"

上記、[1,2,3]タイプがリストされ、「Runoob」はString型である、変数の型ではない、彼女は単にオブジェクト参照(ポインタ)であり、オブジェクトの種類が一覧表示することができ、また点であってもよいです文字列型のオブジェクト。
変更可能(可変)と変更することはできません(不変)オブジェクト
Pythonで、文字列、タプル、および数字は不変オブジェクトであり、リスト、他のオブジェクトを変更することができるのdict。
不変タイプ:intは実際に新しい値オブジェクト10が生成され、ポイントは、それが廃棄させて、図5に示すように、代わりの値を変化させる、新たに等価であり、その後= 5変数の割り当て割り当て= 10、 。
変数型:変数の割り当てラ= [1,2,3,4]ラ割り当て値を変更するための第三の要素[2] = 5はリストLA、それ自体LAが移動しなかった、その内部の値の一部のみを吸引した後にこれは修正されます。
Pythonのパラメータ伝達関数:
不変:類似度値通過C ++、例えば整数、文字列、タプルとして。値ファン(A)は、被験者自身の唯一の伝達は影響を及ぼしません。そのような改変(a)の楽しみの内部値が、他にコピーされたオブジェクトを変更し、それ自体には影響を与えません。
変数の種類:Cと同様に++、リスト、辞書のように、参照によって渡されます。楽しい(ラ)としては、過去にラ本当のパスを吸引し、ラ・外改訂の楽しみにも影響を与えることが
すべてのものは、厳密な意味では、我々が参照または値転送で渡さ言うことはできませんが、我々は不変オブジェクトを渡すと言うべきで、Pythonでオブジェクトであります変数オブジェクトを渡します。
Pythonの質量不変オブジェクト・インスタンス

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def ChangeInt( a ):
    a = 10

b = 2
ChangeInt(b)
print b # 结果是 2

インスタンスChangeInt関数に渡されたときに、INTは、新しい、同じintオブジェクト、= 10に変数bをコピーした伝統的な価値観の方法、及びB点によって、その変数Bを指し、2がオブジェクトint型の値オブジェクト10を生成し、それにポイントをしましょう。
オブジェクトインスタンス変数伝送

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print "函数内取值: ", mylist
   return

# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print "函数外取值: ", mylist

求心性機能の例と次のように出力結果であるので、同じを参照して、オブジェクトの最後に新しいコンテンツを追加します。

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

パラメータ
以下は、関数を呼び出す際に、正式なパラメータの型を使用することができます:
基本的なパラメータの
キーワード引数の
ためのデフォルトパラメータ
可変長パラメータ
必要なパラメータ
必要なパラメータが正しい順序で関数に渡されます。呼の数と同じにするときに宣言しなければならないとき。
コールプリントミー()関数は、パラメータを渡す必要があります、または構文エラーは以下となります。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print str
   return

#调用printme函数
printme()

上記の出力の例:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    printme()
TypeError: printme() takes exactly 1 argument (0 given)

キーワード引数
パラメータ値で渡されたパラメータを決定するためのキーワードを使ってキーワード引数と関数呼び出しに密接な関係の関数呼び出し。
キーワードパラメータを使用して可能にするとPythonインタプリタは、パラメータ名とパラメータ値を一致させるための関数呼び出し文の秩序パラメータは、矛盾しています。
次の例では、()関数を呼び出してプリントミーパラメータ名を使用しています。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print str
   return

#调用printme函数
printme( str = "My string")

上記の出力の例:

My string

パラメータの順序をキー入力することができ、次の例では、より明確ではない重要なショーです。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print "Name: ", name
   print "Age ", age
   return

#调用printinfo函数
printinfo( age=50, name="miki" )

上記の出力の例:

Name:  miki
Age  50

デフォルトパラメータ
パラメータが渡されていない場合、この関数はデフォルトとみなされ、デフォルト値、と呼ばれています。通常の印刷の下にデフォルトの年齢は、年齢が渡されない場合:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print "Name: ", name
   print "Age ", age
   return

#调用printinfo函数
printinfo( age=50, name="miki" )
printinfo( name="miki" )

上記の出力の例:

Name:  miki
Age  50
Name:  miki
Age  35

可変長パラメータは、
あなたは、元の文よりも多くのパラメータを扱うことができる機能が必要になる場合があります。これらのパラメータは、宣言を命名しない、可変長パラメータ、および異なる2種類のパラメータと呼ばれます。次のように基本的な構文は次のとおりです。

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

プラス、アスタリスク(*)は、すべての変数の無名のパラメータの変数名に格納されます。可変長パラメータの例として次のように

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print "输出: "
   print arg1
   for var in vartuple:
      print var
   return

# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )

上記の出力の例:

输出:
10
输出:
70
60
50

無名関数
無名関数を作成するために、ラムダを使用してのpython。
ただ、ラムダ式、関数本体はDEFよりもはるかに簡単です。
ラムダ式は、代わりにコードブロックの本体です。私たちは、ラムダ式に限定されたロジックをパッケージ化することができます。
ラムダ関数は、独自の名前空間を持ち、独自の引数リストやグローバル名前空間のパラメータの外側にアクセスすることはできません。
ラムダ関数のルックスは、単一の行を書きますが、作業効率を高めるために小さな関数を呼び出すときに目的がスタックメモリを占有していないCまたはC ++インライン関数に相当することはできませんが。
構文
は次のようラムダ関数の構文は、唯一のステートメントが含まれています。

lambda [arg1 [,arg2,.....argn]]:expression

例を以下に示します。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2

# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )

上記の出力の例:

相加后的值为 :  30
相加后的值为 :  40

return文の
機能を終了するには、return文[式]は、発信者への選択式を返します。無パラメータ値を持つreturn文はNoneを返します。以前の例では、値を返す方法を示していない、次の例では、それを行う方法を紹介します。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print "函数内 : ", total
   return total

# 调用sum函数
total = sum( 10, 20 )

上記の出力の例:

函数内 :  30

変数のスコープ
プログラムのすべての変数は、任意の位置の缶のアクセスではありません。アクセスは、変数が割り当てられている場所によって異なります。
変数のスコープは、あなたがアクセス可能で、特定の変数名プログラムの一部を決定します。次の二つの基本的な変数のスコープ
グローバル変数
ローカル変数
グローバル変数とローカル変数の
関数の外部グローバルスコープを有するものとして定義された関数内のローカルスコープ変数を有するものとして定義されます。
ローカル変数は、そのアクセス関数内で宣言することができ、プログラム全体の範囲内でグローバル変数にアクセスすることができます。関数を呼び出すときに、関数名の中に宣言されたすべての変数がスコープに追加されます。例を以下に示します。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2 # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total

#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total

上記の出力の例:

函数内是局部变量 :  30
函数外是全局变量 :  0

おすすめ

転載: blog.51cto.com/14646124/2463371