3 回答

TA貢獻1844條經驗 獲得超8個贊
您可能想要調用您在s.
一種可能性是使用getattr以通過字符串名稱查找對象的屬性:
>>> s = "ABC"
>>> for k in ["isalnum", "isalpha", "isdigit", "islower", "isupper"]:
... for c in s:
... getattr(c, k)() # get the attribute, then call it
...
True
True
True
True
True
True
False
False
False
False
False
False
True
True
True
或者,您可以str直接遍歷類的方法:
>>> s = "ABC"
>>> for k in [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]:
... for c in s:
... k(c)
...
True
True
True
True
True
True
False
False
False
False
False
False
True
True
True
(我使用了您所做的變量名稱,但是我建議至少重命名k為method.)

TA貢獻1816條經驗 獲得超6個贊
列表中的元素只是字符串。即使它們不是,c.k也總是要引用文字屬性k,而不是與列表中的屬性相對應的屬性。
你需要使用getattr; 但是括號不是屬性名稱的一部分,您需要將其省略。
for k in ["isalnum", "isalpha", "isdigit", "islower", "isupper"]:
for c in s:
print(getattr(c, k)())

TA貢獻2019條經驗 獲得超9個贊
Daniel Roseman 的回答簡潔但完整地解釋了您的代碼有什么問題,以及如何使您的代碼工作。
但是,每當您發現自己嘗試使用事物的字符串名稱而不是事物本身時,Python中通常會有更好的方法。因此,值得尋找更好的方法,并決定是否要使用它。
在這種情況下,您真正想要的是字符串方法列表。事實上,你可以直接創建一個字符串方法列表:
for k in [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]:
那太棒了; 這些方法是 Python 中的一流對象,就像字符串或常規函數一樣。(事實上,在幕后,除非你使用Python 2,他們只是在功能)。但是你能對他們做什么?
您可以像調用函數一樣調用它們:
for c in s:
print(k(c))
如果你想了解它是如何工作的,你需要知道普通的方法調用是如何工作的。
當你寫這個:
s.isalpha()
……這有兩個部分。首先,s.isalpha在isalpha方法上查找方法type(s),并將其綁定到s實例,返回一個綁定的方法對象,該對象知道它要調用isalpha并且要在上調用它s。接下來,您調用綁定方法,這是通過調用isalpha和傳遞s作為第一個 ( self) 參數來實現的。
所以,你只是手動做同樣的事情:str.isalpha只是isalpha函數,你用s第一個 ( self) 參數調用它。
添加回答
舉報