为什么第一个函数'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)
答案 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)
此效果称为“范围”。每个变量都有一个“范围”,一种可见的范围。它在外面不可见。这样,您可以在不同的函数中重用名称。