直接上代码
def l(list):
def d():
return list
return d
#运行
l = l([1,2,3,4])
print l()
这个情况是正常的。
问题在于d函数为什么不能传入list,然后我现在尝试了一下这个代码:
def l(list):
def d(list):
return list
return d
#运行
l = l([1,2,3,4])
#提示错误
print l()
#正常
print l([1,3,5,7,9])
请问这个怎么解释呢?
我个人理解的是,类似于“继承”的情况,当d函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???
Lihat prinsip LEGB dan anda akan faham apa yang sedang berlaku.
https://zhuanlan.zhihu.com/p/...
Lari
l = l([1,2,3,4])
Ralat segera
print l() Ralat ini ialah anda tidak melepasi parameter.
Dalam kod asal:
Yang berikut digunakan untuk menggambarkan: l dalam kod asal anda menghala ke titik yang berbeza:
Anda mungkin faham jika kod ditulis seperti ini:
Dua mata akhir:
Jangan gunakan kata kunci seperti
list
sebagai nama pembolehubahJangan tulis ganti nama pembolehubah anda (melainkan benar-benar perlu)
Apa yang perlu difahami oleh poster ialah: Skop
Kes 1: Fungsi l mengembalikan alamat fungsi d, yang hanya digunakan sebagai nilai pulangan dan belum dipanggil untuk pelaksanaan.
Senarai parameter dihantar ke l, skop berada dalam fungsi l, dan boleh diakses oleh d (perhatikan bahawa parameter dihantar ke l, bukan d).
Jika anda ingin mengakses senarai, hubungi seperti berikut:
`