为什么我可以用python写一些无序的东西,而不是其他东西?

为什么我可以用python写一些无序的东西,而不是其他东西?,python,scope,compilation,closures,declaration,Python,Scope,Compilation,Closures,Declaration,请看下面: a = 5 print a + b b = 4 当我尝试运行上面的代码时,它给出了一个错误: 回溯(最近一次呼叫最后一次): 文件“C:/Users/user/Documents/modules/ab.py”,第2行,在 打印a+b 名称错误:未定义名称“b” 嗯a+b。这意味着Python按照从上到下的顺序运行代码。 但是,这个怎么样: class Data: def __init__(self): self.debug_level = 9

请看下面:

a = 5
print a + b
b = 4
当我尝试运行上面的代码时,它给出了一个错误: 回溯(最近一次呼叫最后一次): 文件“C:/Users/user/Documents/modules/ab.py”,第2行,在 打印a+b 名称错误:未定义名称“b”

嗯<在定义
b
之前调用code>a+b。这意味着Python按照从上到下的顺序运行代码。 但是,这个怎么样:

class Data:
    def __init__(self):
        self.debug_level = 9
        self.assign = [0, 0, 0, 0]
        self.days = 0
    def create_days(self, startTime, endTime):

        res = 0
        try:
          if self.final_days < self.maximum_days:
类数据:
定义初始化(自):
self.debug_level=9
self.assign=[0,0,0,0]
self.days=0
def创建天数(自我、开始时间、结束时间):
res=0
尝试:
如果self.final_天
上面,
self.final_天
self.maximum_天
也没有定义,但它没有给出任何错误。背后的逻辑是什么


非常感谢,

它不会给出任何错误,因为在定义类时不会访问属性。只要调用
create_days()
您就会遇到一个问题:D

它不会给出任何错误,因为在定义类时不会访问属性。只要调用
create_days()
就会出现问题:D

函数体仅在调用时求值,而不是在定义时求值。

函数体仅在调用时求值,而不是在定义时求值。

仅在运行代码时才查找引用。您可以在
create_days()
方法中输入您喜欢的任何名称,在执行包含这些名称的行之前,不会检查任何名称。

只有在运行代码时才会查找引用。您可以在
create_days()
方法中输入您喜欢的任何名称,在包含它们的行被执行之前,不会检查任何名称。

您还没有真正“运行”代码。在您的示例中,您所拥有的只是数据类中的一个方法声明。在这种情况下,Python不会检查类字段的存在,因为它们可以在其他时间以其他方法设置(Python的类在这个意义上是可伸缩的)

如果您试图在数据类的新实例中运行create_days方法,而没有事先设置这些字段的值,则会出现错误。

您实际上还没有“运行”代码。在您的示例中,您所拥有的只是数据类中的一个方法声明。在这种情况下,Python不会检查类字段的存在,因为它们可以在其他时间以其他方法设置(Python的类在这个意义上是可伸缩的)


如果您试图在数据类的新实例中运行create_days方法,而没有事先设置这些字段的值,您将得到一个错误。

如果您实际执行它,您将得到 AttributeError:数据实例没有“final_days”属性

要复制这一点:

x = Data()
x.create_days(1,2)

此外,还有一个
try
块。我想这是从其他代码中摘录的。try块可能正在吞咽异常。

如果您实际执行它,您将得到 AttributeError:数据实例没有“final_days”属性

要复制这一点:

x = Data()
x.create_days(1,2)

此外,还有一个
try
块。我想这是从其他代码中摘录的。尝试块可能吞咽异常。 < p> python是一种解释语言,不像C++,它没有编译,所以函数的主体直到调用它才被评估。

< p> python是一种解释语言,与C++不同,它没有编译,所以函数的主体直到调用它才被评估。

这意味着Self.FialLayStayes和Self.MimuluMyDays在调用CeaTyEyDays[]之前应该有一个值。否则它就没有意义了。这意味着在调用create_days()之前,self.final_days和self.maximum_days应该有一个值?是的。否则就没有意义了。你理解“定义”和“评估”之间的区别吗?你能先查一下这些,然后更新你的问题来解释你的困惑是什么吗?到
create\u days
运行时,它们将被定义。你理解“定义”和“评估”之间的区别吗?您能否先查找这些问题,然后更新您的问题以解释您的困惑。到
create\u days
运行时,它们将被定义。