VARARG
可変引数は:関数呼び出しを参照して、渡されるパラメータの数は固定されなくてもよいです
関数が呼び出され、ないつ以上のパス・モード、1の値は、引数の位置であり、他の引数は、キーワードであるため、オーバーフロー位置引数を受信するために2つの解決策が存在する仮パラメータを有していなければなりません(*)キーワード引数で(**)
*の可変長パラメータ
パラメータスピルオーバ全引数の位置、次いで格納されたタプルは、タプルは、その後に割り当てられるのパラメータ。なお:*引数のパラメータ規則の名前。
def sum_self(*args):
res = 0
for num in args:
res += num
return res
res = sum_self(1, 2, 3, 4)
print(res)
10
第二に、可変長引数*
引数は、あろう位置の引数に分割抽出サイクル後のパラメータの値。引数はいつでもテープに遭遇した後、それは位置引数がすぐに引数を参照位置に分割されなければならないです。
def func(x, y, z, *args):
print(x, y, z, args)
func(1, *(1, 2), 3, 4)
1 1 2 (3, 4)
第三に、可変長パラメータ* *
パラメータ辞書形、に割り当てられ、その後、辞書スピルオーバー-すべてのキー引数、その後、保存のパラメータを。なお:大会はkwargsからだった**パラメータ名の後に。
def func(**kwargw):
print(kwargw)
func(a=5)
{'a': 5}
第四に、可変長引数* *
引数は、あろうキーワード引数に分割抽出サイクル後のパラメータの値は、。バンド内の引数は、いつでも出会いの後、それはキーの引数で、それはすぐに参照するにはキーワード引数に分割する必要があります。
def func(x, y, z, **kwargs):
print(x, y, z, kwargs)
func(1, 3, 4, **{'a': 1, 'b': 2})
1 3 4 {'a': 1, 'b': 2}
第五に、可変長のパラメータが適用されます
def index(name, age, sex):
print(f"name: {name}, age: {age}, sex: {sex}")
def wrapper(*args, **kwargs):
print(f"args: {args}")
print(f"kwargs: {kwargs}")
index(*args, **kwargs)
wrapper(name='nick', sex='male', age=19)
args: ()
kwargs: {'name': 'nick', 'sex': 'male', 'age': 19}
name: nick, age: 19, sex: male
名前の6つの主要パラメータ
需要が用意されました:ユーザー関数の引数はキーワードで渡す必要があります。
def register(x, y, **kwargs):
if 'name' not in kwargs or 'age' not in kwargs:
print('用户名和年龄必须使用关键字的形式传值')
return
print(kwargs['name'])
print(kwargs['age'])
register(1, 2, name='nick', age=19)
nick
19
パラメータは、* keyパラメータにちなんで命名され、関数定義の段階:キーワードパラメータに名前を付けます。
特徴:パス値ではキー=値方式とキーの値に応じて渡す必要がありますが、パラメータ名を指定したキーワード引数を名前を付ける必要があります。
def register(x, y, *, name, gender='male', age):
print(x)
print(age)
register(1, 2, x='nick', age=19) # TypeError: register() got multiple values for argument 'x'
ネストされた関数
内部関数定義された関数は、外部関数で定義された関数内で使用することができません。
def f1():
def f2():
print('from f2')
f2()
f2() # NameError: name 'f2' is not defined
def f1():
def f2():
print('from f2')
f2()
f1()
from f2
今円の円または円周の決定された領域の関数に渡すパラメータを与えることによって需要があります。これは、ツールボックス内のツールの山に投げ込まれ、その後、ライン上のツールボックスから直接利用できるツールを、取得したいです。
from math import pi
def circle(radius, action='area'):
def area():
return pi * (radius**2)
def perimeter():
return 2*pi*radius
if action == 'area':
return area()
else:
return perimeter()
print(f"circle(10): {circle(10)}")
print(f"circle(10,action='perimeter'): {circle(10,action='perimeter')}")
circle(10): 314.1592653589793
circle(10,action='perimeter'): 62.83185307179586
第二に、ネストされた関数呼び出し
def max2(x, y):
if x > y:
return x
else:
return y
def max4(a, b, c, d):
res1 = max2(a, b)
res2 = max2(res1, c)
res3 = max2(res2, d)
return res3
print(max4(1, 2, 3, 4))
4
関数は、関数内のみの関数呼び出しの内部では、これは次の研究を通じてなぜ起こるかあなたは知っているだろう、関数の外で呼び出すことはできません。
def f1():
def f2():
print('from f2')
f2()
f2() # NameError: name 'f2' is not defined
名前空間
名前空間(ネームスペース):インメモリ管理際にその章では、我々は変数を作成すると述べ、実際にメモリに新しいスペースを開いています。しかし、我々は、実際には、メモリ内の変数名と変数のメモリストレージ間の結合関係の余地がある、変数名を格納避けてきた、この空間は、名前空間と呼ばれています。
1.1ビルトイン名前空間
ビルトイン名前空間:ストアPyhtonインタプリタ名が付いています、などint、float、len
ライフサイクル:インタプリタを有効にするために始めたとき、インタプリタが閉じているときに、失敗
1.2グローバルネームスペース
グローバル名前空間:ビルトインとローカル名に加えて、残りは、次のコードとして、グローバル名前空間に格納されていますx、func、l、z
ライフサイクル:ファイルが有効に実行された場合、ファイルの実行後に期限切れ
x = 1
def func():
pass
l = [1, 2]
if 3 > 2:
if 4 > 3:
z = 3
1.3ローカル名前空間
ローカル名前空間:ファンクション・コールの間に生成記憶する機能本体の名称、例えば次のコードとしてf2
ライフサイクル:ファイルが実行されると、関数呼び出しの際に有効になる機能の実行後に期限切れ
def f1():
def f2():
print('from f2')
f2()
f1()
1.4ロード順序
Pythonインタプリタでの名前空間のロードが完了した後に、それが構築されなければならないので、の.pyファイルは、Pythonインタプリタによって開かれているので、ファイルを開くために始めた、この時間は、グローバルな名前空間を演出しますが、特定の関数がファイルにあり - 「グローバル - 」ローカルビルトイン:呼び出されたとき、それはロード順序のローカル名前空間、名前空間を生成するために開始されます。
10
スコープ
ドメインは、すなわち作用領域範囲領域を指します。
2.1グローバルスコープ
グローバルスコープ:グローバル・効果的な、世界的な生存、および組み込みの名前空間のグローバルネームスペース。
# 全局作用域
x = 1
def bar():
print(x)
bar()
1
2.2ローカルスコープ
ローカルスコープ:ローカル小さな、一時保管、唯一のローカルな名前空間を含みます。
# 局部作用域
def f1():
def f2():
def f3():
print(x)
x = 2
f3()
f2()
f1()
2