Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Skop Fungsi Lambda Mempengaruhi Outputnya dalam Python?
Skop Fungsi Lambda dan Parameternya
Dalam Python, fungsi lambda menyediakan tatatanda singkatan untuk mentakrifkan fungsi sebaris. Walau bagaimanapun, skop dan pengendalian parameter mereka boleh membawa kepada tingkah laku yang tidak dijangka, seperti yang ditunjukkan oleh kod berikut:
def callback(msg): print msg # Iterative Approach funcList = [] for m in ('do', 're', 'mi'): funcList.append(lambda: callback(m)) for f in funcList: f() # Individual Creation funcList = [] funcList.append(lambda: callback('do')) funcList.append(lambda: callback('re')) funcList.append(lambda: callback('mi')) for f in funcList: f()
Output yang dijangkakan ialah:
do re mi do re mi
Walau bagaimanapun, output sebenar ialah:
mi mi mi do re mi
Tingkah laku ini berpunca daripada fakta bahawa fungsi lambda tidak mencipta salinan pembolehubah daripada skop yang disertakan. Sebaliknya, mereka mengekalkan rujukan kepada pembolehubah tersebut. Akibatnya, perubahan pada nilai m dalam gelung mempengaruhi semua fungsi lambda yang dibuat dalam gelung itu.
Untuk menyelesaikan isu ini, adalah amalan biasa untuk menangkap nilai m pada masa penciptaan fungsi lambda dengan menggunakannya sebagai hujah lalai bagi parameter pilihan:
for m in ('do', 're', 'mi'): funcList.append(lambda m=m: callback(m))
Ini memastikan setiap fungsi lambda menangkap nilai m yang betul, menghasilkan output yang diingini:
do re mi do re mi
Atas ialah kandungan terperinci Mengapa Skop Fungsi Lambda Mempengaruhi Outputnya dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!