使用raw_input()作为参数

时间:2016-12-15 20:43:15

标签: python python-2.7

def func(raw_input()):
    #stuff goes here..

为什么不能使用raw_input()作为参数?

3 个答案:

答案 0 :(得分:3)

因为函数调用的返回值在语义上与参数不同。 raw_input()返回一个字符串;参数必须是接受传入值的标识符。

答案 1 :(得分:2)

你不能。

BTW,您可能会错误地认为使用命名参数可以起作用:

def func(s=raw_input()):
    print(s)

func()
func()

然后唯一的问题是它只是似乎才能工作。第一次调用func()时,会通过提示您输入字符串来评估s

第二次,s的默认值已知且您没有被提示。

答案 2 :(得分:0)

试试这个奇怪的OOP解决方案。

class Runnable:
    def __init__(self,function,  *args, **kwargs):
        self.function = function
        self.args = args
        self.kwargs = kwargs
    def run(self):
        return self.function(*self.args, **self.kwargs)

Runnable使用函数和参数加载对象。当您准备好时,.run()会执行。

以下是它的用法:

def func(runnable_thing):
    print(runnable_thing.run())   

super_raw = Runnable(raw_input, "Please Type your Input: ")

func(super_raw) # prints input from raw  

很酷的是,我制作的Runnable类也适用于其他具有更大参数的函数。

import datetime
foo = Runnable(datetime.datetime, 2016, 12, 15 ) ## foo is not yet a datetime object 
bar = foo.run() ## bar is a datetime object  

如果您不是最后.run()的粉丝,那么我们可以按照Deloith's建议使用__call__()让Runnable感觉像是一个功能。

class Runnable:
    def __init__(self,function,  *args, **kwargs):
        self.function = function
        self.args = args
        self.kwargs = kwargs
    def __call__(self):
        return self.function(*self.args, **self.kwargs)  

从这一点开始,我们真的觉得我们已经创建了一个新功能。

   def func(runnable_thing):
        print(runnable_thing()) 

    super_raw = Runnable(raw_input, "Please Type your Input: ")  

    func(super_raw) # prints input from raw     

试试尺寸,让我知道你喜欢它。