Latest web development tutorials

Python関数

機能は、単一のコードセグメント、または関連した機能を実現するために使用される再利用可能な良好な組織です。

機能は、モジュールを改善し、コードを再利用するために適用することができます。 あなたはすでにPythonが、このような()は、印刷などの多くの組み込み関数を、提供することを知っています。 しかし、あなたはまた、ユーザー定義関数と呼ばれる独自の関数を作成することができます。


関数を定義します

あなたが欲しい機能は、次の簡単なルールから関数を定義することができます。

  • 括弧内の関数名と識別子が続く初めに、機能ブロックdefキーワード、()。
  • すべての受信パラメータと引数が途中で括弧内に配置する必要があります。 括弧の間でパラメータを定義するために使用することができます。
  • functionステートメントの最初の行は、必要に応じて、文字列の文書を使用することができます - 関数の説明のために使用されています。
  • コロンとインデントで始まる関数の内容。
  • 呼び出し元に値を戻し、必要に応じて、機能の[式]終了を返します 。 Noneを返すための発現同等ずに戻ります。

文法

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ですべてのパラメータ(引数)は、参照によって渡されます。 あなたが関数のパラメータを変更する場合は、この関数が呼び出される関数は、元のパラメータも変更されます。 例えば:

#!/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文は、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

変数のスコープ

アクセス可能な位置ではありませんプログラム内のすべての変数。 アクセスは、変数が割り当てられている場所によって異なります。

変数のスコープは、あなたが特定の変数名にアクセスすることができるプログラムのどの部分を決定します。 :以下のような2つの基本的な変数のスコープ

  • グローバル変数
  • ローカル変数

グローバルとローカル変数

内部変数の関数の定義は、外側の関数で定義されたグローバルな有効範囲を持って、ローカルスコープを持っています。

ローカル変数は、プロシージャのみを通じてアクセスすることができ、グローバル変数へのアクセスの関数内で宣言することができます。 関数を呼び出すとき、関数宣言内のすべての変数名は、スコープに追加されます。 以下の例:

#!/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