pythonの関数(ネスト呼び出し、名前空間と役割ドメイン、関数オブジェクト)

12046 ワード

5.36名前付きキーワード
名前付きキーワードパラメータとは?フォーマット:*の後のパラメータはすべて名前付きキーワードパラメータの特徴です:1値を伝達しなければなりません2制約関数の呼び出し者はkey=valueの形式で値を伝達しなければなりません3制約関数の呼び出し者は私たちが指定したkey名を使用しなければなりません
def foo(x,y,*,z):
     print(x,y,z)
 foo(1,2)           # z     
 foo(1,2,3)         # z   key=value     
 foo(1,2,aaa=3)     #    z   
 foo(1,2,z=3)       # 1 2 3

5.4関数ネストコール
関数のネストされた呼び出し:関数内で他の関数が呼び出されます.
def max2(x,y):
     if x > y:
         return x
     else:
         return y
​
 def max3(x,y,z):
     res1=max2(x,y)
     res2=max2(res1,z)
     return res2
​
 print(max3(11,199,2))

5.5関数名空間と役割ドメイン
5.51名称空間
ネームスペース:名前と値のバインド関係を格納する場所
ネームスペースは、次の3つに分類されます.
1内蔵ネームスペース:Pythonインタプリタに付属の名前を保存し、インタプリタの起動時に有効になり、インタプリタが閉じると無効になる
2、グローバルネームスペース:ファイルレベルの名前は、ファイルの実行時に有効になり、ファイルの実行中またはファイルの実行中に削除されると無効になる
x=1
def func():     
    name='egon'
del func
a = 10
def fun():
   print(a)
fun()
print(a)

3、ローカル名空間:関数内に定義された名前(関数のパラメータ及び関数内の名前はすべてローカル名空間に保存)を保存し、関数呼び出し時に一時的に有効になり、関数終了時に無効になる
def fun():   
    a = 10    
    print(a)
fun() 
print(a)    # a      .. 

ロード順序:ビルトインネームスペース----グローバルネームスペース----ローカルネームスペース検索名前:ローカルネームスペース----グローバルネームスペース----ビルトインネームスペース----ビルトインネームスペース
5.52作用域
≪グローバル・役割ドメイン|Global Operation Domain|ldap≫:名前空間とグローバル・ネーム空間を内蔵した名前の特徴:1、任意の場所でアクセスできる2、その範囲内の名前はプログラムのライフサイクル全体を伴う
ローカル役割ドメイン:ローカル名空間の名前の特徴を含む:1、関数内で2、関数を呼び出す時にのみ有効で、呼び出しが終了して失効する
5.6関数オブジェクト
5.61関数オブジェクトの役割
1、参照可能
x=1
 y=x
 def bar():
     print('from bar')
 f=bar
 f()

2、funcはパラメータとしてxに渡すことができる
 def bar(x):
     print(x)
     x()
 bar(func)
 def bar():
     print('from bar')
​
 def wrapper(func): #func=bar
     func() #bar()
​
 wrapper(bar)

3、funcは戻り値としてもよい
def bar(x): # x=func
     return x #return func
 res=bar(func) #res=func
 print(res)
 res()

4、容器タイプの要素として使用できる
def get():
     print('from get')
 def put():
     print('from put')
 l=[get,put]
 l[0]()

5.62関数オブジェクトの適用

def auth():
    print('  。。。。。')
def reigster():
    print('  。。。。。')
def search():
    print('  。。。。')
def transfer():
    print('  。。。。')
def pay():
    print('  。。。。')
​
dic={
    '1':auth,
    '2':reigster,
    '3':search,
    '4':transfer,
    '5':pay
}
def interactive():
    while True:
        print("""
        1   
        2   
        3   
        4   
        5   
        """)
        choice=input('>>: ').strip()
        if choice in dic:
            dic[choice]()
        else:
            print('    ')
​
interactive()

5.7閉包関数
関数の内部に定義された関数で、外部関数の役割ドメインの名前への参照が含まれます.この関数を閉パッケージ関数と呼びます.
閉:関数内部に定義された関数役割ドメイン関係が関数定義段階で規定されて死んだことを指し、呼び出し位置に関係なく
 def outter():
     x=2
     def inner():
         print(x)
     return inner
​
 f=outter()     #f=inner
 f()

5.71が関数体の値伝達の方式である
方法1:値をパラメータとして入力する
import requests
def get(url):
    response=requests.get(url)
    if response.status_code == 200:
        print(response.text)
get('https://www.baidu.com')

方式2:閉パッケージ関数で呼び出す
import requests
import time
def outter(url): #url='https://www.baidu.com'
    def get():
        response=requests.get(url)
        if response.status_code == 200:
            print(response.text)
    return get
baidu=outter('https://www.baidu.com')
baidu()
print('=====================>')
time.sleep(3)
baidu()

転載先:https://www.cnblogs.com/mylu/p/11000436.html