Perhaps by using a context manager one could write code like
N = 100
y = linspace(N)
x = sin(y) * 3
and have an expression generated with name x in @personal. This avoids the cumbersome syntax
N = 100
y = client.lazyexpr(name='y', expression=f"linspace({N})")
x = client.lazyexpr(name='x', expression="sin(y) * 3", operands={'y': y})