Harap diingat bahwa jawaban yang diterima hanya berfungsi jika lambda diberikan pada baris terpisah. Jika Anda meneruskannya sebagai argumen ke fungsi dan ingin mengambil kode lambda sebagai objek, masalahnya menjadi sedikit rumit karena inspect
akan memberi Anda seluruh baris.
Misalnya, pertimbangkan sebuah file test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
Melaksanakannya memberi Anda (ingatlah indensi!):
x, f = 3, lambda a: a + 1
Untuk mengambil kode sumber lambda, taruhan terbaik Anda, menurut saya, adalah mengurai kembali seluruh file sumber (dengan menggunakan f.__code__.co_filename
) dan mencocokkan node lambda AST dengan nomor baris dan konteksnya.
Kami harus melakukan tepat bahwa di perpustakaan kami desain-by-kontrak icontract karena kami harus mengurai fungsi lambda kita lulus sebagai argumen untuk dekorator. Terlalu banyak kode untuk disisipkan di sini, jadi lihat implementasi dari fungsi ini .