Неожиданный вывод для лямбда-питона 3 - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь использовать лямбду для варианта использования, но, похоже, он не работает. Вот что я попробовал

Ниже я использовал то, что в стеке я сталкивался со многими людьми, получающими выход для этого, но для меня его нет

from __future__ import print_function
f = lambda x: print(x)
f()
f("Hello") ### now out put is shown expected is Hello output
f("Hello") is None ## I checked if its None and it is
>>> True 

enter image description here тогда я попробовал что-то еще

l = lambda x : sys.stdout.write(x)
l('hello') # this time its showing output as 5 instead of printing hello
>>> 5

enter image description here

Я даже попробовал что-то, что не использует лямбду, к сожалению, это тоже не работает, и получил None

from functools import partial
spam = partial(print, 'Hello!')
spam()
spam() is None
>>> True

Я получил это из последнего ответа на этот вопрос назначение функции печати переменной

Может ли кто-нибудь помочь мне, что мне не хватает и почему я не могу напечатать строку?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018
l = lambda x : sys.stdout.write(x)
l('hello') # this time its showing output as 5 instead of printing hello
>>> 5

это, вероятно, потому что запись не очищена, вы можете принудительно вызвать это, вручную вызвав

sys.stdout.flush()

Что касается того, почему он возвращает hello5, потому что оболочка Python выводит возвращаемое значение предыдущего оператора, sys.stdout.write() возвращает количество записанных символов, которое в случае 'hello' равно 5. Таким образом, они объединяются в hello5. Если вы запустите это в обычном файле Python, т.е. python filename.py, он никогда не напечатает 5 и только hello.

0 голосов
/ 10 ноября 2018

Чего не ожидается? что f('Hello') is None оценивается как True? Ну, это ожидается, потому что это None.

lambda x: print(x) не имеет «возврата», только побочный эффект, и побочным эффектом является печать материала на выход. Это похоже на функцию

def func(x): 
    print(x)

, который не имеет оператора возврата, следовательно, если вы оцените функцию, ее вывод будет None.

...