2017-04-25 66 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!