Soalan pemula Python tentang pembolehubah tempatan dan pembolehubah global
学习ing
学习ing 2017-06-12 09:24:56
0
3
1100

Kod pertama:

# -*- coding:gb2312 -*-
nums = [11,22,33,44,55]

def nums_chang():
    nums = [11,22,33,44,55,999]
    print(nums)

nums_chang() # 打印出来是[11,22,33,44,55,999]
print(nums)  # 打印出来是[11,22,33,44,55]

Hasil larian:

Kod kedua:

# -*- coding:gb2312 -*-
nums = [11,22,33,44,55]

def nums_chang():
    nums.append(999)  # 打印出来是[11,22,33,44,55,999]
    print(nums)       # 打印出来是[11,22,33,44,55,999]

nums_chang()
print(nums)

Hasil larian:

Soalan saya ialah:
Mengapa kedua-dua hasil yang dicetak oleh kod pertama berbeza, tetapi hasil yang dicetak oleh kod kedua adalah sama? Terutamanya sekeping kod kedua, mengapa arahan tambah dalam fungsi boleh mengubah suai pembolehubah global di luar. Dalam sekeping kod pertama, senarai itu ditakrifkan semula, tetapi pembolehubah global luaran tidak boleh diubah suai? Apa sebab di sini?

学习ing
学习ing

membalas semua(3)
仅有的幸福

Selepas membaca jawapan yang diterima, saya rasa saya masih terlepas perkara itu.
Pertama sekali, pembolehubah nums ditakrifkan sebagai pembolehubah global, yang bermaksud bahawa dalam fail ".py" ini, semua kelas dan fungsi boleh menggunakannya. Tetapi semua pembolehubah juga merupakan objek, dan objek dibahagikan kepada boleh berubah dan tidak berubah. Senarai adalah objek boleh ubah, yang bermaksud ia boleh diubah. Jadi apakah objek boleh berubah? Mereka adalah mereka yang boleh beroperasi pada objek tanpa menjejaskan penciptaan dan kematian mereka dalam ingatan. Masukkan x="234", dan jika anda menetapkan nilai lain, x="111". Sebenarnya, dua x itu sudah menjadi dua objek, ia hanya ditutup, iaitu, x = x + "123", dan x juga merupakan objek baru.

Jika ia adalah senarai, x = [1,2,3], sekarang beroperasi padanya, x.remove(1), maka objek x masih objek x, tetapi nilai objek telah berubah

Sekeping kod pertama: Ia adalah penugasan semula Dalam skop yang berbeza, nombor ditetapkan semula, supaya nombor pembolehubah global dan pembolehubah nombor dalam fungsi nums_chang tidak lagi menjadi objek yang sama, jadi ia muncul apabila anda mencetak nilai yang berbeza Pada masa ini, pembolehubah nums dalam fungsi nums_chang sudah menjadi pembolehubah tempatan dan hanya digunakan oleh fungsi ini

Sekeping kod kedua: nums ialah senarai dan objek berubah, jadi operasi pada senarai tidak menjejaskan objek ini, jadi objek ini masih bersifat global Pembolehubah global digunakan dalam fungsi dan di luar, jadi selepas anda ubah suainya, nilai pembolehubah global juga diubah suai

Peter_Zhu

Pertama: Berkenaan isu skop, anda boleh merujuk kepada salah satu artikel saya dahulu: Python: Scope dan LEGB, anda boleh membandingkan dahulu 变量的查找有个基本的认识,然后我们能够看到, 因为有赋值语句, 所以numsIa hanya akan mencari dari skop tempatan dan tidak akan berinteraksi dengan skop global

Kedua: Berdasarkan yang pertama, kita dapat lihat bahawa nums.append(999)中的nums是从全局作用域找到的, 又因为用的是append方法, 这方法是直接用于源列表本身, 所以你看到全局的numsjuga telah dikemas kini

扔个三星炸死你

Jika fungsi tidak dapat mencari pembolehubah dalam skopnya sendiri, ia akan kembali ke skop sebelumnya untuk mencarinya Beginilah cara yang kedua anda terhasil.
Jika ia yang pertama, jelas sekali anda telah memberi nilai

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan