【问题标题】:Optional Parameters in **kwargs**kwargs 中的可选参数
【发布时间】:2017-12-13 02:38:57
【问题描述】:

我无法处理在 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 作为输出

【问题讨论】:

  • 我不太确定您提出的查询?带有“y”的条件是否符合预期?
  • “以下语句工作正常......”是什么意思?没有通过 z 时返回什么?如上所述,'y' 的“和”条件是否符合预期(和 y:y)?

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


【解决方案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 作为函数的最后一个参数时,您可以传递任意数量的 arguments(将映射到 args)和 named arguments(将在正式参数之后映射到 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)

试试这个并在您的控制台中查看结果,希望它能帮助您解决最初的问题 :)

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 2012-04-09
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多