我想知道是否有一种很好的方法可以告诉python解释器跳转到函数的下一个/最后一个return语句.
让我们假设以下虚拟代码:
def foo(bar):
do(stuff)
if condition:
do(stuff)
if condition2:
do(stuff)
if condition3:
...
return (...)
Run Code Online (Sandbox Code Playgroud)
有时候,由于它们依赖于上面的块do(stuff),因此很多条件无法链接.我现在可以这样做:
def foo(bar):
do(stuff)
if not condition: return (...)
do(stuff)
if not condition2: return (...)
do(stuff)
if not condition3: return (...)
...
return (...)
Run Code Online (Sandbox Code Playgroud)
它看起来有点不那么凌乱,但我不得不一次又一次地重复返回语句,这是一个很麻烦的东西,如果它是一个长元组或类似的甚至看起来更糟.完美的解决方案是说"如果没有条件,请跳到最终的退货声明".这有点可能吗?
编辑:明确这一点:我的目标是提高可读性,同时避免性能下降
tldr:我的实现的内存使用量显然随着通过它的样本数量的增加而增加,但网络/样本馈送中不应该有任何内容关心到目前为止传递了多少样本。
当通过功能 API 创建的自定义 Keras 模型传递大量高维数据时,我观察到GPU 内存使用量随着观察到的实例数量的不断增加而不断增长。以下是通过网络传递样本过程的最小示例:
sequence_length = 100
batch_size = 128
env = gym.make("ShadowHand-v1")
_, _, joint = build_shadow_brain(env, bs=batch_size)
optimizer: tf.keras.optimizers.Optimizer = tf.keras.optimizers.SGD()
start_time = time.time()
for t in tqdm(range(sequence_length), disable=False):
sample_batch = (
tf.random.normal([batch_size, 1, 200, 200, 3]),
tf.random.normal([batch_size, 1, 48]),
tf.random.normal([batch_size, 1, 92]),
tf.random.normal([batch_size, 1, 7])
)
with tf.GradientTape() as tape:
out, v = joint(sample_batch)
loss = tf.reduce_mean(out - v)
grads = tape.gradient(loss, joint.trainable_variables)
optimizer.apply_gradients(zip(grads, joint.trainable_variables))
joint.reset_states()
print(f"Execution Time: …Run Code Online (Sandbox Code Playgroud) 我是如何根据脚本的速度在Python中命令条件的?在SQL中,它并不像"解释器"那样假设哪个条件排序最快.
在Python中,据我所知,条件的顺序将由解释器给出.举个例子,如果我链条或者条件,最好是按假定的时间订购条件它们会消耗,因为当第一个条件不适用时,解释器可能会停止寻找其他条件吗?