Redefining name 'X' from outer scope (line 25)
17 y_pred = self.model.predict(X_test)
18 print("Accuracy:", accuracy_score(y_test, y_pred))
19
20 def predict(self, X):21 return self.model.predict(X)
22
23
Redefining name 'y_pred' from outer scope (line 28)
14 X, y, test_size=0.2, random_state=42
15 )
16 self.model.fit(X_train, y_train)
17 y_pred = self.model.predict(X_test)18 print("Accuracy:", accuracy_score(y_test, y_pred))
19
20 def predict(self, X):
Redefining name 'y' from outer scope (line 26)
9 def __init__(self):
10 self.model = RandomForestClassifier(n_estimators=100)
11
12 def train(self, X, y):13 X_train, X_test, y_train, y_test = train_test_split(
14 X, y, test_size=0.2, random_state=42
15 )
Redefining name 'X' from outer scope (line 25)
9 def __init__(self):
10 self.model = RandomForestClassifier(n_estimators=100)
11
12 def train(self, X, y):13 X_train, X_test, y_train, y_test = train_test_split(
14 X, y, test_size=0.2, random_state=42
15 )
Description
The local variable name hides the variable defined in the outer scope, making it inaccessible and might confuse.
Bad practice
filename = 'myfile.txt'
def read_file(filename): # This shadows the global `filename`
with open(filename) as file:
return file.readlines()
Preferred:
FILENAME = 'myfile.txt' # renamed global to UPPER_CASE as convention
def read_file(filename):
with open(filename) as file:
return file.readlines()
Bad practice
Another usual suspect of this is when you use the same parameter name inside a function as the global variable you are using. For example:
def run_app(app):
# This `app` shadows the global app...
app.run()
if __name__ == '__main__':
app = MyApp() # This is a global variable!
run_app(app)
Preferred:
To avoid this re-defining of a global, consider not defining app
as a global, but inside a main()
function instead:
def run_app(app):
# There is no longer a global `app` variable.
app.run()
def main():
app = MyApp()
run_app(app)
if __name__ == '__main__':
main()