Pythonの基本入門チュート...login
Pythonの基本入門チュートリアル
著者:php.cn  更新時間:2022-04-18 16:14:50

Python 関数


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

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


関数を定義する

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

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

  • 受信パラメータと独立変数は括弧の間に置く必要があります。パラメータは括弧内で定義できます。

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

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

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


構文

def functionname(parameters):
"function_docstring"
function_suite
return [expression]

デフォルトでは、パラメータ値とパラメータ名は関数宣言で定義されている順序と一致します。

以下は、文字列を入力パラメータとして受け取り、それを標準の表示デバイスに出力する単純な Python 関数です。

def printme(str):
"受信文字列を標準表示デバイスに出力"
print str
return

関数呼び出し

関数を定義し、関数に名前を付けて関数を指定するだけです パラメーターが含まれています、およびコードブロック構造。

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

次の例では、 printme() 関数を呼び出します:

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

# Define function
def printme(str):
" Print 任意の受信文字列 "
print str;
return;

# Call function
printme("ユーザー定義関数を呼び出したい!");
printme("同じ関数を再度呼び出します");

上記例 出力結果:

ユーザー定義関数を呼び出したい!
同じ関数をもう一度呼び出す

パラメーターの値渡しとパラメーターの参照渡し

Python ではすべてのパラメーター (独立変数) が参照渡しされます。関数内のパラメータを変更すると、この関数を呼び出す関数内の元のパラメータも変更されます。例:

#!/usr/bin/python
# -*- コーディング: 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]]

パラメータ

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

  • 必須パラメータ

  • キーワードパラメータ

  • デフォルトパラメータ

  • 可変長パラメータ

必須パラメータ

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

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

#!/usr/bin/python
# -*- コーディング: UTF-8 -*-

#書き込み可能な関数の説明
def printme(str):
"Print any incoming string"
print str;
return;

#printme 関数を呼び出す
printme();
上記の例の出力結果:

トレースバック (最新の呼び出しは最後):
ファイル "test.py"、11 行目、<module> 内
printme();
TypeError: printme() は引数を 1 つだけ受け取ります (0 が指定されました)

キーワード パラメーター

キーワード パラメーターは関数呼び出しと密接に関連しています。関数呼び出しでは、キーワード パラメーターを使用して、渡されるパラメーター値を決定します。

キーワード引数を使用すると、Python インタープリターがパラメーター名とパラメーター値を照合できるため、宣言時とは異なる順序で関数を呼び出すことができます。

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

#!/usr/bin/python
# -*- コーディング: UTF-8 -*-

#書き込み可能な関数の説明
def printme( str ):
"任意の受信文字列を印刷"
print str;
return;

#printme 関数を呼び出す
printme(str = "My string");

上記の例の出力結果:

My string

次の例は、キーワードパラメータの順序が重要ではないことをより明確に示しています:

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

#Writable function description
def printinfo(name, age):
"受信文字列を印刷します"
print "Name: ", name;
print "Age ", age;
return;

#printinfo 関数を呼び出す
printinfo( age=50 , name="miki" );

上記の例の出力結果:

Name: miki
Age 50

Defaultparameters

関数呼び出し時、デフォルトパラメータの値が渡されていない場合、それがデフォルト値とみなされます。次の例では、年齢が渡されなかった場合、デフォルトの年齢が出力されます:

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

#Writable function description
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_docstring"
function_suite
return [expression]

アスタリスク (*) の付いた変数名には、名前のない変数パラメーターがすべて保存されます。これ以上パラメータを渡さないことも選択できます。次の例:

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

# 書き込み可能な関数の説明
def printinfo(arg1, *vartuple):
"受信パラメータを出力する"
print " 出力: "
print arg1
for var in vartuple:
print var
return;

# Call printinfo 関数
printinfo( 10 );
printinfo( 70, 60, 50 );

以上 例出力結果:

出力:
10
出力:
70
60
50

匿名関数

python はラムダを使用して匿名関数を作成します。

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

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

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

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

文法

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

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);
print "関数外: ", total

上記例の出力結果:

関数内: 30
関数外: 30

変数スコープ

プログラムのすべての変数が含まれているわけではありません どこからでもアクセスできます

変数が割り当てられている場所によってアクセス許可が異なります。