【问题标题】:Conditional statements based on function parameter name [duplicate]基于函数参数名称的条件语句
【发布时间】:2013-01-01 21:26:37
【问题描述】:

可能重复:
How to get the original variable name of variable passed to a function

在python中是否有类似下面的东西,根据传递给函数的参数名称,我们可以执行如下条件语句。

def func(a,b,c,d)

if fourth paramter = d:
#code

elif fourth parameter = e:
#code

else:

#code

   def main():
         func(a,b,c,d)
         func(a,b,c,e)

【问题讨论】:

  • 你试过用kwargs代替吗?
  • 当你需要做一些奇怪的事情时,你通常最好退后两步(或十步)观察你的整体架构,看看它有什么问题。很可能有为整体问题提供了更好的解决方案。

标签: python


【解决方案1】:

你应该使用关键字参数:

def func(a, b, c, **kwargs):
    if 'd' in kwargs:
        ....
    elif 'c' in kwargs:
        ....

不过,这并不完全等同于您想要的。如果要保证de第四个参数,那就比较麻烦了。

然后你可以试试这样的:

def func(a, b, c, d=None, e=None):
    if d is not None and e is None:
        ....
    elif e is not None and d is None:
        ....

请注意,这并不是您要问的。它不会访问作为位置参数传递给函数的变量的“原始”名称,如 Stuart 链接的question。你甚至不应该尝试这样做,这是没有意义的。

【讨论】:

  • @LevLevistsky - 我根据您的建议编写了一个示例代码pastie.org/5607854。我的问题是在调用函数时没有将任何值传递给 d 或 e ..只是作为 d=' 离开' or e='' ,这是个问题吗?我只想知道最后一个参数是 d 还是 e,不过它似乎对我有用,我只是想确保
  • @user1927396 没关系;但是,如果您不需要在实际代码中传递带有参数的值,为什么不直接接受一个字符串作为第四个参数,即'c''d' 并调用func(1, 2, 3, 'e') 或@ 987654330@.
【解决方案2】:

kwargs 不会给你你想要的,但它可以很接近:

def func(a, b, c, **kwargs):
   if 'd' in kwargs:
       print "do something"
   elif 'e' in kwargs:
       print "do something else"


 def main():
     func(a = 1 ,b = 2 ,c = 3, d = 'some_value')
     func(a = 1 ,b = 2 ,c = 3, e = 'some_value')

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2020-04-06
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多