我是来自Java背景的python的新手,并且想知道如何在Python中从一个函数访问变量到另一个函数。从这段代码:
def method1():
var1 = randomArray[::2]
var2 = randomArray[1::2]
return var1
return var2
def method2():
for i in range (len(var1)):
print i
我会收到错误消息:
NameError: global name 'var1' is not defined
原谅代码,我只是提供一个例子。关于如何在方法2中使用var1的任何建议都会有很大的帮助。感谢。
编辑:
class Sample:
def method1():
randomArray = [1,2,3,4,5,6,7,8,9,10]
var1 = randomArray[::2]
var2 = randomArray[1::2]
return var1, var2
def method2():
var1, var2 = method1()
for i in range (len(var1)):
print i
在method2()中调用method1()仍然是一个错误。
答案 0 :(得分:1)
如果要在第一个函数中定义变量,则必须返回它们并在调用函数时保存它们。 请注意,您可以通过用逗号分隔它们来返回多个变量。
def method1():
var1 = randomArray[::2]
var2 = randomArray[1::2]
return var1, var2
def method2():
var1, var2 = method1()
for i in range (len(var1)):
print i
答案 1 :(得分:1)
如错误所示,您没有名为var1
的全局变量。函数中的变量是本地的。
您可以制作我不会做的变量global
。
或者,更轻松地返回var1
和var2
的值,并在method2()
此外,您的return
错了。如果你想要返回两者,你应该像return var1, var2
一样返回。
e.g。 -
def method1():
var1 = randomArray[::2]
var2 = randomArray[1::2]
return var1, var2
def method2():
var1, var2 = method1()
#Do something with var2
for item in var1:
print item
#or for i in range(len(var1)): ....
答案 2 :(得分:1)
在Python中,return
语句退出该函数。因此,永远不会达到您的第二行return var2
代码。完成此操作的最佳方法是在调用函数时将返回值赋给变量。这是一个例子:
def method1():
var1 = randomArray[::2]
return var1
def method2():
var1 = method1()
for i in range (len(var1)):
print i
您也可以return multiple variables,但必须打包它们,例如tuple或list。
元组示例:
def method1():
var1 = randomArray[::2]
var2 = randomArray[1::2]
return (var1, var2)
def method2():
var1, var2 = method1()
for i in range (len(var1)):
print i
for i in range (len(var2)):
print i
列表示例:
def method1():
var1 = randomArray[::2]
var2 = randomArray[1::2]
return [var1, var2]
def method2():
varList = method1()
for i in range (len(varList[0])):
print i
for i in range (len(varList[1])):
print i
以下是基于更新代码的OOP示例:
class Sample:
def method1(self):
randomArray = [1,2,3,4,5,6,7,8,9,10]
var1 = randomArray[::2]
var2 = randomArray[1::2]
return var1, var2
def method2(self):
var1, var2 = self.method1()
print var1
MySample = Sample()
MySample.method2()
答案 3 :(得分:0)
我为var2创建了一个单独的方法,因此可以返回两个方法,然后在另一个函数中调用这两个函数。这样两者都可以访问,你可以避免全局变量。
def method1():
var1 = randomArray[::2]
return var1
def method2():
var2 = randomArray[1::2]
return var2
def method3():
var1 = method1()
var2 = method2()
#var2 stuffmagic
for i in range (len(var1)):
print i