谁能帮我弄清楚为什么第一个代码有效而第二个无效?:
工作代码
alias = []
alias.append(cx_Oracle.connect('%s/%s@%s' % (username, password, base)))
solve(*alias, **binds)
def solve(*alias, **binds):
cur = alias[0].cursor()
代码无效
alias = []
alias.append(cx_Oracle.connect('%s/%s@%s' % (username, password, base)))
solve(alias, binds)
def solve(*alias, **binds):
cur = alias[0].cursor()
错误
AttributeError: 'list' object has no attribute 'cursor'
*** 谢谢大家!这非常有帮助!
请您参考如下方法:
出现此问题是因为在第二种情况下,由于在将列表或字典作为参数传递给函数时没有解压缩列表或字典,因此它们被传递到 alias 中(在 solve 中函数 alias 的第一个元素是列表 alias ,alias 的第二个元素是字典 binds ) .
展示这个的例子-
>>> def a(*nargs, **kwargs):
... print('nargs : ',nargs)
... print('kwargs : ',kwargs)
...
>>> x = [1,2,3]
>>> d = {'a':2,'b':4}
>>> a(*x,**d)
nargs : (1, 2, 3)
kwargs : {'a': 2, 'b': 4}
>>> a(x,d)
nargs : ([1, 2, 3], {'a': 2, 'b': 4})
kwargs : {}
