Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am a beginner in python, and I was playing around with lambda functions. I was writing a program using lambda function to print characters that are +1 the ascii value of the input characters. My code is

#!/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)

I have a function convert_ascii that does the same thing as lambda. However, my output is

/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>

The purpose of this script is learning lambda, though there are other ways to do this program. Please let me know what am I doing wrong. Process finished with exit code 0

like image 268
pkill Avatar asked Sep 19 '15 15:09

pkill


1 Answers

You aren't calling the function. It's the same as if you wrote print convert_ascii instead of print convert_ascii(i).

Try

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

Note that I changed ord(i) to ord(x) in the function body.

like image 72
saulspatz Avatar answered Sep 21 '22 10:09

saulspatz