I'm a fan of JetBrains IntelliJ, and now am enjoying the support PyCharm offers for Python. But I'm having trouble trying to refactor some python code correctly with PyCharm 2017.2.2. I can demonstrate the problem with two cases, where the first one works but the second one doesn't.
Working snippet:
import pandas as pd
def main():
c = 2
a = pd.Series([1,2,3])
b = a.apply(lambda x:
x+1
)
print (b)
main()
I can select the three lines
b = a.apply(lambda x:
x+1
)
When I refactor > extract > method, I'm offered a dialog box suggesting a
as a parameter, and b as the return value. When I accept, the result is:
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()
Now, I make a change. Instead of x+1
inside the lambda, I use x+c
. I would expect that c
would then be identified as a parameter for the new function, but it isn't. As a result, I end up with this code, which doesn't work:
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()
Is there something I'm doing wrong?
Your only passing one value to method_name so c represents nothing.