Python,如何在函数/方法调用期间初始化变量

时间:2015-11-09 19:32:41

标签: python function syntax initialization

在大多数解释语言中(在psuedo 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)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

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

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