【问题标题】:In python what is difference between assign a variable in single line and assigning a variable in multiple lines [duplicate]在python中,在单行中分配变量和在多行中分配变量有什么区别[重复]
【发布时间】:2016-01-16 18:18:48
【问题描述】:

我为斐波那契数列编写了一个脚本,其中包含单行变量赋值和多行变量赋值。我得到了两个不同的结果

多行:

class fibonacci:
    def fib(self,num):
      result = []
      a = 0
      b = 1
      while a < num:
          result.append(a)
          a = b
          b =  a + b
      return result

instance = fibonacci()
new_inst = instance.fib(100)
print new_inst

输出:

[0, 1, 2, 4, 8, 16, 32, 64]

订单已更改:

class fibonacci:
    def fib(self,num):
      result = []
      b = 1
      a = 0
      while a < num:
          result.append(a)
          b = a + b
          a = b
      return result

instance = fibonacci()
new_inst = instance.fib(100)
print new_inst

输出:

[0, 1, 2, 4, 8, 16, 32, 64]

单行:

class fibonacci:
    def fib(self,num):
      result = []
      a,b = 0,1
      while a < num:
          result.append(a)
          a,b = b, a + b
      return result

instance = fibonacci()
new_inst = instance.fib(100)
print new_inst

输出:

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

【问题讨论】:

    标签: python


    【解决方案1】:

    唯一的区别是评估的顺序。当你分配

    a, b = b, a + b
    

    右边的表达式在赋值给左边之前被完全计算,所以计算的顺序是:

    foo = a + b
    bar = a
    b = foo
    a = bar
    

    这与您的第一个示例中的评估顺序不同,即:

     a = b
     b =  a + b
    

    因此您的两个示例会产生不同的结果。

    要解决您的问题,我可能会使用:

    c = a
    a = b
    b = a + c
    

    这会根据需要生成正确的输出。

    【讨论】:

    • class fibonacci: def fib(self,num): result = [] a,b = 0,1 while a &lt; num: result.append(a) b = a + b a = b return result instance = fibonacci() new_inst = instance.fib(100) print new_inst 但我仍然得到相同的输出:[0, 1, 2, 4, 8, 16, 32, 64]
    • 我已经更改了顺序,但仍然得到了两个不同的输出
    • 但是我为什么要多使用一个变量呢?
    • 你不需要。你的第二个例子是正确的。但是,为了清楚起见(和您的理解),我的解决方案可能更容易。
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多