在python中,我可以写:
def func():
x = 1
print x
x+=1
def _func():
print x
return _func
test = func()
test()
Run Code Online (Sandbox Code Playgroud)
当我运行它时,输出是:
1
2
由于_func可以访问func中定义的"x"变量.对...
但如果我这样做:
def func():
x = 1
print x
def _func():
x+=1
print x
return _func
test = func()
test()
Run Code Online (Sandbox Code Playgroud)
然后我收到一条错误消息:UnboundLocalError:在赋值之前引用的局部变量'x'
在这种情况下,似乎_func不能"看到""x"变量
问题是:为什么在第一个例子中打印x"看到""x"变量,而数学运算符x + = 1抛出异常?
我不明白为什么......
我对列表中的foldl与foldr的理解是:
如果我们右边用函数s和一个起始累加器a折叠[0,1,2,3],我们这样做:
f 0 (f 1 (f 2 (f 3 a)))
如果我们使用函数s和起始累加器a 保留 fold [0,1,2,3],我们这样做:
f (f (f (f 0 a) 1) 2) 3)
鉴于:
elem_r :: (Eq a) => a -> [a] -> Bool
elem_r y ys = foldr (\x acc -> if x == y then True else acc) False ys
Run Code Online (Sandbox Code Playgroud)
和
elem_l :: (Eq a) => a -> [a] -> Bool
elem_l y ys = …Run Code Online (Sandbox Code Playgroud)