为什么我可以用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
运行时,它们将被定义。