Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Anda Mengekstrak Nama Pembolehubah Asal daripada Argumen Fungsi dalam Python?

Bolehkah Anda Mengekstrak Nama Pembolehubah Asal daripada Argumen Fungsi dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-10-30 12:34:03395semak imbas

Can You Extract Original Variable Names from Function Arguments in Python?

Cara Mengekstrak Nama Pembolehubah Asal daripada Argumen yang Diteruskan kepada Fungsi

Pertimbangkan senario berikut: anda mempunyai fungsi yang memerlukan nama pembolehubah sebagai argumen untuk melakukan beberapa operasi berdasarkan nama itu. Adakah terdapat cara untuk mendapatkan nama pembolehubah asal dalam fungsi?

Untuk menjawab soalan ini, mari kita teroka kaedah menggunakan modul periksa yang membolehkan anda mendapatkan semula konteks panggilan dan mengekstrak nama pembolehubah daripada konteks kod .

<code class="python">import inspect

def foo(a, f, b):
    # Get the stack frame of the calling function
    frame = inspect.currentframe()
    
    # Move up one level to get the frame of the calling context
    frame = inspect.getouterframes(frame)[1]

    # Get the source code context of the calling context
    string = inspect.getframeinfo(frame[0]).code_context[0].strip()
    
    # Extract the argument names from the code context
    args = string[string.find('(') + 1:-1].split(',')
    
    names = []
    for i in args:
        if i.find('=') != -1:
            # Handle keyword arguments
            names.append(i.split('=')[1].strip())
        else:
            # Handle positional arguments
            names.append(i)
            
    print(names)

def main():
    e = 1
    c = 2
    foo(e, 1000, b = c)

main()</code>

Penjelasan:

  1. inspect.currentframe() mengambil bingkai tindanan bagi fungsi semasa, iaitu foo() dalam kes ini.
  2. inspect.getouterframes() menavigasi satu tahap ke atas dalam konteks panggilan untuk mendapatkan bingkai fungsi panggilan, main().
  3. inspect.getframeinfo() mendapatkan semula maklumat konteks kod untuk bingkai yang diperolehi.
  4. Kami mengasingkan senarai argumen dengan menghuraikan konteks kod, dan kemudian mengekstrak nama argumen, mengambil kira kedua-dua argumen kedudukan dan kata kunci.
  5. Akhir sekali, senarai pembolehubah asal nama dicetak.

Contoh Output:

['e', '1000', 'c']

Nota: Pendekatan ini melibatkan pemeriksaan timbunan panggilan dan mentafsir konteks kod sumber, yang rapuh dan terdedah kepada ralat. Ia tidak disyorkan untuk kegunaan praktikal dan hanya boleh dipertimbangkan untuk tujuan akademik atau hiburan.

Atas ialah kandungan terperinci Bolehkah Anda Mengekstrak Nama Pembolehubah Asal daripada Argumen Fungsi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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