为什么函数只返回var,如果我使它全局?

时间:2015-12-04 08:47:20

标签: python function variables

为什么第一个函数'define_vartest'没有按预期返回var。直到我将其设为全局(第二个函数'define_vartest_global'),它是否有效。返回函数末尾的var和在同一函数中定义全局变量有什么区别?我很困惑。

def define_vartest():

    vartest = 1

    return vartest


def define_vartest_global():

    global vartest_global
    vartest_global = 1

    return vartest_global

define_vartest()

define_vartest_global()

#print('vartest', vartest)
print('vartest_global', vartest_global)

基本上 - 如果我从打印的vartest行中删除了rem,脚本就会停止。为什么不定义var,因为我从函数返回它?

请解释

在下面回答。

此代码按预期工作。感谢

    def define_vartest():

        vartest = 1

        return vartest


    def define_vartest_global():

        global vartest_global
        vartest_global = 1

        return vartest_global

    vartest = define_vartest()

    vartest_global = define_vartest_global()


    print('vartest', vartest) 
    print('vartest_global', vartest_global)

2 个答案:

答案 0 :(得分:2)

您必须指定您返回的值:

> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.3 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8       
 [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.2.2

否则print语句将无法看到它,因为它们位于不同的范围内。

这意味着函数内的def define_vartest(): vartest = 1 return vartest vartest = define_vartest() print('vartest', vartest) 和外部的vartest是不同的变量。使用vartest,您可以将return内部的值提供给外部的vartest

答案 1 :(得分:1)

因为您从未阅读过返回的值。想一想:

def foo():
    return 1

foo()

1会发生什么?它已经丢失,因为没有人关心。您需要将其保存在一个新变量中以保持它:

def foo():
    return 1

vartest = foo()

现在让我们添加一个局部变量:

def foo():
    a = 1
    return a

b = foo() # assign the result of the function call to "b"
# "a" is undefined since it's local to "foo"
print('b',b)

此效果称为“范围”。每个变量都有一个“范围”,一种可见的范围。它在外面不可见。这样,您可以在不同的函数中重用名称。