1

我有一个关于python的问题。

我有变量a,b和.cd

我有以下行:

if    not isinstance(a, int)   or not isinstance(b, int)  \
   or not isinstance(c, int)   or not isinstance(d, int)  \
   or not isinstance(a, float) or not isinstance(b, float)\
   or not isinstance(c, float) or not isinstance(d, float):
    do something

是否可以使此代码更短?

谢谢!

4

5 回答 5

5

你应该使用all

if not all(isinstance(var, (int, float)) for var in [a, b, c, d]):
    # do stuff

请注意,您可以同时int为调用提供“浮动”和“浮动” isinstance

于 2013-12-20T13:17:04.663 回答
2

尝试以下操作:

>>> a = 1
>>> b = 1.0
>>> c = 123
>>> d = 233
>>> any((type(var) in (int, float) for var in [a,b,c,d]))
True
>>> c = 'hello'
>>> any((type(var) in (int, float) for var in [a,b,c,d]))
True
>>> 
于 2013-12-20T13:19:56.523 回答
1
>>> a = b = c = d = []
>>> any(not isinstance(x, (int, float)) for x in [a,b,c,d])
True
>>> d = 0
>>> any(not isinstance(x, (int, float)) for x in [a,b,c,d])
False
于 2013-12-20T13:17:02.720 回答
0

实际上,您所写的内容等于

if True:
    do_somthing
    pass
于 2013-12-20T13:27:39.173 回答
-3

显然,您没有对 RemcoGerlich 的评论给予足够的关注,因为您赞成并接受了一个毫无意义的答案。
在我写这篇文章的时候,另外 4 个人对同样毫无意义的答案投了赞成票。
这是令人难以置信的。
你会看到更好吗?:

def OP(a,b,c):
    return    not isinstance(a, int)\
           or not isinstance(b, int)\
           or not isinstance(c, int)\
           or not isinstance(a, float)\
           or not isinstance(b, float)\
           or not isinstance(c, float)

def AZ(a,b,c):
    return all(isinstance(var, (int, float))
               for var in [a, b, c])

gen = ((a,b,c) for a in (1, 1.1 ,'a')
       for b in (2, 2.2, 'b') for c in (3, 3.3, 'c'))

print '                  OPv | AZv     OPv is AZv\n'\
      '                 -----|-----    -----------'
OPV_list = []
for a,b,c in gen:
    OPv = OP(a,b,c)
    OPV_list.append(OPv)
    AZv = AZ(a,b,c)
    print '%3r  %3r  %3r    %s | %s      %s'\
          % (a,b,c,OPv,AZv,OPv is AZv if OPv is not AZv else '')

print '-------------    ----'
print 'all(OPV_list) : ',all(OPV_list)

结果
OPv = 你
的 AZv = 毫无意义的答案
我限制为 a,b,c 以使其简短

                  OPv | AZv     OPv is AZv
                 -----|-----    -----------
  1    2    3    True | True      
  1    2  3.3    True | True      
  1    2  'c'    True | False      False
  1  2.2    3    True | True      
  1  2.2  3.3    True | True      
  1  2.2  'c'    True | False      False
  1  'b'    3    True | False      False
  1  'b'  3.3    True | False      False
  1  'b'  'c'    True | False      False
1.1    2    3    True | True      
1.1    2  3.3    True | True      
1.1    2  'c'    True | False      False
1.1  2.2    3    True | True      
1.1  2.2  3.3    True | True      
1.1  2.2  'c'    True | False      False
1.1  'b'    3    True | False      False
1.1  'b'  3.3    True | False      False
1.1  'b'  'c'    True | False      False
'a'    2    3    True | False      False
'a'    2  3.3    True | False      False
'a'    2  'c'    True | False      False
'a'  2.2    3    True | False      False
'a'  2.2  3.3    True | False      False
'a'  2.2  'c'    True | False      False
'a'  'b'    3    True | False      False
'a'  'b'  3.3    True | False      False
'a'  'b'  'c'    True | False      False
-------------    ----
all(OPV_list) :  True
于 2013-12-20T16:58:05.520 回答