Python:为什么有些代码一次只能工作

时间:2018-06-27 17:32:26

标签: python

我在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代码一次可以工作?我有很多东西要学习-描述这种情况的关键字是什么? 谢谢!

0 个答案:

没有答案