Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mengesan Sama ada Pembolehubah Mewakili Fungsi dalam Python?

Bagaimana untuk Mengesan Sama ada Pembolehubah Mewakili Fungsi dalam Python?

Susan Sarandon
Lepaskan: 2024-10-18 20:00:31
asal
1004 orang telah melayarinya

How to Detect Whether a Variable Represents a Function in Python?

Mengesan Sama ada Pembolehubah ialah Fungsi

Dalam Python, menentukan sama ada pembolehubah mewakili fungsi boleh membingungkan. Pendekatan intuitif, isinstance(x, function), gagal disebabkan rujukan 'fungsi' yang tidak ditentukan.

Penyelesaian 1: callable()

Untuk Python 2.x atau 3.2 , callable() menyediakan semakan langsung dan mudah:

<code class="python">callable(x)</code>
Salin selepas log masuk

Penyelesaian 2: panggilan Atribut (Python 3.x Sebelum 3.2)

Sebelum Python 3.2, seseorang mesti memeriksa objek untuk atribut __call__:

<code class="python">hasattr(x, '__call__')</code>
Salin selepas log masuk

Kaveat dengan Jenis dan Pemeriksaan

Sambil menaip.Jenis Fungsi dan periksa Kaedah .isfunction wujud, ia mungkin memberikan hasil yang tidak dijangka. Fungsi bukan Python, seperti banyak binaan, mengembalikan Palsu menggunakan kaedah ini:

<code class="python">import types, inspect
isinstance(open, types.FunctionType) # False
callable(open) # True</code>
Salin selepas log masuk

Amalan Terbaik: Menaip Itik

Daripada bergantung pada isinstance atau periksa, pendekatan pilihan adalah untuk memeriksa sama ada objek boleh dipanggil, meniru prinsip "jenis itik":

<code class="python">def quacks_like_a_function(x):
    return callable(x)</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Sama ada Pembolehubah Mewakili Fungsi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan