Python lambda 函数打印 <function <lambda> at 0x7fcbbc740668> 而不是值

Python lambda function printing <function <lambda> at 0x7fcbbc740668> instead of value

我是 python 的初学者,我正在研究 lambda 函数。 我正在编写一个程序,使用 lambda 函数来打印输入字符的 ascii 值 +1 的字符。我的密码是

#!/usr/bin/python
import sys
try:
  word = sys.argv[1]
except:
  print "No arguments passed"
  sys.exit(1)

def convert_ascii(char):
  return  "".join(chr(ord(char) + 1))

for i in word:
  print convert_ascii(i)
  print lambda x: chr(ord(i) + 1)

我有一个函数 convert_ascii,其功能与 lambda 相同。但是,我的输出是

/usr/bin/python2.7 /home/user1/PycharmProjects/test/Tut1/asciipl2.py "abc def ghi"
b
<function <lambda> at 0x7f0310160668>
c
<function <lambda> at 0x7f0310160668>
d
<function <lambda> at 0x7f0310160668>
!
<function <lambda> at 0x7f0310160668>
e
<function <lambda> at 0x7f0310160668>
f
<function <lambda> at 0x7f0310160668>
g
<function <lambda> at 0x7f0310160668>
!
<function <lambda> at 0x7f0310160668>
h
<function <lambda> at 0x7f0310160668>
i
<function <lambda> at 0x7f0310160668>
j
<function <lambda> at 0x7f0310160668>

此脚本的目的是学习 lambda,尽管还有其他方法可以执行此程序。请让我知道我做错了什么。 进程已结束,退出代码为 0

当前您正在打印一个函数对象。您必须调用该函数。

在一个变量中接收函数并使用参数调用它。

for i in word:
  print convert_ascii(i)
  fun=lambda x: chr(ord(x) + 1)
  print fun(some_arg) 

您正在尝试打印函数本身。取而代之的是,将函数分配给变量,并将参数传递给变量,或者在 print 本身中使用相同的参数。

for i in word:
  z = lambda x: chr(ord(x) + 1)
  print z(i)

for i in word:
  print (lambda x: chr(ord(x) + 1))(i)

或者学习地图,你可以使用地图得到相同的结果

for i in word:
  print "".join(map(lambda x: chr(ord(x) + 1), i))

Lambda 关键字returns 匿名函数:

>>> func = lambda x: x+1
>>> print(func)
<function <lambda> at 0x7f0310160668>

以上(不算幕后魔术)相当于:

>>> def func(x):
        return x+1

>>> print(func)
<function func at 0x7fa73d3e6bf8>

要调用函数,无论是否为 lambda,您仍然必须调用它:

>>> print(func)
<function <lambda> at 0x7f0310160668>
>>> func(123)
124

也就是说,Lambda 不太适合这种情况,如果函数或构造需要短函数,则更好地使用它。

>>> word = "spam"
>>> map(lambda x: chr(ord(x) + 1), word)

您没有调用函数。这和你写的一样 print convert_ascii 而不是 print convert_ascii(i).

尝试

print (lambda x: chr(ord(x) + 1))(i)

请注意,我在函数体中将ord(i)更改为ord(x)

这里是我试图展示如何调用 lambda 函数的代码。但是您可以在不使用 lambda 的情况下获得相同的输出。只是 chr(ord(i) + 1) 给出了你想要的输出。

word = 'py'

for i in word:
    print((lambda: chr(ord(i) + 1) )(), end='')
    # used lambda function as '(lambda)()' format to invoke on the spot

word = 'py'

for i in word:
    fun = lambda: chr(ord(i) + 1) 
    print(fun(),end='')
    # assigning lambda function to a varibale and then invoking by suffising () with fun

输出:

qz

如果你想在 lambda 中保留争论,那么你必须传递参数或将值或变量分配给争论,否则会引发错误 示例:

for i in word:
    fun = lambda x=i:do somethibng
    print(fun()) #invoked

你也可以通过这种方式传递参数 -> '(lambda function)(parmater)'