2017-10-28 125 views
0

例如,我想我的代碼是:你可以將一個函數命名爲用戶輸入嗎?

name_of_function = input("Please enter a name for the function: ") 
def name_of_function(): 
    print("blah blah blah") 

這將作爲工作:

Please enter a name for the function: hello 
>>>hello() 
blah blah blah 
+2

有很多方法可以做到這一點,但是他們都尖叫着「CODE SMELL!」。 –

+3

在gods的名字爲什麼你會想要這樣做 – 0TTT0

+0

否則,你可以調用特定的功能爲特定的用戶輸入 –

回答

1
def hello(): 
    print('Hello!') 

fn_name = input('fn name: ') # input hello 
eval(fn_name)() # this will call the hello function 

警告:通常這是不好的做法,但是這是一種方式做你所要求的。

+1

這是一個解決方案,但應避免使用'''不惜任何代價eval''',因爲它會導致不必要的代碼執行。 – chowmean

+0

@chowmean,我同意。這就是爲什麼我加了我的警告。 –

+0

是的只是增加了解決方案和eval可以導致什麼。謝謝:) – chowmean

2

我會用包含每個函數引用的字典:

def func_one(): 
    print("hello") 

def func_two(): 
    print("goodbye") 

def rename_function(func_dict, orig_name, new_name): 
    func_dict[new_name] = func_dict[orig_name] 
    del func_dict[orig_name] 

functions = { 
    "placeholder_one": func_one, 
    "placeholder_two": func_two 
} 

rename_function(
    functions, 
    "placeholder_one", 
    input("Enter new greeting function name: ") 
) 

rename_function(
    functions, 
    "placeholder_two", 
    input("Enter new farewell function name: ") 
) 

while True: 
    func_name = input("Enter function to call: ") 
    if func_name in functions: 
     functions[func_name]() 
    else: 
     print("That function doesn't exist!") 

用法:

>>> Enter new greeting function name: hello 
>>> Enter new farewell function name: goodbye 
>>> Enter function to call: hello 
hello 
>>> Enter function to call: goodbye 
goodbye 
>>> Enter function to call: hi 
That function doesn't exist! 
0

可以,但你真的不應:這就對一百多個奇怪的問題和潛在的問題。但是,如果你堅持,實施將看起來像下面這樣:

def define_function(scope): 

    name_of_function = input("Enter a name for the function: ") 

    function_body = """def {}(): 

         print("Blah blah blah.") 


        """.format(name_of_function) 

    exec(function_body, scope) 

如果從Python外殼,如果導入包含此功能(在我的情況,sandbox.py)文件,並通過globals()locals()它,你可以暫時得到你想要的接口。

>>> from sandbox import * 
>>> define_function(globals()) 
Enter a name for the function: hello 
>>> hello() 
Blah blah blah. 
0
class Foo(object): 
    def foo1(self): 
     print ('call foo1') 

    def foo2(self): 
     print ('call foo2') 

    def bar(self): 
     print ('no function named this') 


def run(func_name): 
    funcs = Foo() 
    try: 
     func = getattr(funcs, func_name) 
    except Exception as ex: 
     funcs.bar() 
     return 
    func() 


func_name = raw_input('please input a function name:') 
run(func_name) 

用法:

請輸入函數名稱:foo1
呼叫foo1

請輸入函數名稱:foo3
沒有名爲此

功能
相關問題