小编gob*_*lin的帖子

Python中的可变范围和名称解析

我认为我从根本上不了解Python如何完成变量范围和名称解析之类的事情。特别是broken()以下功能无法正常工作的事实令我感到惊讶。而且,尽管我在网上闲逛了一段时间以寻找有用的解释,但我仍然不明白。任何人都可以解释或链接到有关这些内容在Python中如何工作的良好描述,并提供足够的详细信息,使您broken()在阅读相关材料后似乎不起作用是显而易见的?

# Why does this code work fine
def okay0():
    def foo():
        L = []
        def bar():
            L.append(5)
        bar()
        return L
    foo()

# and so does this
def okay1():
    def foo():
        def bar():
            L.append(5)
        L = []
        bar()
        return L
    foo()

# but the following code raises an exception?
def broken():
    def foo():
        L = []
        bar()
        return L
    def bar():
        L.append(5)
    foo()

# Example
test_list = [okay0, okay1, broken]
for test_function in test_list:
    try:
        test_function() …
Run Code Online (Sandbox Code Playgroud)

python scope

26
推荐指数
2
解决办法
1031
查看次数

是否存在惰性命令式编程语言?如果没有,为什么不呢?

如果我没记错的话,“懒惰的命令式编程语言”的概念很有意义。

例如,我设想以下代码应使程序打印“ 7”

a <- 1
b <- a+5
a <- 2
print([b])
Run Code Online (Sandbox Code Playgroud)

而以下代码应使程序打印“ 6”

a <- 1
b <- [a+5]
a <- 2
print(b)
Run Code Online (Sandbox Code Playgroud)

并且以下代码应使程序打印字符串“ a + 5”

a <- 1
b <- a+5
a <- 2
print(b)
Run Code Online (Sandbox Code Playgroud)

这个想法是[..]通过使用每个变量的当前值执行评估来使表达式变平。

题。是否存在惰性命令式编程语言,如果不存在,为什么不呢?有什么特殊原因使它们永远不存在?

imperative-languages lazy-evaluation

6
推荐指数
0
解决办法
320
查看次数

R如何知道不使用旧的'f'?

进入R控制台,输入:

#First code snippet
x <- 0
x <- x+1
x
Run Code Online (Sandbox Code Playgroud)

你会得到'1'.这是有道理的:这个想法是'x + 1'中的'x'是x的当前值,即0,这用于计算x + 1的值,即1,然后将其铲入容器x.到现在为止还挺好.

现在输入:

#Second code snippet
f <- function(n) {n^2}
f <- function(n) {if (n >= 1) {n*f(n-1)} else {1}}
f(5)
Run Code Online (Sandbox Code Playgroud)

你会得到'120',这是5阶乘.

我觉得这很令人困惑.遵循第一个代码片段的逻辑,我们可能期望表达式中的'f'

if (n >= 1) {n*f(n-1)} else {1}
Run Code Online (Sandbox Code Playgroud)

被解释为f的当前值,即

function(n) {n^2}
Run Code Online (Sandbox Code Playgroud)

根据这个推理,f(5)的值应该是5*(5-1)^ 2 = 80.但这不是我们得到的.

题.这里到底发生了什么?R如何知道不使用旧的'f'?

r

4
推荐指数
1
解决办法
110
查看次数

r中的"命名元组"

如果将pracma包加载到r控制台并键入

gammainc(2,2)
Run Code Online (Sandbox Code Playgroud)

你得到

   lowinc    uppinc    reginc 
0.5939942 0.4060058 0.5939942 
Run Code Online (Sandbox Code Playgroud)

这看起来像某种命名元组或其他东西.

但是,我无法弄清楚如何提取下面的数字lowinc,即0.5939942.代码(gammainc(2,2))[1]不起作用,我们得到

   lowinc
0.5939942
Run Code Online (Sandbox Code Playgroud)

这不是一个数字.

这是怎么做到的?

r

1
推荐指数
1
解决办法
453
查看次数

标签 统计

r ×2

imperative-languages ×1

lazy-evaluation ×1

python ×1

scope ×1