def func(raw_input()):
#stuff goes here..
为什么不能使用raw_input()作为参数?
答案 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
试试尺寸,让我知道你喜欢它。