我想用 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语法,不知道为什么它不起作用!谢谢你的帮助。
图形是使用贝塞尔曲线创建的,贝塞尔曲线不能不连续,因此,您必须为要使用的每个域创建多个图形。
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.py和manimlib/mobject/functions.py中 的更多信息。
添加一个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
没有a和if
a就没有办法else
。