小编tvo*_*tvo的帖子

使用Pythons的三元运算符与lambda结合使用的意外输出

我有一个特定的情况,我想做以下(实际上它比这更多涉及,但我把问题简化为本质):

>>> (lambda e: 1)(0) if (lambda e: True)(0) else (lambda e: 2)(0)
True
Run Code Online (Sandbox Code Playgroud)

这是一种难以写的方式:

>>> 1 if True else 2
1
Run Code Online (Sandbox Code Playgroud)

但实际上'1','True'和'2'是需要评估的附加表达式,需要变量'e',我为此简化代码示例设置为'0'.

请注意上面两个表达式的输出差异

>>> (lambda e: 1)(0)
1
>>> (lambda e: True)(0)
True
>>> (lambda e: 2)(0)
2
Run Code Online (Sandbox Code Playgroud)

有趣的是,这是一个特殊情况,因为如果我将'1'替换为'3',我会获得预期/期望的结果:

>>> (lambda e: 3)(0) if (lambda e: True)(0) else (lambda e: 2)(0)
3
Run Code Online (Sandbox Code Playgroud)

如果我将'1'替换为'0'(这也可能是特殊情况,因为1 == True和0 == False),这甚至是正确的

>>> (lambda e: 0)(0) if (lambda e: True)(0) else (lambda e: 2)(0)
0
Run Code Online (Sandbox Code Playgroud)

另外,如果我将'True'替换为'not False'或'not not True',它仍然有效:

>>> (lambda e: 1)(0) if …
Run Code Online (Sandbox Code Playgroud)

python boolean ternary-operator conditional-expressions

9
推荐指数
1
解决办法
368
查看次数

Matlab如何计算轮廓线?

Matlab用于生成轮廓线的算法是什么?换句话说,它如何将网格上的关卡数据转换为一组线?

我想要的是:

  • 获取位于轮廓上的点的局部标准?
  • 捕获所有轮廓线的全局程序?

我不需要有关底层代码的详细细节,但一般原则对我解释输出很有帮助.我contour在研究中使用(和衍生物),并希望了解此步骤中引入的数值错误.

这看起来像一个非常简单的问题,但我在Matlab的文档中找不到解释,也没有在SO或其他网站上找到任何解释.如果它变得容易找到,我很抱歉.

algorithm matlab contour

9
推荐指数
1
解决办法
3091
查看次数