有趣的“你好,世界”面试
我们在办公室面试时会问一个问题,内容是这样的。为了保持一致性,我将这个问题限制在Python语言上。我相信还有其他答案,但我只对Python的答案感兴趣。
请写一个名为 say
的函数,当这样调用时:
>>> say('Hello')('World')
它只会打印(而不是返回):
>>> say('Hello')('World')
Hello World
>>>
今天面试后,我们进行了一个关于这个问题的讨论,我表示我总是希望应聘者能给出以下答案。
def say(x):
print "Hello World"
return lambda a:None
我意识到可以通过用某种内置函数替换 lambda
函数来进一步缩短这个函数,这个内置函数返回 None
,但我查找后发现没有比 lambda a:None
更短的。
所以这里的总体问题是……
你能想到一种方法来使这个函数更短吗,也就是说字符总数更少(忽略换行符)。任何导入语句都算在你的字符数里。(52个字符)
更新
(39个字符)
>>> def p(x):
... print "Hello",x
>>> say=lambda x:p
>>> say("Hello")("World")
Hello World
>>>
Python 3 的答案
(48个字符)
>>> def say(x):
... return lambda a:print("Hello World")
>>> say("Hello")("World")
Hello World
>>>
4 个回答
5
至少在Python 3中,print
是一个函数,它的返回值是None
,所以你可以这样做:
def say(x):
return lambda a: print ('Hello World')
或者(省下几个字符):
say=lambda x:lambda y:print("Hello World")
7
def say(x):
print x,
return say
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。
14
Python 2.x 的答案
一个明显的答案,但其实不算,因为它返回的是字符串,而不是直接打印出来:
>>> say = lambda x: lambda y: x + " " + y
>>> say('Hello')('World')
'Hello World'
这个方法总共是45个字符,包括换行符:
def p(x):
print "Hello World"
say=lambda x:p
这个方法把字符数减少到了41个,但看起来有点奇怪,因为它只用了一个参数,而没有用另一个:
def p(x):
print "Hello",x
say=lambda x:p
Python 3.x 的答案
36个字符:
>>> say=lambda x:lambda y:print(x+" "+y)
>>> say('Hello')('World')
Hello World
38个字符:
>>> say=lambda x:print(x,end=' ') or print
>>> say('Hello')('World')
Hello World