Python Bokeh的功能范围

时间:2017-04-11 16:22:08

标签: python

有一件事我不理解Bokeh(我认为Matplotlib有类似行为):

似乎如果函数对figure执行操作,那么figure是作为参数传递还是返回并不重要。当地/全球范围障碍似乎不适用。 例如:

p = figure(plot_width=400, height=400)
d= pd.DataFrame(np.random.rand(10,2), columns = ['x', 'y']) 

def add_circles():
    p.circle(x=d['x'], y=d['y'], color='black', size=5)

add_circles()
show(p)

这段代码将显示在图表上呈现的圆圈,而它们是在函数add_cirles内创建的,不会返回。另外,数字p和DataFrame d都没有传递给函数。

为什么会这样? 在这种情况下,最佳做法是什么?在参数中传递/返回figure并返回语句,或者让它如上所示?

1 个答案:

答案 0 :(得分:2)

这不是散景或matplotlib特有的。 由于您在函数中使用了函数,因此无需返回/传递任何内容。如果p = figure(),只要你执行p.circle(),它就会将glyphrenderer添加到该数字中。

它的行为类似于

a=3
b=[]

def test():
    b.append(a)

test()
b

它适用于函数append,但不适用于+ =

a=3
b=[]

def test():
    b+=[a]

test()
b

你不需要返回任何东西,因为你的函数add_circles()正在做任何.circle()正在做的事情。并且您不需要传递p,因为函数已经知道在外部声明的变量:

a = 5

def test():
    c = a + 2
    print c

test()

这只是一种不好的做法,因为你编写了一个在使用特定变量名时应该是通用/可重用的函数。