Python3の関数


関数は、単一の関数または関連する関数を実装するために使用される、整理された再利用可能なコード セグメントです。

関数は、アプリケーションのモジュール性とコードの再利用を向上させることができます。 Python には print() などの多くの組み込み関数が用意されていることはすでにご存知でしょう。ただし、ユーザー定義関数と呼ばれる独自の関数を作成することもできます。


関数を定義する

必要な機能を使用して関数を定義できます。簡単なルールは次のとおりです:

  • 関数コード ブロックは def キーワードで始まり、その後に関数識別子名と括弧が続きます ()

  • 受信パラメータと独立変数はすべて括弧の間に配置する必要があり、括弧の間のスペースをパラメータの定義に使用できます。

  • 関数の最初の行では、関数の説明を保存するために使用されるドキュメント文字列をオプションで使用できます。

  • 関数の内容はコロンで始まり、インデントされます。

  • return [式] 関数を終了し、必要に応じて呼び出し元に値を返します。式を指定せずに返すことは、None を返すことと同じです。


構文

Pythonはdefキーワードを使用して関数を定義します。一般的な形式は次のとおりです:

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("php")
w = 4
h = 5
print("width =", w, " height =", h, " area =", area(w, h))

上記の例の出力結果:

Welcome php
width = 4  height = 5  area = 20

関数呼び出し

定義 関数: 関数に名前を付け、関数に含まれるパラメーターとコード ブロックの構造を指定します。

この関数の基本構造が完成したら、別の関数呼び出しを通じて、または Python コマンド プロンプトから直接実行できます。

次の例では printme() 関数が呼び出されます:

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

パラメータ

関数を呼び出すときに使用できる仮パラメータのタイプは次のとおりです:

  • 必須パラメータ

  • キーワードパラメータ

  • デフォルトパラメータ

  • 可変長パラメータ

必須パラメータ

必須パラメータは正しい順序で関数に渡す必要があります。コール時の数量は申告時の数量と同じである必要があります。

printme() 関数を呼び出すときは、パラメーターを渡す必要があります。そうしないと、構文エラーが発生します:

#!/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 インタープリターがパラメーター名とパラメーター値を照合できるためです。

次の例では、関数 printme() を呼び出すときにパラメーター名を使用します:

#!/usr/bin/python3
 
#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print (str);
   return;
 
#调用printme函数
printme( str = "php中文网");

上記の例の出力結果:

php中文网

次の例は、指定された順序を使用せずに関数パラメーターを使用する方法を示します:

#!/usr/bin/python3
 
#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print ("名字: ", name);
   print ("年龄: ", age);
   return;
 
#调用printinfo函数
printinfo( age=50, name="php" );

出力結果上記の例:

名字:  php
年龄:  50

デフォルトパラメータ

関数を呼び出すとき、パラメータが渡されない場合、デフォルトパラメータが使用されます。次の例では、age パラメータが渡されない場合、デフォルト値が使用されます:

#!/usr/bin/python3
 
#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name);
   print ("年龄: ", age);
   return;
 
#调用printinfo函数
printinfo( age=50, name="php" );
print ("------------------------")
printinfo( name="php" );

上記の例の出力結果:

名字:  php
年龄:  50
------------------------
名字:  php
年龄:  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 ステートメントを使用しなくなることを意味します。

  • lambda は単なる式であり、関数本体は def よりもはるかに単純です。

  • ラムダの本体はコードブロックではなく式です。ラムダ式にカプセル化できるロジックは限られています。

  • lambda 関数には独自の名前空間があり、独自のパラメーター リストの外やグローバル名前空間内のパラメーターにはアクセスできません。

  • ラムダ関数は一行しか書けないようですが、CやC++のインライン関数と同等ではなく、後者の目的はスタックメモリを占有せずに小さな関数を呼び出して動作効率を高めることです。 。

文法

ラムダ関数の構文には、次のようなステートメントが 1 つだけ含まれています:

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 [expression]ステートメントが使用されている 関数を終了し、オプションで呼び出し元に式を返します。パラメーター値のない 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 では、プログラムの変数。はい、アクセス権限は変数が割り当てられている場所によって異なります。