day11教室要約関数スコープ

VARARG

可変引数は:関数呼び出しを参照して、渡されるパラメータの数は固定されなくてもよいです

*パラメータ(パラメータ名)

余分な引数の位置を受信*のArgs(大会)、受信タプル

def f1(*a) # 调用函数时,有多少个参数,我就接收多少个参数
    print(a)
    
f1() # () # a是空元组
f1(1)   # (1,)
f1(1,2)
f1(1,2,3,4,5,6,7,6,6,)
f1(b=1) #报错
def f1(*abc,b):
    print(abc,b)

f1(b=1) # () 1

**形参

** kwargsから、余分なキーワード引数辞書を受けます

def f1(**kwargs):
    print(kwargs)
    
    
f1() # 空字典
f1(x=1) # {'x':1}
def f1(*args,**kwargs):
    print('args:',args)
    print('kwargs:'kwagrs)
    
    
f1(11,1,12,2,x=1,y=2,z=3) 
# agrgs:(11,1,12,2)
# kwargs:('x':1,'y':2,'z':3)
def f1(a,b,c,*args,**kwargs):
    print('args:',args)
    print('kwargs:'kwagrs)
    
    
f1(11,1,12,2,x=1,y=2,z=3) 
# agrgs:(2,)
# kwargs:('x':1,'y':2,'z':3)

その受信している覚えている余分な値を

*引数

def f1(a,b,c,d,e,f,g):
    print(a,b,c,d,e,f,g)

lt = [1,2,3,4,5,6,7]
#f1(lt[0],t[1],t[2],t[3],t[4],t[5],t[6]) 换成 f1(*lt)
f1(*lt) # *lt把列表中的元素打散成位置实参一次传给位置形参

# 1 2 3 4 5 6 7

**引数

def f1(*args,**kwargs):
    print('args',args)
    print('kwargs',kwargs)
    
# def f1(x,y):  报错   

dic = {'a':1,'b':2} # a=1,b=2
f1(**dic)   # **dic把字典打散成关键字实参然后传给函数f1
 # args()
 # kwargs{'a':1,'b':2}

Functionオブジェクト

Pythonオブジェクト内のすべて

s = 's1'
lt = ['skdjf']

機能、すなわちデータ処理機能として使用することができ、ファーストクラスのオブジェクトであります

def func():
    print()
    
    
print(func)

<0x10af72f28で関数func>

まず、4つの関数の関数オブジェクト

  1. 引用文
x = 'hello nick'
y = x

f = func
print(f)

<0x10af72f28で関数func>

  1. 関数の引数として
len(x)

def foo(m)
    m()
    
    
foo(func)

FUNCから

  1. 関数の戻り値としてあります。
def foo(x):
    return x

res = foo(func)
print(res)
res()
  1. これは、コンテナ型素子として使用することができます
l = [x]

function_list = [func]
function_list[0]()

FUNCから

運動関数オブジェクト

def pay():
    print('支付1e成功')
    
    
def withdraw():
    print('提现2e成功')
    
    
dic = {
    '1':pay,
    '2':withdraw,
}
while True:
    msg = '''
    '1':支付,
    '2':提现,
    '3':退出,
    '''
    print(msg)
    choice = input('选择功能:').strip()
    if choice == '3':
        break
    elif choice in dic :
        dic[choice]()
    

ネストされた関数

ネストされた関数の定義

内部関数定義された関数は、外部関数で定義された関数内で使用することができません。

def f1():
    def f2():
        print('from f2')
    f2()
    
f2() # NameError: name 'f2' is not defined
   
def f1():
    def f2():
        print('from f2')
    f2()
    
    
f1()
        

F2から

ネストされた関数の呼び出し

def max2(x,y):
    if x > y:
        return x
    else:
        return y
    
    
def max4(a,b,c,d):
    res1 = max2(a,b)
    res2 = max2(c,d)
    res = max2(res1,res2)
    return res

print(max4(1,2,3,4))

4

名前空間とスコープ

まず、名前空間

名前空間(ネームスペース):変数を作成するには、実際にメモリに新たなスペースを開いています。

メモリ空間は、メモリに格納された変数名と変数間の関係を結合し、このスペースが呼び出された名前空間

  1. ビルトイン名前空間

ビルトイン名前空間:ストアPyhtonインタプリタ名が付いています、などint、float、len

ライフサイクル:インタプリタを有効にするために始めたとき、インタプリタが閉じているときに、失敗

  1. グローバル・ネームスペース

グローバル・ネームスペース:内部およびローカル名に加えて、残りはグローバルネームスペースに格納されています。

次のコードx、func、l、z

ライフサイクル:ファイルが有効に実行された場合、ファイルの実行後に期限切れ

x = 1


def func():
    pass


l = [1, 2]

if 3 > 2:
    if 4 > 3:
        z = 3
  1. ローカル名前空間

ローカル名前空間:ファンクション・コールの間に生成記憶する機能本体の名称、例えば次のコードとしてf2

ライフサイクル:ファイルが実行されると、関数呼び出しの際に有効になる機能の実行後に期限切れ

def f1():
    def f2():
        print('from f2')
    f2()

f1() 
  1. ロード順

    内蔵 - 「グローバル - 」ローカル

  2. 順序を探します

    現在 - 「グローバル - 」内蔵

x = 1
y = 2
len = 100


def func():
    y = 3
    len = 1000
    print(f"y: {y}")
    print(f"len: {len}")
    # print(a)  # NameError: name 'a' is not defined


func()

S:3
のみ:1000

第二に、スコープ

ドメインは、すなわち作用領域範囲領域を指します。

  1. グローバルスコープ

グローバルスコープ:グローバル・効果的な、世界的な生存、および組み込みの名前空間のグローバルネームスペース。

# 全局作用域
x = 1


def bar():
    print(x)


bar()
  1. ローカルスコープ

ローカルスコープ:部分的に有効な、一時的な記憶、唯一のローカルな名前空間を含みます。

# 局部作用域
def f1():
    def f2():
        def f3():
            print(x)
        x = 2
        f3()
    f2()


f1()
  1. 注意点

なお:関数定義ステージ固定金型との間の関係の範囲に関係なく、関数の呼ばれました。

# 作用域注意点
x = 1


def f1():  # 定义阶段x=1
    print(x)


def f2():
    x = 2
    f1()


f2()

1

  1. グローバルキーワード

グローバルスコープ内の変数を変更します。

x = 1


def f1():
    x = 2

    def f2():
        #         global x  # 修改全局 输出 3
        x = 3
    f2()


f1()
print(x)

1

  1. ローカル以外のキーワード

変数にローカルスコープを変更します。

x = 1


def f1():
    x = 2

    def f2():
        #         nonlocal x 输出 3
        x = 3

    f2()
    print(x)


f1()

おすすめ

転載: www.cnblogs.com/shin09/p/11564341.html