20Python機能
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
アプリケーションの機能モジュールが向上し、コードの再利用することができます。あなたはすでにPythonが提供していることを知っている多くのビルトインな印刷などの機能、()。しかし、あなたはまた、ユーザー定義関数と呼ばれ、独自の関数を作成することができます。
20.1関数を定義します
あなたは、自分で次の簡単なルールを所望の機能の関数を定義することができます
コードの機能ブロックをDEFキーワード括弧で関数名と識別子に続いて始まります()。
着信パラメータ及び引数は括弧の中央に配置されなければなりません。括弧の間でパラメータを定義するために使用することができます。
最初の文機能は、選択的に説明文字列を使用することができます-機能命令を格納するため。
機能の内容は、コロンとインデントで始まります。
return[数]エンド機能は、選択的に呼び出し元に値を返します。リターンなしと同等の表現せずに戻ります。
文法
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
実施例
以下は、単純なPythonの関数であり、それは標準のディスプレイに印刷装置のパラメータとしての文字列を通過します。
# -*- coding: UTF-8 -*-
def printme(str):
"打印传入的字符串到标准显示设备上"
print(str)
return
printme("hello world")
結果:
hello world
20.2パラメータ渡すパラメータ
Pythonでは、オブジェクト型は、変数のないタイプが存在しない、次のとおりです。
a = [1,2,3]
a = “Runoob”
上記、[1,2,3]タイプがリストされ、「Runoob」はString型である、変数の型ではない、彼女は単にオブジェクト参照(ポインタ)であり、オブジェクトの種類が一覧表示することができ、また点であってもよいです文字列型のオブジェクト。
変更可能(可変)と変更することはできません(不変)オブジェクト
Pythonで、文字列、タプル、および数字は不変オブジェクトであり、リスト、他のオブジェクトを変更することができるのdict。
不変タイプ:= 5変数の割り当て割り当て、次に= 10は、ここで、INTを生成することにポイントをさせ、そして5が削除され、代わりの値を変更するための新しいオブジェクト10の実際の値は、新たに等価ですA。
変数の型:変数の割り当てラ= [1,2,3,4]ラ割り当て値を変更するための第三の要素[2] = 5自体にLAが移動しなかったリストLA、その内部の一部のみを吸引した後にこれは修正されます。
Pythonのパラメータ伝達関数:
不変:類似度値は、整数、文字列、タプルとして、C ++を渡します。値ファン(A)は、被験者自身の唯一の伝達は影響を及ぼしません。例えば、ファン()修飾の内部値が、他の変更は、それ自体には影響を与えない、オブジェクトを複製しました。
変数タイプ:Cと同様に++、リスト、辞書のように、参照によって渡されます。楽しい(ラ)としては、過去のラ・パスが本当にある、ラ・外改訂の楽しみにも影響を与えること。
Pythonですべてが対象で、我々は参照によって渡された転送の値の厳密な意味を言うことはできませんが、我々は不変オブジェクトを渡すと、変数のオブジェクトを渡すと言うものとします。
Pythonの質量不変オブジェクト・インスタンス
# -*- coding: UTF-8 -*-
def ChangeInt(a):
a = 10
b = 2
ChangeInt(b)
print(b) #结果是2
結果:
2
インスタンスChangeInt関数に渡されたときに、INTは、新しい、同じintオブジェクト、= 10に変数bをコピーした伝統的な価値観の方法、及びB点によって、その変数Bを指し、2がオブジェクトint型の値オブジェクト10を生成し、それにポイントをしましょう。
20.3オブジェクトインスタンス変数送信
# -*- 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]
20.4パラメータ
以下は、関数を呼び出すときに、正式なパラメータの型を使用することができます:
必須パラメータ
キーワード引数
デフォルトパラメータ
可変長パラメータ
20.4.1重要なパラメータ
必要なパラメータは、正しい順序で関数に渡されます。呼の数と同じにするときに宣言しなければならないとき。
コールプリントミー()関数は、パラメータを渡す必要があります、または構文エラーは以下となります。
- -コーディング:UTF-8 - -
書き込み機能説明
def printme(str):
"打印传入的字符串到标准显示设备上"
print(str)
return
#调用printme函数
printme()
結果:
Traceback (most recent call last):
File "E:/workspace/python/python/17函数/01_实例1.py", line 10, in <module>
printme()
TypeError: printme() missing 1 required positional argument: 'str'
20.4.2キーワード引数
キーワード引数とパラメータ値で渡されたパラメータを決定するために、キーワードを使用して、関数呼び出しの緊密な関係の関数呼び出し。
キーワードパラメータを使用して可能にするとPythonインタプリタは、パラメータ名とパラメータ値を一致させるための関数呼び出し文の秩序パラメータは、矛盾しています。
次の例では、()関数を呼び出してプリントミーパラメータ名を使用しています。
# -*- coding: UTF-8 -*-
#可写函数说明
def printme(str):
"打印任何传入的字符串"
print(str)
return ;
#调用printme函数
printme(str = "My string")
結果:
My string
キーワードは次の例を注文することができ、より明確に重要なショーではありません
# -*- coding: UTF-8 -*-
#可写函数说明
def printinfo(name,age):
"打印任何传入的字符串"
print("Name:",name)
print("Age",age)
return
#调用printinfo函数
printinfo(age=50,name="miki")
結果:
Name: miki
Age 50
20.4.3デフォルトパラメータ
着信パラメータがデフォルトと見なされていない場合、関数は、デフォルト値、と呼ばれています。通常の印刷の下にデフォルトの年齢は、年齢が渡されない場合:
# -*- coding: UTF-8 -*-
#可写函数说明
def printinfo(name,age = 35):
"打印任何传入的字符串"
print("Name:",name)
print("Age ",age)
return
#调用printinfo函数
printinfo(age=50,name="mike")
print("---------------------")
printinfo(name="toto")
実行結果:
Name: mike
Age 50
---------------------
Name: toto
Age 35
20.4.4可変長パラメータ
あなたは、元の文よりも多くのパラメータを扱うことができる機能が必要な場合があります。これらのパラメータは、宣言を命名しない、可変長パラメータ、および異なる2種類のパラメータと呼ばれます。
基本的なセマンティックは次のとおりです。
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
プラス、アスタリスク(*)は、すべての変数の無名のパラメータの変数名に格納されます。可変長パラメータの例として次のように
# -*- 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
20.5無名関数
Pythonは匿名関数を作成するために、ラムダを使用しています。
lambdaだけで表現、関数本体DEFよりもはるかに簡単です。
lambda対象ではなく、コードブロックの発現です。私たちは、ラムダ式に限定されたロジックをパッケージ化することができます。
lambda機能は、独自の名前空間を持ち、独自の引数リストやグローバル名前空間パラメータの外にアクセスすることはできません。
ラムダ関数のルックスは、単一の行を書きますが、作業効率を高めるために小さな関数を呼び出すときに目的がスタックメモリを占有していないCまたはC ++インライン関数に相当することはできませんが。
構文
は次のようラムダ関数の構文は、唯一のステートメントが含まれています。
lambda [arg1 [,arg2,.....argn]]:expression
例を以下に示します。
# -*- coding: UTF-8 -*-
#可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("相加后的值为:",sum(10,20))
print("相加后的值为:",sum(20,20))
上記の出力の例:
相加后的值为: 30
相加后的值为: 40
20.6return声明
機能を終了するreturn文[式]は、発信者への選択式を返します。return文は、パラメータなしで返すことはできません。以前の例では、以下の例を値を返す方法を示していません。
# -*- coding: UTF-8 -*-
#可写函数说明
def sum(arg1,arg2):
#返回2个参数的和
total = arg1 + arg2
print("函数内:",total)
return total
#钓鱼用sum函数
total = sum(10,20)
print(total)
:上記の出力
函数内: 30
30
20.7変数のスコープ
プログラムのすべての変数は、任意の位置の缶のアクセスではありません。アクセスは、変数が割り当てられている場所によって異なります。
変数のスコープは、あなたがアクセス可能で、特定の変数名プログラムの一部を決定します。などの2つの基本的な変数のスコープは、次のとおりです。
グローバル変数
ローカル変数を
20.8変数のスコープ
これは、ローカルスコープを有するものとして定義され、関数の外に定義された変数の関数内のグローバルスコープを有します。
ローカル変数は、そのアクセス関数内で宣言することができ、プログラム全体の範囲内でグローバル変数にアクセスすることができます。関数を呼び出すときに、関数名の中に宣言されたすべての変数がスコープに追加されます。例を以下に示します。
# -*- 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