นี่คือการใช้ lambdas แบบหลายบรรทัดที่น่าสนใจยิ่งขึ้น เป็นไปไม่ได้ที่จะสำเร็จเพราะไพ ธ อนใช้การเยื้องเป็นวิธีการสร้างรหัส
แต่โชคดีสำหรับเราการจัดรูปแบบการเยื้องสามารถปิดใช้งานโดยใช้อาร์เรย์และวงเล็บ
ตามที่บางคนชี้ให้เห็นคุณสามารถเขียนรหัสของคุณเช่น:
lambda args: (expr1, expr2,... exprN)
ในทางทฤษฎีหากคุณรับประกันว่าจะมีการประเมินผลจากซ้ายไปขวาจะใช้งานได้ แต่คุณก็ยังสูญเสียคุณค่าที่ถูกส่งผ่านจากนิพจน์หนึ่งไปอีกนิพจน์หนึ่ง
วิธีหนึ่งในการบรรลุสิ่งที่ verbose มากขึ้นคือการมี
lambda args: [lambda1, lambda2, ..., lambdaN]
ที่แต่ละแลมบ์ดาได้รับการขัดแย้งจากก่อนหน้านี้
def let(*funcs):
def wrap(args):
result = args
for func in funcs:
if not isinstance(result, tuple):
result = (result,)
result = func(*result)
return result
return wrap
วิธีนี้ช่วยให้คุณเขียนสิ่งที่เป็นเสียงกระเพื่อม / แบบแผนเช่น
ดังนั้นคุณสามารถเขียนสิ่งนี้:
let(lambda x, y: x+y)((1, 2))
วิธีการที่ซับซ้อนมากขึ้นสามารถใช้ในการคำนวณด้านตรงข้ามมุมฉาก
lst = [(1,2), (2,3)]
result = map(let(
lambda x, y: (x**2, y**2),
lambda x, y: (x + y) ** (1/2)
), lst)
นี่จะส่งคืนรายการหมายเลขสเกลาร์เพื่อให้สามารถใช้เพื่อลดค่าหลายค่าให้เป็นหนึ่ง
การมีแลมบ์ดาจำนวนมากนั้นไม่ได้มีประสิทธิภาพมากนัก แต่หากคุณถูก จำกัด มันอาจเป็นวิธีที่ดีในการทำสิ่งต่าง ๆ ได้อย่างรวดเร็วจากนั้นให้เขียนใหม่เป็นฟังก์ชันจริงในภายหลัง