Im new to python so forgive me if Im not applying best practices and I welcome any feedback to help doing the code below the python way. I have the following code and the out put is making me very confused and not sure how to fix in order to get the expected output. Im getting the name Sal on both greetings:
from time import sleep
import threading
def printGreating(get_greeting):
sleep(5)
greeting = get_greeting()
print(greeting)
def createGreeting(greeting,name):
return greeting+' '+ name
nameslist = ["Sam","Sal"]
threads = []
for n in nameslist:
print(n)
if n == "Sam":
create_greeting_l = lambda : createGreeting("Hello",n)
else:
create_greeting_l = lambda : createGreeting("Greeting",n)
t = threading.Thread(target=printGreating, args=(create_greeting_l,))
t.start()
threads.append(t)
for t in threads:
t.join()
print('-------------------Completed--------------')
Expected output:
Sam
Sal
Hello Sam
Greeting Sal
-------------------Completed--------------
What Im getting:
Sam
Sal
Greeting Sal
Hello Sal
Expected output:
Sam Sal Hello Sam Greeting Sal
What Im getting: Sam Sal Greeting Sal Hello Sal
UPDATED Dec 22,2022:
I finally figured out the fix. the name should be passed as parameter to the lambda funntion:
if n == "Sam":
create_greeting_l = lambda a : createGreeting("Hello",a)
else:
create_greeting_l = lambda a : createGreeting("Greeting",a)
t = GreeterClass(create_greeting_l,n)