2013-04-22 42 views
0

这是问题的类型的一个简单的例子中,我碰上:调用从另一功能的可变

def making_list(text): 
    list_ = [] 
    i = 0 
    while i < int(len(text)): 
     list_.append(text[i]) 
     i += 1 
    return list_ 

def calling_list(list_): 
    print list_ 

text = raw_input("text input") 

making_list(text) 
calling_list(list_) 

可变list_,它来源于making_list,不是由功能识别calling_list。什么是解决这个问题的可能办法?

谢谢

+2

注意' making_list(text)'相当于'list(text)'。例如:'list(“abcd”)== ['a','b','c','d']' – 2013-04-22 11:56:38

+0

确实,一般来说,通过索引循环是一个非常糟糕的主意Python – 2013-04-22 12:47:40

回答

3

你没有在任何地方存储变量。

mylist = making_list(text) 
calling_list(mylist) 

说明:变量名仅在函数的作用域中有效。如果你离开函数(返回一些局部变量),你只返回变量的'值',而不是它的名字,你需要将它赋值给外部的变量。

+3

调用变量' list'是一个坏主意,你正在粉碎'list()'。 – 2013-04-22 11:47:20

+0

@Lattyware,好点。 – nothrow 2013-04-22 11:48:31

0

您必须声明将输出making_list作为其值的变量。 making_list函数返回list_;但如果您不将它分配给另一个变量,则无法达到它。

list_ = making_list(text)将解决您的问题。

0

您的making_list-功能不会返回任何内容。这将工作

list = making_list(text) 
calling_list(list) 

这将工作。

0

我不想改变或优化你的代码,我只是想给一个可能的解决方案:

1)如果你想list_存储在内存中,更改最后两行代码一样的这个:

list_=making_list(text) 
calling_list(list_) 

现在你可以在你的代码中的任何地方访问list_。

2)如果您不希望存储list_,你只是想打印出来,并忘掉它,删除你的代码的最后2行,写这行:

calling_list(making_list(text))