DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Lambda in Python

Buy Me a Coffee

*Memo:

  • My post explains a function.
  • My post explains a variable assignment.

A lambda:

  • is the function expression which can be assigned to a variable and parameter and whose type is func.
  • can be created with lambda (zero or more parameters): one expression.
  • can be assigned a variable, function, lambda and class to.
  • can be defined a lambda in.
  • doesn't have def and identifier.
  • cannot have any pass statements and return statements.
  • cannot be defined any variable, function and class in.
  • Lambda Expressions explains a lambda more.

A lambda can be created with lambda (zero or more parameters): one expression as shown below:

                                    # Equivalent
v = lambda: 2                       # def func(): return 2
v = lambda: print(2)                # def func(): print(2)
v = lambda x: x                     # def func(x): return x
v = lambda x, y: x+y                # def func(x, y): return x+y
v = lambda x, y=3: x+y              # def func(x, y=3): return x+y
v = lambda x, /, y=3, *, z=5: x+y+z # def func(x, /, y=3, *, z=4):
                                    #     return x+y+z
v = lambda *x, **y: print(x, y)     # def func(*x, **y): print(x, y)
# No error       

v = lambda num: num*2
v = lambda num: (lambda num: num*2)(num)*2
v = lambda num: (lambda num: (lambda num: num*2)(num)*2)(num)*2
# No error                   

v = lambda:
v = lambda: pass
v = lambda: return 2
v = lambda: myvar = 'myvar'
v = lambda: def myfn(): return 'myfn' 
v = lambda: class mycls: return 'mycls'
# Error
Enter fullscreen mode Exit fullscreen mode

A lambda is the function expression which can be assigned to a variable and parameter whose type is func as shown below:

v = lambda x, y: x+y

print(v)
print(lambda x, y: x+y)
# <function <lambda> at 0x000001977A636980>

print(type(v))
print(type(lambda x, y: x+y))
# <class 'function'>

print(v(3, 5))
print((lambda x, y: x+y)(3, 5))
# 8

print(v(7, 2))
print((lambda x, y: x+y)(7, 2))
# 9

print(v(1, 4))
print((lambda x, y: x+y)(1, 4))
# 5
Enter fullscreen mode Exit fullscreen mode

Zero or more parameters can be set in a lambda as shown below:

v = lambda: 2

print(v())
# 2
Enter fullscreen mode Exit fullscreen mode
v = lambda: print(2)

v()
# 2
Enter fullscreen mode Exit fullscreen mode
v = lambda x: x

print(v(2))
print(v(x=2))
# 2
Enter fullscreen mode Exit fullscreen mode
v = lambda x, y=3: x+y

print(v(2))
print(v(x=2))
# 5

print(v(2, 4))
print(v(2, y=4))
print(v(x=2, y=4))
print(v(y=4, x=2))
# 6
Enter fullscreen mode Exit fullscreen mode
v = lambda x, /, y=3, *, z=5: x+y+z

print(v(2, 4, z=6))
print(v(2, y=4, z=6))
print(v(2, z=6, y=4))
# 12

print(v(2, 4))
print(v(2, y=4))
# 11

print(v(2, z=4))
# 9

print(v(2))
# 10
Enter fullscreen mode Exit fullscreen mode
v = lambda *x, **y: print(x, y)

v()
# () {}

v(0, 1)
v(*[0, 1])
# (0, 1) {}

v(A=2, B=3)
v(**{'A':2, 'B':3})
# () {'A': 2, 'B': 3}

v(0, 1, A=2, B=3)
v(*[0, 1], **{'A':2, 'B':3})
# (0, 1) {'A': 2, 'B': 3}
Enter fullscreen mode Exit fullscreen mode

Any pass and return statements cannot be set in a lambda as shown below:

*Memo:

  • The lambda without one expression gets error.
v = lambda: pass
v = lambda: return 2
# SyntaxError: invalid syntax
Enter fullscreen mode Exit fullscreen mode
v = lambda: # Without one expression
# SyntaxError: invalid syntax
Enter fullscreen mode Exit fullscreen mode

A variable, function, lambda and class can be assigned to parameters as shown below:

myvar = 'myvar'

def myfn():
    return 'myfn'

mylam = lambda: 'mylam'

class mycls:
    v = 'mycls'

v1 = lambda v, f, l, c: print(v, f(), l(), c.v)
v2 = lambda v=myvar, f=myfn, l=mylam, c=mycls: print(v, f(), l(), c.v)

v1(myvar, myfn, mylam, mycls)
v1(v=myvar, f=myfn, l=mylam, c=mycls)
v2()
# myvar myfn mylam mycls
Enter fullscreen mode Exit fullscreen mode

A lambda can be defined in a lambda as shown below:

<1D lambda>:

v = lambda num: num*2

print(v(3))
# 6
Enter fullscreen mode Exit fullscreen mode

<2D lambda>:

v = lambda num: (lambda num: num*2)(num)*2

print(v(3))
# 12
Enter fullscreen mode Exit fullscreen mode

<3D lambda>:

v = lambda num: (lambda num: (lambda num: num*2)(num)*2)(num)*2

print(v(3))
# 24
Enter fullscreen mode Exit fullscreen mode

Any variable, function and class can be defined in a lambda as shown below:

v = lambda: myvar = 'myvar'
# SyntaxError: cannot assign to lambda

v = lambda: def myfn(): return 'myfn' 
v = lambda: class mycls: return 'mycls'
SyntaxError: invalid syntax
Enter fullscreen mode Exit fullscreen mode

Top comments (0)