cari

Rumah  >  Soal Jawab  >  teks badan

Soalan pemula Python tentang pembolehubah tempatan dan pembolehubah global

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学习ing2725 hari yang lalu1103

membalas semua(3)saya akan balas

  • 仅有的幸福

    仅有的幸福2017-06-12 09:26:56

    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

    balas
    0
  • 天蓬老师

    天蓬老师2017-06-12 09:26:56

    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

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:26:56

    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

    balas
    0
  • Batalbalas