代码之家  ›  专栏  ›  技术社区  ›  epochwolf

代码在全局范围内工作,但不在本地范围内?

  •  0
  • epochwolf  · 技术社区  · 15 年前

    此函数应返回36,但返回0。如果我在交互模式下一行一行地运行逻辑,我得到36。

    代码

    from math import *
    
    line = ((2, 5), (4, -1))
    point = (6, 11)
    
    def cross(line, point):
        #reference: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=geometry1
        ab = ac = [None, None]
        ab[0] = line[1][0] - line[0][0]
        ab[1] = line[1][1] - line[0][1]
        print ab
        ac[0] = point[0] - line[0][0]
        ac[1] = point[1] - line[0][1]
        print ac
        step1 = ab[0] * ac[1] 
        print step1
        step2 = ab[1] * ac[0]
        print step2
        step3 = step1 - step2
        print step3
        return float(value)
    
    cross(line, point)
    

    产量

    [2, -6] # ab
    [4, 6]  #ac
    24      #step 1 (Should be 12)
    24      #step 2 (Should be -24)
    0       #step 3 (Should be 36)
    

    根据交互模式,这应该是步骤1、步骤2和步骤3的结果。

    >>> ab = [2, -6]
    >>> ac = [4, 6]
    >>> step1 = ab[0] * ac[1]
    >>> step1
    12
    >>> step2 = ab[1] * ac[0]
    >>> step2
    -24
    >>> step3 = step1 - step2
    >>> step3
    36
    

    (如果有人能给这个称谓,那就太好了)

    2 回复  |  直到 15 年前
        1
  •  5
  •   Eric Palakovich Carr    15 年前

    AB和AC指向同一参考。改变这一点:

    ab = ac = [None, None]
    

    对此:

    ab = [None, None]
    ac = [None, None]
    
        2
  •  1
  •   Epcylon    15 年前

    在线中 ab = ac = [None, None] ,您分配 同一览表 变为AB和AC。当你改变其中一个时,你同时改变另一个。

    它以交互方式工作的原因是,您不以相同的方式初始化列表。

    将函数中的第一行与此交换:

    ab = [None, None]
    ac = [None, None]