直接上代码
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函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???
Regardez les principes LEGB et vous comprendrez ce qui se passe.
https://zhuanlan.zhihu.com/p/...
Courir
l = l([1,2,3,4])
Erreur d'invite
print l() Cette erreur est que vous n'avez pas transmis de paramètres.
Dans le code d'origine :
Ce qui suit est utilisé pour illustrer : le l dans votre code d'origine pointe vers un point différent :
Vous comprendrez peut-être si le code est écrit comme ceci :
Deux derniers points :
N'utilisez pas de mots-clés comme
list
comme noms de variablesN'écrasez pas les noms de vos variables (sauf si cela est absolument nécessaire)
Ce que l'affiche doit comprendre, c'est : Portée
Cas 1 : La fonction l renvoie l'adresse de la fonction d, qui n'est utilisée que comme valeur de retour et n'a pas été appelée pour exécution.
La liste des paramètres est passée à l, la portée est dans la fonction l et est accessible par d (notez que les paramètres sont passés à l, pas à d).
Si vous souhaitez accéder à la liste, appelez comme suit :
`