pythonノート--役割ドメイン、高次関数、閉パッケージ
アクティブドメイン
pythonで付与される変数の位置が異なり、変数にアクセスできる範囲が制限されている.すなわち、「変数の役割ドメインは、コード内の位置によって決定される」ということである.
1.LEGBルール
2.関数検索変数範囲の優先順位は、「ローカル役割ドメイン」>「ネスト役割ドメイン」>「グローバル役割ドメイン」>「ビルトイン役割ドメイン」です.
簡単な例:
高次関数
関数がパラメータとして伝わる関数が高次関数です.簡単な例:
クローズドパッケージ
ネストされた役割ドメインの変数は、内層関数によって呼び出され、閉包されます.簡単な例を示します.
pythonで付与される変数の位置が異なり、変数にアクセスできる範囲が制限されている.すなわち、「変数の役割ドメインは、コード内の位置によって決定される」ということである.
1.LEGBルール
L(local): , : , , , 。 , 。
E(enclosing): , : , 。 , 。
G(globle): , , 。
B(built-in): , 。
2.関数検索変数範囲の優先順位は、「ローカル役割ドメイン」>「ネスト役割ドメイン」>「グローバル役割ドメイン」>「ビルトイン役割ドメイン」です.
簡単な例:
#-*- coding:utf-8 -*-
a=10 #
def test1():
b=20 #
def test2():
c=30 #
return(b-c)
print(test2())
test1()
高次関数
関数がパラメータとして伝わる関数が高次関数です.簡単な例:
#-*- coding:utf-8 -*-
import sys
def my_print():
print("this is a test!")
def my_confirm(f):
confirm=input(" yes/no:")
if confirm == 'yes':
f()
else:
print(" !")
sys.exit()
my_confirm(my_print)
クローズドパッケージ
ネストされた役割ドメインの変数は、内層関数によって呼び出され、閉包されます.簡単な例を示します.
#-*- coding:utf-8 -*-
def size1():
a=10 #
def inner1():
if a>5:
print("more!")
else:
print("less!")
return inner1 # inner1
size1()()
def size2(a=1): #
def inner2():
if a>5:
print("more!")
else:
print("less!")
return inner2
size2(20)()