【问题标题】:Pass boolean values as input to method将布尔值作为输入传递给方法
【发布时间】:2016-12-28 07:01:09
【问题描述】:

如何将布尔值作为参数传递给方法?

例如,我有如下代码:

def msg_util(self, auth_type=None,starttls=False):
....
starttls=True
invoke_tls(self, auth_type, auth_value, "require_tls=%s" %starttls)
....
....
def invoke_tls(self, auth_type=None, auth_value=None,range=None,style=None, adminuser=None,require_tls=False):
...

由于我将starttls作为invoke_tls方法的字符串传递,在方法定义invoke_tls中,如果require_tls默认没有设置为布尔值False,starttls被视为“True”(字符串)

请告诉我是否有一种方法可以在 python 中将布尔类型作为可选参数传递。

我知道一种方法是在 if else 条件下处理字符串并如下处理:

def t_or_f(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False

但是,如果有任何其他有效或更好的方法可以将布尔值作为输入传递给另一个方法,请告诉我?

【问题讨论】:

  • 如果不通过,False将是默认通过的值。
  • 传递任何其他参数的方式相同。布尔值并不特殊。
  • 你为什么要把它变成一个字符串?
  • @MarounMaroun 我需要通过 True
  • @user2357112 因为参数是命名 Python 功能参数(具有默认值),我需要传递参数名称和参数值

标签: python python-2.7


【解决方案1】:

TrueFalse 值没有什么特别之处...

invoke_tls(self, auth_type, auth_value, starttls)

如果您的意思是如何传递特定参数而不是其他参数,那么Python有“关键字参数”:

def foo(a, b=1, c=False):
    print(a, b, c)

foo(1)          # b will be 1 and c False (default values)
foo(1, c=True)  # b will be 1 (default) and c True

Python 还允许动态指定关键字参数...例如

parms = {"c" : True}  # Dictionary name → value
foo(1, **parms)       # b will be 1 (default), c will be True

【讨论】:

  • 谢谢,但是如果 c 的值来自其他方法并且变量名是 x 怎么办?因此,我们将无法调用foo(1, c=x)。所以我使用foo(1, "c=%s"%x)
  • 您可以而且应该使用foo(1, c=x)。在这里看不到问题。
  • @ArunShankar:如果参数的 name 是动态的,则可以在调用中使用 **dict 语法。如果问题只是参数值,您可以简单地写foo(1, c=x)
  • @6502 上面的解决方案有帮助,参数是动态的
【解决方案2】:

Boolean 是一种数据类型,可以像任何其他数据类型一样传递。

检查:

a = True
def foo(b=None):
    print b
foo(a)

输出:

True

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2016-10-24
    • 2013-08-13
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多