Python,如何在 function/method 调用期间初始化变量
Python, how can I initialize a variable during function/method calls
在大多数解释性语言中(在 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
因为我认为现在它假设我正在尝试创建一个元组。
有什么方法可以将此代码保留在一行中,还是我绝对必须在将变量传递给 function/method 之前自行初始化变量?据我所知,唯一的解决方案是这个
errs = []
if not f('test', errs):
print str(errs)
应该叫作f(name, errors = [])
或f(name, [])
。如果你想用属性名初始化,python 要求你给的变量键与你在函数定义中声明的任何属性名相同。
"In Python, assignment is a statement, not an expression, and can
therefore not be used inside an arbitrary expression."
见http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
在大多数解释性语言中(在 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
因为我认为现在它假设我正在尝试创建一个元组。
有什么方法可以将此代码保留在一行中,还是我绝对必须在将变量传递给 function/method 之前自行初始化变量?据我所知,唯一的解决方案是这个
errs = []
if not f('test', errs):
print str(errs)
应该叫作f(name, errors = [])
或f(name, [])
。如果你想用属性名初始化,python 要求你给的变量键与你在函数定义中声明的任何属性名相同。
"In Python, assignment is a statement, not an expression, and can therefore not be used inside an arbitrary expression."
见http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm