【问题标题】:Python, how can I initialize a variable during function/method callsPython,如何在函数/方法调用期间初始化变量
【发布时间】:2015-11-09 19:32:41
【问题描述】:

在大多数解释语言中(在伪 PHP 中给出的示例)我可以做这样的事情

function f($name, &$errors = null) {
    if(something_wrong) {
        if(!is_null($errors) {
            $errors[] = 'some error';
        }
        return false;
    }
}

if(!f('test', $errs = array()) {
    print_r($errs);
}

得到类似的结果

Array
(
     [0] => some error
)

但是当我在 Python 中尝试这个时

def f(name, errors = None):
    if something_wrong:
        if errors:
            errors.append('some error')
        return False


if not f('test', errs = []):
    print str(errs)

我收到一个错误

TypeError: f() got an unexpected keyword argument 'errs'

这在 Python 的上下文中非常有意义,我认为我正在尝试设置一个特定的参数,而不是完全创建一个新变量。

如果我尝试

if not f('test', (errs = [])):
    print str(errs)

我明白了

    f('test', (errs = []))
                    ^
 SyntaxError: invalid syntax

因为我认为现在它假设我正在尝试创建一个元组。

有什么办法可以将这段代码保留在一行上,还是我必须在将变量传递给函数/方法之前自行初始化变量?据我所知,唯一解决办法是这样的

errs = []
if not f('test', errs):
    print str(errs)

【问题讨论】:

    标签: python function syntax initialization


    【解决方案1】:

    它应该被称为f(name, errors = [])f(name, [])。如果要使用属性名称进行初始化,python 要求您给出的变量键与您在函数定义中声明的任何属性名称相同。

    【讨论】:

    • 我不明白这对我有什么帮助,实际上你已经完全删除了errs的初始化,所以函数调用完成后我无法访问它。
    【解决方案2】:

    "在 Python 中,赋值是一个语句,而不是表达式,并且可以 因此不能在任意表达式中使用。”

    http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm

    【讨论】:

    • 谢谢 pBuch,这就是我想要的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多