โปรดทราบว่าคำตอบที่ได้รับการยอมรับจะใช้ได้ก็ต่อเมื่อแลมบ์ดานั้นแยกกัน หากคุณส่งผ่านมันเป็นอาร์กิวเมนต์ให้กับฟังก์ชั่นและต้องการที่จะดึงรหัสของแลมบ์ดาเป็นวัตถุปัญหาจะยุ่งยากเล็กน้อยเนื่องจากinspect
จะให้ทั้งบรรทัด
ตัวอย่างเช่นพิจารณาไฟล์test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
การดำเนินการจะช่วยให้คุณ (ใจเยื้อง!):
x, f = 3, lambda a: a + 1
ในการดึงซอร์สโค้ดของแลมบ์ดาทางออกที่ดีที่สุดของคุณคือการแยกวิเคราะห์ไฟล์ต้นฉบับทั้งหมด (โดยใช้f.__code__.co_filename
) และจับคู่โหนดแลมบ์ดา AST ด้วยหมายเลขบรรทัดและบริบท
เราต้องทำอย่างแม่นยำว่าในไอคอนของห้องสมุดออกแบบตามสัญญาเนื่องจากเราต้องแยกฟังก์ชั่นแลมบ์ดาที่เราส่งผ่านเป็นอาร์กิวเมนต์สำหรับนักตกแต่ง มันเป็นรหัสที่มากเกินไปที่จะวางที่นี่ดังนั้นดูที่การใช้งานฟังก์ชั่นนี้