您能從用戶輸入調用函數嗎?類似這樣的:來自用戶輸入的Python調用函數
def testfunction(function):
function()
a = raw_input("fill in function name: "
testfunction(a)
所以如果你填寫一個現有的函數,它會執行它。
您能從用戶輸入調用函數嗎?類似這樣的:來自用戶輸入的Python調用函數
def testfunction(function):
function()
a = raw_input("fill in function name: "
testfunction(a)
所以如果你填寫一個現有的函數,它會執行它。
是的,你可以,雖然這通常是一個壞主意和一個很大的安全風險。
def testfunc(fn):
fn()
funcname = raw_input('Enter the name of a function')
if callable(globals()[funcname]):
testfunc(globals()[funcname])
你在做什麼壞壞壞:P然而,這是完全可能的。
a = raw_input("Fill in function name:")
if a in locals().keys() and callable(locals()['a']):
locals()['a']()
else:
print 'Function not found'
locals()
返回所有的對象目前avalible,他們的名字的字典。所以當我們說a in locals().keys()
我們說,「是否有任何對象叫」。如果存在,我們通過執行locals()['a']
來獲取它,然後使用callable
測試它是否是函數。如果這是True
,那麼我們稱之爲函數。如果不是,我們只需打印"Function not found"
。
我可能會封裝這種行爲的一類:
class UserExec(object):
def __init__(self):
self.msg = "hello"
def get_command(self):
command = str(raw_input("Enter a command: "))
if not hasattr(self, command):
print "%s is not a valid command" % command
else:
getattr(self, command)()
def print_msg(self):
print self.msg
a = UserExec()
a.get_command()
正如其他人所說,這是一個安全風險,但更多的控制,你必須在輸入,風險就越少是;把它放在一個包括仔細的輸入審查幫助的類中。
這個程序是否具體版本? Python 3.x看起來有什麼不同? – 2016-12-28 19:04:34
@ArashHowaida有點不同,但它是基本的東西,沒有任何意外的或不尋常的 - 在這種情況下,只需要'print'和'raw_input'需要改變。我總是建議人們熟悉它們之間的區別[這裏](https://docs.python.org/3/whatsnew/3.0.html)。 – senderle 2016-12-28 21:25:10