我正在学习Python并遇到了一个我不太了解的例子.在官方教程中,给出了以下代码:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
Run Code Online (Sandbox Code Playgroud)
来自c ++,直觉对我来说这将打印5.但我也想理解技术解释:"默认值在定义范围内的函数定义点进行评估." "定义范围"在这里意味着什么?
python parameters scope parameter-passing default-parameters
我对 Prolog(来自 C++)非常陌生,并且无法理解使用列表作为参数。特别是,我想知道如何解释列表只有一个元素(尾部为“空”)的情况。为什么我不能将 [L] 单独作为参数?为什么必须明确包含尾部?
/** Trying to print out the head of the list */
writeList([L|_]) :- write(L). /** Works fine */
writeList([L]) :- write(L). /** Doesn't work. Will return false, but why? */
writeList([L]) :- write([L]). /** I thought I'd try this to see if it was a
problem with write(), but this returns false as well. */
Run Code Online (Sandbox Code Playgroud)
我想出的唯一解决方案(不在“:-”之后创建测试)是:
writeList([L|[]]) :- write(L).
Run Code Online (Sandbox Code Playgroud)
但必须指定尾部是[],似乎有点乱。有没有更干净的方法来做到这一点?
抱歉,如果这个问题非常愚蠢——我试图找到这个(非常基本)问题的答案,但我怀疑我的基本理解存在问题。