Python:NameError尝试在变量中保存函数并将变量插入另一个函数

时间:2016-02-01 02:13:51

标签: python function variables

我想知道是否有办法将函数存储在包含尚未定义的变量的变量中,并且在定义函数中的变量之后放置保存函数的变量。例如,我想要下面的这个脚本(这个脚本是我在另一个脚本中遇到的问题的一个例子,但另一个脚本太长了,不能包含在这里)在你输入几周之后打印了几天,但是我得到 NameError:名称'days_weeks'未定义

weeks = int(input("Enter a number of weeks"))
def print_weeks():
    print("that is %s days" % days_weeks)
x = print_weeks
def find_days():
    days_weeks = weeks * 7
    x
    x()
find_days()

现在,显然,我可以在find_days中插入print_weeks;但是对于我正在研究的项目,我在我的脚本中使用了第一个函数(本例中为print_weeks)数十次,而且函数是数百行代码,所以我想将函数存储在变量中让事情变得不那么邋..我也试图让days_week成为一个全局变量,但代码的结果保持不变(或者我做错了)。我已经阅读了很多其他主题但我还没有找到答案。很抱歉,如果这一直令人困惑,但基本上如果有人有办法将print_weeks保存在一个变量中并且让这个脚本正确打印日期,那将非常感激。

1 个答案:

答案 0 :(得分:1)

您正在获取NameError,因为days_weeks是函数find_days的本地,而print_weeks无法访问。如果您希望days_weeks是全局的,则需要更改find​​_days函数。

def find_days():
    global days_weeks 
    days_weeks = weeks * 7
    x   
    x() 

但是,一般来说,最好将变量传递给函数,而不是依赖于全局变量。在这种情况下,您的代码看起来像这样:

def print_weeks(days):
    print("that is %s days" % days)
x = print_weeks

def find_days(f, Nweeks):
    days_weeks = Nweeks * 7
    f(days_weeks)

weeks = int(input("Enter a number of weeks"))
find_days(x,weeks)