Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah ungkapan lambda menangkap pembolehubah luaran?

Bagaimanakah ungkapan lambda menangkap pembolehubah luaran?

WBOY
WBOYasal
2024-04-25 17:24:01466semak imbas

Ungkapan lambda menangkap pembolehubah luaran dengan membuat rujukan kepada pembolehubah dalam skop luaran Langkah-langkah khusus termasuk: Apabila ungkapan lambda menggunakan pembolehubah luaran, ia menangkap pembolehubah. Ungkapan Lambda hanya boleh menangkap pembolehubah tempatan dalam fungsi luaran, bukan pembolehubah global. Jika pembolehubah luaran ditetapkan semula, rujukan yang ditangkap dalam ungkapan lambda juga dikemas kini.

lambda 表达式如何捕获外部变量?

Cara ungkapan lambda menangkap pembolehubah luaran

ungkapan lambda ialah fungsi tanpa nama yang boleh mengakses pembolehubah dalam skop yang disertakan. Apabila ungkapan lambda menangkap pembolehubah luaran, ia mencipta rujukan kepada pembolehubah itu.

Syntax

lambda 参数列表: 表达式

Tangkap pembolehubah luaran

Jika ungkapan lambda menggunakan pembolehubah yang diisytiharkan dalam skop luaran, ia akan ditangkap.

# 定义外部函数
def outer_function():
    outer_variable = 10

    # 定义 lambda 表达式,捕获 outer_variable
    my_lambda = lambda: outer_variable

# 调用 lambda 表达式,获取外部变量
result = my_lambda()
print(result)  # 输出: 10

Nota

Ekspresi lambda hanya boleh menangkap pembolehubah tempatan dalam fungsi luaran, bukan pembolehubah global. Selain itu, jika pembolehubah luaran ditetapkan semula, rujukan yang ditangkap dalam ungkapan lambda juga dikemas kini.

Contoh praktikal

# 使用 lambda 表达式对列表中的数字进行排序
numbers = [4, 2, 8, 1, 6]

# 根据数字的平方对列表进行排序
sorted_numbers = sorted(numbers, key=lambda x: x**2)

# 打印排序后的列表
print(sorted_numbers)  # 输出: [1, 4, 2, 6, 8]

Dalam contoh ini, ungkapan lambda menangkap kuasa dua x 变量,并计算 x dalam skop luar sebagai asas pengisihan.

Atas ialah kandungan terperinci Bagaimanakah ungkapan lambda menangkap pembolehubah luaran?. 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