** kwargs中的可选参数

时间:2017-12-13 02:38:57

标签: python sql python-3.x python-2.7 cx-oracle

我无法处理在python **kwargs

中传递可选参数
def ExecuteyourQuery(self, queryStatement, *args, **kwargs):
    if self.cursorOBJ is not None:
        resultOBJ = self.cursorOBJ.execute(queryStatement, *args,**kwargs)
    self.resultsVal = resultOBJ.fetchall()

当我调用函数

时,以下语句可以正常工作
ExecuteyourQuery('select * from item_table where x = :x and y:y', x, y)

但是当我给出一个额外的参数时,查询中没有提到,比如

ExecuteyourQuery('select * from item_table where x = :x and y:y', x, y, z)

它返回0作为输出

2 个答案:

答案 0 :(得分:1)

当使用args作为函数的最后一个参数时,可以在正式参数之后传递任意数量的参数。 Args是tuple

def my_method(farg, *args):
  print('FARG: ', farg)
  print('ARGS: ', args)

my_method('Formal Argument', 1, 2, 3)

当使用kwargs作为函数的最后一个参数时,可以在正式参数之后传递任意数量的命名参数。 Kwargs是dictionary

def my_method(farg, **kwargs):
  print('FARG: ', farg)
  print('KWARGS: ', kwargs)

my_method('Formal Argument', kwarg_1 = 1, kwarg_2 = 2, kwarg_3 = 3)

当使用args和kwargs作为函数的最后一个参数时,可以传递任意数量的参数(将映射到args)和命名参数(在正式论证之后,当存在时,它将被映射到kwargs。

def my_method(farg, *args, **kwargs):
  print('FARG: ', farg)
  print('ARGS: ', args)
  print('KWARGS: ', kwargs)

my_method('Formal Argument', 1, 2, 3, kwarg_1 = 1, kwarg_2 = 2, kwarg_3 = 3)

尝试一下,在控制台中查看结果,希望它能帮助您解决原始问题:)

答案 1 :(得分:0)

另一种方法是通过为参数设置默认值

def method(one, two, three=3):
   print(one)
   print(two)
   if three != 3:  # don't have to use it like this but it is a default value
      print(three)

如果未填写参数,则设置默认值 如果已填充,它将否决默认值并使用该值

method(11, 22)  # prints first two parameters
method(23, 54, 89)  # prints all three

不确定这是否是您要寻找的东西,但这是另一种方式