python3機能
機能は、単一のコードセグメント、または関連した機能を実現するために使用される再利用可能な良好な組織です。
機能は、モジュールを改善し、コードを再利用するために適用することができます。 あなたはすでにPythonが、このような()は、印刷などの多くの組み込み関数を、提供することを知っています。 しかし、あなたはまた、ユーザー定義関数と呼ばれる独自の関数を作成することができます。
関数を定義します
あなたが欲しい機能は、次の簡単なルールから関数を定義することができます。
- 括弧内の関数名と識別子が続く初めに、機能ブロックdefキーワード、()。
- 着信パラメータ及び引数は中央に括弧内に配置する必要があり、括弧の間にパラメータを定義するために使用することができます。
- functionステートメントの最初の行は、必要に応じて、文字列の文書を使用することができます - 関数の説明のために使用されています。
- コロンとインデントで始まる関数の内容。
- 呼び出し元に値を戻し、必要に応じて、機能の[式]終了を返します 。 Noneを返すための発現同等ずに戻ります。
文法
次のようにdefキーワードを使ってPython定義関数は、一般的な形式は次のとおりです。
def 函数名(参数列表): 函数体
デフォルトでは、パラメータ名およびパラメータ値は、宣言が最大一致関数で定義されているためです。
例
出力に関数を使用してみましょうに "Hello World!"を:
>>> def hello() : print("Hello World!") >>> hello() Hello World! >>>
より複雑なポイントのアプリケーション、機能パラメータ変数をもたらすために:
#!/usr/bin/python3 # 计算面积函数 def area(width, height): return width * height def print_welcome(name): print("Welcome", name) print_welcome("w3big") w = 4 h = 5 print("width =", w, " height =", h, " area =", area(w, h))
上記の出力の例:
Welcome w3big width = 4 height = 5 area = 20
関数呼び出し
、関数に名前を与えるために機能が含まれているのパラメータを指定して、コードブロック構造:関数を定義します。
この機能の基本的な構造が完了した後、あなたはPythonのコマンド・プロンプトから直接実行する別の関数呼び出しを行うことができます。
以下の実施例は、プリントミー()関数と呼ばれています。
#!/usr/bin/python3 # 定义函数 def printme( str ): "打印任何传入的字符串" print (str); return; # 调用函数 printme("我要调用用户自定义函数!"); printme("再次调用同一函数");
上記の出力の例:
我要调用用户自定义函数! 再次调用同一函数
参照によって値およびパス・パラメータによって渡されたパラメータ
Pythonでは、すべてのパラメータ(変数)は、参照によって渡されます。 あなたが関数のパラメータを変更する場合は、この関数が呼び出される関数は、元のパラメータも変更されます。 例えば:
#!/usr/bin/python3 # 可写函数说明 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/python3 #可写函数说明 def printme( str ): "打印任何传入的字符串" print (str); return; #调用printme函数 printme();
上記の出力の例:
Traceback (most recent call last): File "test.py", line 10, in <module> printme(); TypeError: printme() missing 1 required positional argument: 'str'
キーワード引数
キーワード引数と関数は、渡されたパラメータの値を決定するためにキーワード引数を使用して、密接な関係の関数呼び出しを呼び出します。
キーワードパラメータを使用する場合は、パラメータ名を使用してパラメータ値を一致させるPythonインタプリタが可能なため、関数呼び出しのためのパラメータは、ステートメントと矛盾することができます。
次の例では関数プリントミー()は、パラメータ名で呼ばれています。
#!/usr/bin/python3 #可写函数说明 def printme( str ): "打印任何传入的字符串" print (str); return; #调用printme函数 printme( str = "本教程");
上記の出力の例:
本教程
次の例では、指定された順序を使用する必要はありません関数のパラメータの使用方法を示しています。
#!/usr/bin/python3 #可写函数说明 def printinfo( name, age ): "打印任何传入的字符串" print ("名字: ", name); print ("年龄: ", age); return; #调用printinfo函数 printinfo( age=50, name="w3big" );
上記の出力の例:
名字: w3big 年龄: 50
デフォルトパラメータ
関数が呼び出されたときにパラメータが渡されない場合、それはデフォルトのパラメータを使用します。 次の例では、着信年齢パラメータの場合、デフォルト値:
#!/usr/bin/python3 #可写函数说明 def printinfo( name, age = 35 ): "打印任何传入的字符串" print ("名字: ", name); print ("年龄: ", age); return; #调用printinfo函数 printinfo( age=50, name="w3big" ); print ("------------------------") printinfo( name="w3big" );
上記の出力の例:
名字: w3big 年龄: 50 ------------------------ 名字: w3big 年龄: 35
可変長パラメータ
あなたは、パラメータの元の宣言よりも多くを扱うことができる機能が必要な場合があります。 これらのパラメータは、可変長パラメータと呼ばれ、パラメータの2つのタイプが宣言命名しない、異なっています。 次のように基本的な構文は次のとおりです。
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
アスタリスク(*)で変数名のすべての名前の変数パラメータに格納されます。 関数が呼び出される引数なしならば、それは空のタプルです。 私たちは、関数に名前の変数を渡すことはできません。 以下の例:
#!/usr/bin/python3 # 可写函数说明 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/python3 # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2; # 调用sum函数 print ("相加后的值为 : ", sum( 10, 20 )) print ("相加后的值为 : ", sum( 20, 20 ))
上記の出力の例:
相加后的值为 : 30 相加后的值为 : 40
return文
返す[式]ステートメントが選択呼び出し元に式を返し、関数を終了するために使用されます。パラメータなしのreturn文は、Noneを返します。 いいえ前の例では値を返す方法を示していない、次の例では、return文の使用方法を示しています。
#!/usr/bin/python3 # 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print ("函数内 : ", total) return total; # 调用sum函数 total = sum( 10, 20 ); print ("函数外 : ", total)
上記の出力の例:
函数内 : 30 函数外 : 30
変数のスコープ
Pyhtonは、変数にはアクセスが変数が割り当てられている場所によって異なり、プログラムがアクセス可能な位置ではありません。
- グローバル変数
- ローカル変数
グローバルとローカル変数
内部変数の関数の定義は、外側の関数で定義されたグローバルな有効範囲を持って、ローカルスコープを持っています。
ローカル変数は、プロシージャのみを通じてアクセスすることができ、グローバル変数へのアクセスの関数内で宣言することができます。 関数を呼び出すとき、関数宣言内のすべての変数名は、スコープに追加されます。 以下の例:
#!/usr/bin/python3 total = 0; # 这是一个全局变量 # 可写函数说明 def sum( arg1, arg2 ): #返回2个参数的和." total = arg1 + arg2; # total在这里是局部变量. print ("函数内是局部变量 : ", total) return total; #调用sum函数 sum( 10, 20 ); print ("函数外是全局变量 : ", total)
上記の出力の例:
函数内是局部变量 : 30 函数外是全局变量 : 0