2017-07-18 7 views
4

複数の引数を指定してprint()を実行するには、1つずつ評価すると考えました。ただし、次のコードどのようにpython 3 print(list、list.pop())ですか?

a = [1, 2, 3, 4] 
print(a, a[:], a.pop(), a, a[:]) 

私はPythonが、その後aa[:]再び、

[1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3] 

を印刷することになる、a.pop()そして、その後aまず、a[:]を評価するだろうと思ったプリント

[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3] 

では、これはどのくらい正確に機能しますか?

+0

関連性:https://stackoverflow.com/questions/42761707/what-is-the-order-of-evaluation-in-python-when-using-pop-list-1-and –

答えて

5

関数(関数)を呼び出す場合。 引数は、最初に左から右へ評価されます。だからあなたのコードがすると等価である:(もちろん変数arg1arg2などは、Pythonレベルでは存在しない)

arg1 = a 
arg2 = a[:] 
arg3 = a.pop() 
arg4 = a[:] 
print(arg1,arg2,arg3,arg4) 

arg1は、このようにaと同じリストを参照しますaの浅いコピーを作成し、arg2に保存してからポップaから最後のアイテムをに保存します最後に、(その時点ではa)をarg4に保存します。

だから意味:print(..)文はこれらの引数で呼び出され、我々はコメントで見られるようなので、印刷され

arg1 = a   # arg1 = a = [1,2,3,4] 
arg2 = a[:]  # arg2 = [1,2,3,4] 
arg3 = a.pop() # arg1 = a = [1,2,3], arg3 = 4 
arg4 = a[:]  # arg4 = [1,2,3] 
print(arg1,arg2,arg3,arg4) 

次。

[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3] 

重要な部分は、a.pop()のみaarg1の両方によって参照されるリストの最後の要素を返さないということであるが、また、(最後の要素を削除します)、そのリストを変更します。だから、印刷します。その結果、arg1aは同じリストを参照していますが、変更されています。