10-反復
1つのpythonは、これらのオブジェクトは、ループ(または横断)のためにそれをサポートしていますか?
:反復可能オブジェクト、またはイテレータプロトコルを実装するオブジェクト、または支持トラバーサルサイクル。(このようなリスト、タプル、辞書、ファイルなど)。特徴付け実装__next内部__()メソッドは、次の要素を自動的に取得することができます。例:
f = open('hello.txt', encoding = 'utf8')
print(f.__next__())
print(f.__next__())
print(f.__next__())
>>>hello, world!
>>>wow!
>>>你好!
コール__next __()メソッドを再度場合は、それが呼び出すとStopIterationが発生します。
次のようにも、)(次のグローバル関数を呼び出すことができます。
f = open('hello.txt', encoding = 'utf8')
print(next(f))
print(next(f))
print(next(f))
>>>hello, world!
>>>wow!
>>>你好!
また、呼び出し再び次の()関数であれば、この時点で、それが呼び出すとStopIterationが発生します。
:リストは、共通の反復可能であるが、それは__()メソッドと次の()グローバル関数__next呼び出すことができないことに注意
list1 = [1, 2, 3]
print(list1.__next__())
>>>Traceback (most recent call last):
File "A:/pycharm/python_workspace/01.05/test01.py", line 2, in <module>
print(list1.__next__())
AttributeError: 'list' object has no attribute '__next__'
list1 = [1, 2, 3]
print(next(list1))
>>>Traceback (most recent call last):
File "A:/pycharm/python_workspace/01.05/test01.py", line 2, in <module>
print(next(list1))
TypeError: 'list' object is not an iterator
しかし、なぜリストはそれをループするために使用することができますか?リストには、のために使用してループするときなので、システムが自動的に余分なステップがかかります。反復可能オブジェクトを細分することができる反復可能オブジェクトおよびイテレータオブジェクト。イテレート可能オブジェクトが達成されたが、イテレータ、イテレータオブジェクトを生成するためにコールITER()関数を横断しています。
テスト:ファイルオブジェクトは、ITERを達成されたかどうか()関数?
f = open('hello.txt', encoding = 'utf8')
print(iter(f) is f)
print(f.__next__())
print(next(f))
>>>True
hello, world!
wow!
答えは、ファイルオブジェクトは、ITER()関数を達成されたことです。もしそうなら、それは直接__next __()メソッドと次の()関数を使用することができます。
試験:リストが達成されたか否かをITER()関数:
list = [1, 2, 3]
print(iter(list) is list)
>>>False
この時点で、__next __()メソッドと次の()関数を呼び出すことはできません。リストをループのための場合は、自動的にITER()関数を実装します。あなた自身はそれを達成するためにすることはできますか?
list = [1, 2, 3]
i = iter(list)
print(i.__next__())
print(next(i))
>>>1
>>>2
どのように手動サイクルの例:
list = [1, 2, 3]
res = []
i = iter(list)
while True:
try:
res.append(next(i) ** 2)
except StopIteration:
break
print(res)
>>>[1, 4, 9]
2ジッパー()関数
ZIP()関数は、パラメータとして反復オブジェクトのために使用することができ、オブジェクトの対応する要素はタプルに充填し、これらのタプルのリストを返します。
各イテレータ矛盾、リストの最短長さの要素の数は、アスタリスク演算子を使用して、同じオブジェクトを返す場合、タプルは、リストを抽出します。
異なるジップ3のPython 2とPythonで方法:メモリを低減するために、Pythonの3.xの、ZIP()オブジェクトを返します。リストを表示するには、手動でリスト()変換する必要があります。
あなたがアプリケーションPyhton3を理解する必要がある場合は、()のpython3のzipを参照してください。
:構文ジップ
ファスナー([反復処理可能な、...])
パラメータ:
iterabl -一つ以上のイテレータを、
戻り値は
タプルのリストを返します。
例:
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
ziped1 = zip(a, b)
ziped2 = zip(a, c) #元素个数与最短的列表一致
print(list(ziped1))
print(list(ziped2))
>>>[(1, 4), (2, 5), (3, 6)]
>>>[(1, 4), (2, 5), (3, 6)]
11 - 関数定義のパラメータ
変数のスコープの問題の1つのPython関数が
関数内のローカルスコープ変数を有するものとして定義され、関数はグローバルスコープを有する外部定義。
ローカル変数は、そのアクセス関数内で宣言することができ、プログラム全体の範囲内でグローバル変数にアクセスすることができます。関数を呼び出すときに、関数名の中に宣言されたすべての変数がスコープに追加されます。
a = 1 #此时a为全局变量
print('outside:', id(a))
def func():
a = 5 #此时a为局部变量
print('inside:', id(a))
func()
print(a) #此时a为全局变量
print(id(a))
>>>outside: 8783054934848
>>>inside: 8783054934976
>>>1
>>>8783054934848
a = 1 #此时a为全局变量
print('outside:', id(a))
def func():
global a #声明a为全局变量
a = 5
print('inside:', id(a))
func()
print(a) #此时a为全局变量
print(id(a))
>>>outside: 8783054934848
>>>inside: 8783054934976
>>>5
>>>8783054934976
問題関連の伝達関数値2
不変タイプ、コピー操作を転送する機能は、元の値の機能には影響を与えません。
def change_num(x):
x += 10
x = 5
print('x = {}'.format(x))
change_num(x)
print('x = {}'.format(x))
>>>x = 5
>>>x = 5
これは以下のように内部関数値出力機能によって変更することができます。
def change_num(x):
x += 10
return x
x = 5
print('x = {}'.format(x))
x = change_num(x)
print('x = {}'.format(x))
>>>x = 5
>>>x = 15
変数の型、操作の配信アドレスの基準値は、元の機能に影響を与えます。
def change_list(l):
l[0] = 99
l = [1, 2, 3, 4]
print('原始列表:', l)
change_list(l)
print('操作后列表:',l)
>>>原始列表: [1, 2, 3, 4]
>>>操作后列表: [99, 2, 3, 4]