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つの関数の関数オブジェクト
- 引用文
x = 'hello nick'
y = x
f = func
print(f)
<0x10af72f28で関数func>
- 関数の引数として
len(x)
def foo(m)
m()
foo(func)
FUNCから
- 関数の戻り値としてあります。
def foo(x):
return x
res = foo(func)
print(res)
res()
- これは、コンテナ型素子として使用することができます
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
名前空間とスコープ
まず、名前空間
名前空間(ネームスペース):変数を作成するには、実際にメモリに新たなスペースを開いています。
メモリ空間は、メモリに格納された変数名と変数間の関係を結合し、このスペースが呼び出された名前空間。
- ビルトイン名前空間
ビルトイン名前空間:ストアPyhtonインタプリタ名が付いています、などint、float、len
ライフサイクル:インタプリタを有効にするために始めたとき、インタプリタが閉じているときに、失敗
- グローバル・ネームスペース
グローバル・ネームスペース:内部およびローカル名に加えて、残りはグローバルネームスペースに格納されています。
次のコードx、func、l、z
ライフサイクル:ファイルが有効に実行された場合、ファイルの実行後に期限切れ
x = 1
def func():
pass
l = [1, 2]
if 3 > 2:
if 4 > 3:
z = 3
- ローカル名前空間
ローカル名前空間:ファンクション・コールの間に生成記憶する機能本体の名称、例えば次のコードとしてf2
ライフサイクル:ファイルが実行されると、関数呼び出しの際に有効になる機能の実行後に期限切れ
def f1():
def f2():
print('from f2')
f2()
f1()
ロード順
内蔵 - 「グローバル - 」ローカル
順序を探します
現在 - 「グローバル - 」内蔵
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
第二に、スコープ
ドメインは、すなわち作用領域範囲領域を指します。
- グローバルスコープ
グローバルスコープ:グローバル・効果的な、世界的な生存、および組み込みの名前空間のグローバルネームスペース。
# 全局作用域
x = 1
def bar():
print(x)
bar()
- ローカルスコープ
ローカルスコープ:部分的に有効な、一時的な記憶、唯一のローカルな名前空間を含みます。
# 局部作用域
def f1():
def f2():
def f3():
print(x)
x = 2
f3()
f2()
f1()
- 注意点
なお:関数定義ステージ固定金型との間の関係の範囲に関係なく、関数の呼ばれました。
# 作用域注意点
x = 1
def f1(): # 定义阶段x=1
print(x)
def f2():
x = 2
f1()
f2()
1
- グローバルキーワード
グローバルスコープ内の変数を変更します。
x = 1
def f1():
x = 2
def f2():
# global x # 修改全局 输出 3
x = 3
f2()
f1()
print(x)
1
- ローカル以外のキーワード
変数にローカルスコープを変更します。
x = 1
def f1():
x = 2
def f2():
# nonlocal x 输出 3
x = 3
f2()
print(x)
f1()