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)'
我是 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)'