0

我想用 GraphScene 绘制一个反比例函数,一切正常,但是当我设置条件时x != 0,会弹出一个 SyntaxError:

f11 = self.get_graph(lambda x: 1/x if x!= 0)

SyntaxError: invalid syntax 

错误表示最后一个括号

我搜索了很多,lambda x: 1/x if x!= 0应该是正确的python语法,不知道为什么它不起作用!谢谢你的帮助。

4

2 回答 2

3

图形是使用贝塞尔曲线创建的,贝塞尔曲线不能不连续,因此,您必须为要使用的每个域创建多个图形。

class AddingDomains(GraphScene):
    CONFIG = {
        "y_max" : 5,
        "y_min" : -5,
        "x_max" : 6,
        "x_min" : -6,
        "graph_origin": ORIGIN,
    }
    def construct(self):
        self.setup_axes()
        graph_left = self.get_graph(lambda x : 1/x,  
                                    color = GREEN,
                                    x_min = self.x_min, 
                                    x_max = 1/self.y_min
                                    )
        graph_right = self.get_graph(lambda x : 1/x,  
                                    color = GREEN,
                                    x_min = 1/self.y_max, 
                                    x_max = self.x_max
                                    )
        graph=VGroup(graph_left,graph_right)
        self.play(
            ShowCreation(graph),
            run_time = 2,
            rate_func= double_smooth
        )
        self.wait()

或者

class AddingDomains2(GraphScene):
    CONFIG = {
        "y_max" : 5,
        "y_min" : -5,
        "x_max" : 6,
        "x_min" : -6,
        "graph_origin": ORIGIN,
    }
    def construct(self):
        self.setup_axes()
        graph_left = self.get_graph(lambda x : 1/x,  
                                    color = GREEN,
                                    x_min = self.x_min, 
                                    x_max = 1/self.y_min
                                    )
        graph_right = self.get_graph(lambda x : 1/x,  
                                    color = GREEN,
                                    x_min = 1/self.y_max, 
                                    x_max = self.x_max
                                    )
        graph=VMobject(color=RED)
        graph.append_points(graph_left.points)
        graph.append_points(graph_right.points)
        self.play(
            ShowCreation(graph),
            run_time = 2,
            rate_func= double_smooth
        )
        self.wait()

返回: manimlib/mobject/types/vectorized_mobject.pymanimlib/mobject/functions.py在此处输入图像描述中 的更多信息。

于 2019-07-24T17:38:40.167 回答
2

添加一个else告诉 lambda 应该评估什么 when x==0,突然你有了有效的语法:

lambda x: 1/x if x != 0 else 0

这个语法结构是在PEP-308中添加的,它在 Python 2.5中被采用。从 PEP 来看,语法变化描述如下:

test: or_test ['if' or_test 'else' test] | lambdef
or_test: and_test ('or' and_test)*
...
testlist_safe: or_test [(',' or_test)+ [',']]
...
gen_for: 'for' exprlist 'in' or_test [gen_iter]

如您所见,else是强制性的;test没有aifa就没有办法else

于 2019-07-24T19:36:05.573 回答