2017-04-25 28 views
-1

我如何做一个if语句会问,如果我的变量包含字符串或任何类型,那么如果是这样,那么它会在我的if语句执行代码。下面的代码仅仅是我的实验,但它并不像我希望的那样工作。Python的if语句,如果变量值是字符串或任何类型

def checkMyValues(*args): 
    if isinstance(args, str) == True: 
     print("it is a string!") 

checkMyValues("haime") 

但这不会输出“它是一个字符串!”。

任何帮助将非常appreciated.Thanks

+0

你'def'两次 –

+0

http://stackoverflow.com/a/4843178/5351549 – ewcz

+0

OPS遗憾。只是在这里不是在我的实际Python代码。 –

回答

0

当你想为了检查类型的参数列表,你应该循环它而不是检查元组本身的类型。那么它会给你预期的结果。下面是你的代码的修改版本

def checkMyValues(*args): 
    for each in args:   
     if isinstance(each, str) == True: 
      print("it is a string!") 
     else: 
      print("Its not a string") 

checkMyValues("haime", 20, '40.2') 
+0

几分钟后我想问这个问题。我得到了同样的答案,谢谢!可以通过这种方式去除“== True”并且工作得很好。 –

+0

很酷。是的,isinstance()函数返回一个布尔值,它没有'=='就可以正常工作。 – NMN

-1

*参数表是一个元组不是字符串

def checkMyValues(*args): 
    for s in args: 
     z = type(s) 
     if z is str: 
      print(s," is a string!") 
     else: 
      print(s," is not a string!") 

checkMyValues("4","5",5) 
0

在功能使用*args将参数传递给是tuple,而不是str这就是为什么它将不会打印it is a string

试试这个

def checkMyValues(arg): 
    if isinstance(arg, str): # Not need to compare == True 
     print("it is a string!") 

checkMyValues("haime") 

更多信息关于*args*kwargshere

+0

是的,但我希望它作为*参数,因为我正在处理灵活数量的参数。我想我明白了。我需要先在For循环中循环它,然后在做任何事情之前获取args的每个值。谢谢btw –

+0

'* args'构成一个元组,而不是一个列表。可以是一个重要的区别。 –

+0

更新响应包括@TedKleinBergman修正:) – VMRuiz

0

删除*从指定参数和它的工作。将*添加到参数中使其成为非keyworded参数(List)。因此你的支票失败。

-1

我不太明白你是什么意思,但根据您的代码。也许你需要这个。

def checkMyValues(args): 
    if isinstance(args, str): 
     print("is string") 
+0

好了,如果你不明白的问题,你应该澄清它** **前回答这个问题。 – kaldoran

0

你需要循环的ARGS(这是要传递给函数的参数的tuple):它输出

def checkMyValues(*args): 
    for arg in args: 
     if isinstance(arg, str): 
      print(arg, "is a string!") 

checkMyValues("haime") 
# haime is a string! 

checkMyValues("haime", 7, [], None, 'strg') 
# haime is a string! 
# strg is a string!