Mengapa Fungsi Rekursif Saya Mengembalikan `Tiada` dalam Python?

Barbara Streisand
Lepaskan: 2024-11-24 12:16:24
asal
134 orang telah melayarinya

Why Does My Recursive Function Return `None` in Python?

Fungsi Rekursif Mengembalikan Tiada dalam Python Selesai

Apabila cuba mengembalikan laluan dalam fungsi rekursif, isu boleh timbul apabila "Tiada" dikembalikan sebaliknya. Ini boleh diselesaikan dengan memastikan bahawa hasil rekursif dikembalikan. Berikut ialah penjelasan tentang sebab dan cara membetulkannya:

Dalam kod yang disediakan:

def get_path(dictionary, rqfile, prefix=[]):
    for filename in dictionary.keys():
        path = prefix + [filename]
        if not isinstance(dictionary[filename], dict):
            if rqfile in str(os.path.join(*path)):
                return str(os.path.join(*path))
        else:
            get_path(directory[filename], rqfile, path)
Salin selepas log masuk

Panggilan rekursif berakhir dengan get_path(direktori[nama fail], rqfile, laluan) tanpa pemulangan . Ini bermakna jika rqfile tiada dalam str(os.path.join(*path)), fungsi itu tamat tanpa memulangkan apa-apa secara eksplisit, menghasilkan nilai pulangan lalai None.

Untuk membetulkannya, rekursif keputusan harus dikembalikan seperti itu:

else:
    return get_path(directory[filename], rqfile, path)
Salin selepas log masuk

Dengan sentiasa kembali pada penghujung fungsi, sama ada panggilan rekursif atau tidak, kami memastikan bahawa pulangan diberikan secara eksplisit, menghalang "Tiada" daripada dikembalikan.

Perhatikan bahawa yang lain selepas jika bukan isinstance(kamus[nama fail], dict): cawangan boleh dialih keluar, kerana fungsi itu sepatutnya kembali dalam kedua-dua kes: apabila rqfile berada dalam laluan dan apabila tidak, dan tidak perlu cawangan lain untuk menamatkan fungsi itu dengan mudah.

Atas ialah kandungan terperinci Mengapa Fungsi Rekursif Saya Mengembalikan `Tiada` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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