我在Jupyter Lab中使用Python 3+,并且正在关注这个tutorial。与在函数外部建立变量相比,在函数内部建立变量使它更可靠地工作。为什么?
例如,我想执行以下两个,但是只有第一个可以按预期工作:
selected_training_examples = select_and_transform_features(training_examples)
selected_validation_examples = select_and_transform_features(validation_examples)
这是原始函数定义,仅在第一次时才按预期工作:
# bucketizing latitude:
LATITUDE_RANGES = zip(range(32, 44), range(33, 45))
def select_and_transform_features(source_df):
selected_examples = pd.DataFrame()
selected_examples["median_income"] = source_df["median_income"]
for r in LATITUDE_RANGES:
selected_examples["latitude_%d_to_%d" % r] = source_df["latitude"].apply(
lambda l: 1.0 if l >= r[0] and l < r[1] else 0.0)
return selected_examples
但是如果我将LATITUDE_RANGES放到函数定义中,它每次都会起作用:
def select_and_transform_features(source_df):
# bucketizing latitude:
LATITUDE_RANGES = zip(range(32, 44), range(33, 45))
selected_examples = pd.DataFrame()
selected_examples["median_income"] = source_df["median_income"]
for r in LATITUDE_RANGES:
selected_examples["latitude_%d_to_%d" % r] = source_df["latitude"].apply(
lambda l: 1.0 if l >= r[0] and l < r[1] else 0.0)
return selected_examples
这是我从@RadEdje post here.中学到的解决方法,我是新手,因此我无法发表评论并直接提出疑问,我认为提出此问题可能对其他人有帮助。
研究“为什么”使我认为这可能与我使用jupyter实验室this post for example的事实有关。因此,将LATITUDE_RANGES保留在函数之外,我尝试在jupyter笔记本中执行以下命令:
%reload_ext autoreload
%autoreload 2
但是,它与在函数定义内移动LATITUDE_RANGES的效果不同。所以我的问题是:为什么python代码一次可以工作?我有很多东西要学习-描述这种情况的关键字是什么? 谢谢!