有趣的“你好,世界”面试

9 投票
4 回答
2405 浏览
提问于 2025-04-16 23:20

我们在办公室面试时会问一个问题,内容是这样的。为了保持一致性,我将这个问题限制在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

撰写回答