2013-07-17 49 views
1

我嘗試寫一些代碼,如果某occurence發生,具體的數量已經更改爲 - 即數。 我有下面的代碼至今:轉換爲整數的負面

x=6 

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

如果詞「吧」是的話,X就需要站出來爲-6,如果不是在口頭上,它需要站出來爲+ 6。 然而,在某些情況下,x = -6,在這種情況下,如果欄中有文字,它需要變爲正值。 我需要將「crazy_function()」替換爲實際可用的東西。

+3

'X = -x'不爲你工作? –

回答

13

使用否定運算符:

x=6 

for words in foo: 
    if "bar" in words: 
    x = -x; 
0

Multipy -1多少?這似乎是最簡單的方法。

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 
+1

'X = -x如果還有的話這就是x'內聯「吧」:C –

+0

@kroolik是的,這就是更短的:)我編輯我的回答你的建議,謝謝! –

+0

@kroolik:它不會更短,更長。 'len('if'bar'in words:x = -x')== 25'。 'len('x = -x如果「bar」在其他語言中是x')== 31'。它的可讀性也稍差,並且將'x'重新分配給'x'不變,這有點令人困惑。那麼...有什麼優勢? – abarnert

1

嘛,總是有老待命,乘法。

x *= -1 
+2

這裏有一個操作符,它被稱爲負號 –

+3

如果你真的想變得瘋狂,爲什麼不'x - = x + x'?那麼你甚至不需要乘法。:) – abarnert

+1

@abarnert'x * =(x-1)%-x''x%= 2 * -x''x =〜x + 1''x =(x^-1)+ 1' – 2rs2ts

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) ...但不是每一個高階函數映射到理解條款。)

+0

令人驚訝的是,更深層次的知識可以從岩石中產生牛奶......(在這種情況下,從一個極其微不足道的問題中得到一個非常有趣的答案......) – heltonbiker

0
x = x*([-1 for words in foo if 'bar' in words]+[1])[0]