是否可以使用True初始化bool?

时间:2016-07-06 08:35:00

标签: python python-3.x types

我通过空声明定义变量:

SELECT   CAST(FLOOR(VALUE) AS VARCHAR2(30))
   + CASE
         WHEN CAST(SUBSTR(SUBSTR(VALUE, INSTR(VALUE, '.')), 4) AS INT) > 5
         THEN
             CONCAT(
                    '.',
                    (  SUBSTR(
                              SUBSTR(VALUE, INSTR(VALUE, '.')),
                              2,
                              2
                             )
                     + 1)
                   )
         ELSE
             CONCAT(
                    '.',
                    SUBSTR(
                           SUBSTR(VALUE, INSTR(VALUE, '.')),
                           2,
                           2
                          )
                   )
     END
FROM DUAL;

是否可以强制初始化In [1]: a = bool() In [2]: a Out[2]: False

注意:我知道我可以简单地使用Truea = True,但我会使用特定类型初始化几个变量,例如

a = bool(True)

x = dict() for v in [('a', int), ('b', float), ('c', bool)] x[v[0]] = v[1]() int等的默认设置是正常的,我更愿意将float初始化为bool

3 个答案:

答案 0 :(得分:4)

您可以使用functools.partial自定义bool

from functools import partial

my_bool = partial(bool, 1)

print(my_bool())
# True

您可以在代码中使用它:

x = dict()
for v in [('a', int), ('b', float), ('c', my_bool)]
    x[v[0]] = v[1]()

你也可以使用lambda(credit:@tobias_k):

my_bool = lambda: True

答案 1 :(得分:2)

可能为您提供可能的解决方案,并具有其他特殊默认值的灵活性

typeDefaults = {bool: True}

for v in [('a', int), ('b', float), ('c', bool)]:
    x[v[0]] = typeDefaults[v[1]] if v[1] in typeDefaults else v[1]()

答案 2 :(得分:1)

您可以将要更改默认值的类型映射到您自己的函数:

>>> defaults = {bool: lambda: True}
>>> x = {}
>>> for k, v in [('a', int), ('b', float), ('c', bool)]:
...     x[k] = defaults.get(v, v)()
... 
>>> x
{'a': 0, 'c': True, 'b': 0.0}

或使用词典理解:

>>> {k: defaults.get(v, v)() for k, v in [('a', int), ('b', float), ('c', bool)]}
{'a': 0, 'c': True, 'b': 0.0}