2017-09-02 77 views
0

我是JetBrains IntelliJ的粉絲,現在我很享受PyCharm爲Python提供的支持。但是我無法正確使用PyCharm 2017.2.2重構一些python代碼。我可以用兩種情況來證明問題,第一種可行,第二種不行。這是PyCharm 2017.2.2重構限制還是編碼錯誤?

工作片段:

import pandas as pd 

def main(): 
    c = 2 
    a = pd.Series([1,2,3]) 
    b = a.apply(lambda x: 
     x+1 
    ) 
    print (b) 

main() 

我可以選擇三行

b = a.apply(lambda x: 
     x+1 
    ) 

當我重構>提取物>方法,我提供了一個對話框,提示a作爲參數,以及b作爲返回值。當我接受時,結果是:

import pandas as pd 

def main(): 
    c = 2 
    a = pd.Series([1,2,3]) 
    b = method_name(a) 
    print (b) 


def method_name(a): 
    b = a.apply(lambda x: 
       x + 1 
       ) 
    return b 


main() 

現在,我進行了更改。在lambda裏面代替x+1,我用x+c。我預計c將被識別爲新函數的參數,但事實並非如此。結果,我結束了這個代碼,這是行不通的:

import pandas as pd 

def main(): 
    c = 2 
    a = pd.Series([1,2,3]) 
    b = method_name(a) 
    print (b) 


def method_name(a): 
    b = a.apply(lambda x: 
       x + c 
       ) 
    return b 


main() 

有什麼我做錯了嗎?

+1

「限制」可能是一個更有用的術語;它也不那麼好鬥。 – user2864740

+1

請在這裏提交問題https://youtrack.jetbrains.com/issues/PY – user2235698

+0

感謝您的指針,@ user2235698。我附上了這個問題https://youtrack.jetbrains.com/issue/PY-23499 – John

回答

0

您只向method_name傳遞一個值,所以c不表示任何內容。

+0

是的,這就是這段代碼無效的原因。但是PyCharm通過「重構抽取方法」操作產生了這個代碼。根據定義,重構不應該改變代碼的行爲。在這裏,行爲確實發生了變化。我能做些什麼來幫助PyCharm重構成功嗎? – John

+0

我從來不使用pycharms重構功能。我更喜歡自己編寫代碼。 – Pws265

相關問題