【发布时间】:2021-01-05 02:59:20
【问题描述】:
我写了一个函数:
# given a n x m grid return how many different ways there are to move from top left to
# bottom right by only being able to move right or down
def grid(n, m, memo = {}):
if f'{n},{m}' in memo:
return memo[f'{n},{m}']
if n == 1 and m == 1:
return 1
if n == 0 or m == 0:
return 0
memo[f'{n},{m}'] = grid(n,m-1,) + grid(n-1,m)
return grid(n,m-1,) + grid(n-1,m)
最近我读到了一些关于 Python 短路的内容,我正在尝试进一步理解它。
据我了解,它不会在运行时提供任何提升,只是一种语法糖。
例如:
1 < 2 < 3 # is True
1 < 2 and 2 < 3 # is also True
# hence
(1 < 2 < 3) == 1 < 2 and 2 < 3 # is True
我想知道我可以在if 语句中使用这种短路来编写我的函数吗?
我想出了这个:
def grid(n, m, memo = {}):
if f'{n},{m}' in memo:
return memo[f'{n},{m}']
if (n or m) == 1:
return 1
if (n and m) == 0:
return 0
memo[f'{n},{m}'] = grid(n,m-1,) + grid(n-1,m)
return grid(n,m-1,) + grid(n-1,m)
这里有没有更聪明的方法来使用短路?
【问题讨论】:
-
if (n or m) == 1绝对与if n == 1 or m == 1不相同。 -
那么如何写成这样:n 还是 m 等于 1?不使用
n == 1 or m == 1? -
在下面查看我的答案。
-
和测试:
if n == 1 and m == 1:可以转换成if n == m == 1:。 -
1 < 2 < 3不是short-circuiting,实际上是chaining,在某些方面有点相反。
标签: python