2017-09-02 17 views
0

私はJetBrains IntelliJのファンです。PyCharmがPythonに提供するサポートを楽しんでいます。しかし、私はPyCharm 2017.2.2でPythonコードを正しくリファクタリングしようとするのに困っています。私は2つのケースで問題を実証できます。最初のケースは動作しますが、2番目のケースは動作しません。これは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を示唆ボックス、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() 

となります。ラムダ内に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に1つの値しか渡さないので、cは何も表しません。

+0

を発行するためにこれを添付しました。これが、このコードが機能しない理由です。しかし、PyCharmはこのコードを「リファクタリング抽出メソッド」操作によって生成しました。定義上、リファクタリングはコードの動作を変更すべきではありません。ここで、その行動は変わった。 PyCharmのリファクタリングを成功させるためにできることはありますか? – John

+0

pycharmsのリファクタリング機能は使用しません。私は自分自身でコードを書くことを好む。 – Pws265

関連する問題