【问题标题】:Python: as yet undefined variable called in function - but works?Python:尚未在函数中调用未定义的变量-但有效吗?
【发布时间】:2012-02-13 06:23:46
【问题描述】:

我还是 Python 新手,一直在查看以下不是我编写的代码。

有人能解释一下变量“clean”的第一个实例是如何在 check_arguments 函数中被调用的吗?在我看来,它好像在调用一个尚未定义的变量。代码有效,但调用“clean”不应该产生错误吗?

要清楚我指的是这个。

def check_arguments(ages):
    clean, ages_list = parse_ages_argument(ages)

完整代码如下...

def check_arguments(ages):
    clean, ages_list = parse_ages_argument(ages)
    if clean != True:
        print('invalid ages: %s') % ages
    return ages_list

def parse_ages_argument(ages):
    clean = True
    ages_list = []
    ages_string_list = ages.split(',')
    for age_string in ages_string_list:
        if age_string.isdigit() != True:
            clean = False
            break
    for age_string in ages_string_list:
        try:
            ages_list.append(int(age_string))
        except ValueError:
            clean = False
            break

    ages_list.sort(reverse=True)
    return clean, ages_list

ages_list = check_arguments('1,2,3')
print(ages_list)

【问题讨论】:

  • 这里无法理解您的问题。 “在 check_arguments 函数中调用”是什么意思。清洁是一个变量。怎么称呼?

标签: python function variables undefined


【解决方案1】:

Python 没有逗号运算符。你看到的是sequence unpacking

>>> a, b = 1, 2
>>> print a, b
1 2

【讨论】:

  • 我可以想象这对于初学者来说是令人困惑的,特别是因为它是一个被序列解包的函数的返回值。我建议他将 clean, ages_list = 替换为 test_ret_val = 然后 print test_ret_val 以了解发生了什么。
【解决方案2】:

如何在 check_arguments 函数中调用变量“clean”的第一个实例?

首先要问这个问题很荒谬,因为没有调用变量;功能是。此外,“实例”通常意味着“某个类类型的值”,而不是“代码清单中相关事物的出现”。

也就是说:有问题的代码行没有使用未定义的变量clean。它定义变量clean(和ages_list同时)。 parse_ages_argument 返回两个值(通过检查其return 语句可以看到)。两个返回值分别赋值给两个变量。

【讨论】:

  • 感谢卡尔的解释。虽然 Ignacio 的答案和链接显然是准确的,但我选择了你的答案作为公认的答案,因为它帮助我具体理解了这段代码中发生的事情(从新手的角度来看)。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2018-05-03
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多