1

我正在尝试编写一些代码,如果发生某种情况,则必须将特定数字更改为-该数字。到目前为止,我有以下代码:

x=6

for words in foo:
   if "bar" in words:
      crazy_function(x)
   else:
      pass

如果单词“bar”在words中,x需要以-6的形式出现,如果不在words中,它需要以+6的形式出现。但是在某些情况下 x=-6 在这种情况下,如果 bar 是单词,它需要变为正数。我需要用实际有效的东西替换“crazy_function()”。

4

6 回答 6

13

使用否定运算符:

x=6

for words in foo:
  if "bar" in words:
    x = -x;
于 2013-07-17T22:01:18.203 回答
6

“疯狂功能”实现起来很简单:

def crazy_function(x):
    return -x

像这样使用它:

if "bar" in words:
    x = crazy_function(x)

或者简单地嵌入它:

if "bar" in words:
    x = -x

正如@kroolik 所指出的,为了让它更短:

x = -x if "bar" in words else x
于 2013-07-17T22:00:56.800 回答
4

标准库中已经有一个函数:neg.

在这种情况下,您只需要一个表达式并且没有充分的理由必须是一个函数,使用neg. 相比:

if "bar" in words:
    x = operator.neg(x)

if "bar" in words:
    x = -x

第二个显然更具可读性,也更短。

但是,在某些情况下您实际上需要一个函数。在这种情况下,neg比动态创建函数要好。相比:

foo = map(operator.neg, bar)

foo = map(lambda x: -x, bar)

(当然在这种情况下,你可以只写foo = (-x for x in bar)……但不是每个高阶函数都映射到一个理解子句。)

于 2013-07-17T22:18:51.877 回答
1

嗯,总是有旧的备用,乘法。

x *= -1
于 2013-07-17T22:00:58.083 回答
0

将数字乘以-1?这似乎是最简单的方法。

于 2013-07-17T22:00:32.313 回答
0
x = x*([-1 for words in foo if 'bar' in words]+[1])[0]
于 2013-07-18T20:45:06.857 回答