Kod pertama:
# -*- coding:gb2312 -*-
def get_wendu():
wendu = 22
print("您输入的温度是%d"%wendu)
return wendu
def get_wendu_huashi():
wendu = wendu + 3
print("您输入的新温度是%d"%wendu)
print("------1-------")
wendu = get_wendu()
print("------2-------")
get_wendu_huashi()
Hasil pelaksanaan kod pertama:
Kod kedua:
# -*- coding:gb2312 -*-
def get_wendu():
wendu = 22
print("您输入的温度是%d"%wendu)
return wendu
def get_wendu_huashi():
result = wendu + 3 #这里是对第一段代码的修正,把前面一个wendu改成了新的变量名称result
print("您输入的新温度是%d"%result)
print("------1-------")
wendu = get_wendu()
print("------2-------")
get_wendu_huashi()
Hasil pelaksanaan kod kedua:
Saya ada dua soalan:
Soalan pertama:
Mengapa pernyataan wendu = get_wendu() dilaksanakan dan hasilnya ialah: suhu yang anda masukkan ialah 22, ini bukan hanya pernyataan tugasan Apa? Sama seperti wendu = 22, tugasan sedemikian tidak akan dicetak Mengapa wendu = get_wendu() mencetak hasilnya?
Soalan kedua:
Mengapa wendu = wendu + 3 salah dalam sekeping kod pertama, tetapi bolehkah ia dilaksanakan dengan jayanya jika ia digantikan dengan hasil = wendu + 3? Adakah kerana apabila ayat wendu = wendu + 3 dilaksanakan, sistem menemui cetakan("Suhu baru yang anda masukkan ialah %d"%wendu), dan sistem tidak dapat membezakan sama ada wendu ialah wendu sebelumnya atau wendu berikutnya?
Masalah pertama anda sebenarnya ialah anda tidak memahami pelaksanaan pernyataan Wendu = get_wendu(), get_wendu() ialah ungkapan, ia akan mengembalikan nilai, dan nilai ini akan diberikan kepada pembolehubah wendu, dan get_wendu. () Ungkapan ini ialah fungsi pelaksanaan Ia akan melaksanakan penyataan yang ditakrifkan dalam badan fungsi anda dalam urutan Jika anda menulis cetakan di dalamnya, ia secara semula jadi akan melaksanakan cetakan.
Masalah kedua anda sebenarnya adalah anda tidak memahami perbezaan antara pembolehubah tempatan dan pembolehubah global Percetakan tidak mempunyai kesan sama sekali, ia hanya disebabkan oleh rujukan pembolehubah yang berbeza.
Mula-mula, mari kita bincangkan tentang kenyataan yang boleh anda jalankan di sini.
Di sini, pembolehubah wendu tidak diisytiharkan dan ditakrifkan di dalam fungsi, tetapi ia boleh digunakan secara langsung, sebenarnya, ia merujuk kepada pembolehubah global, iaitu pembolehubah yang ditakrifkan di sini. Ini juga menjelaskan mengapa keputusan yang dicetak ialah 22+3
Dan anda tidak boleh menjalankan kenyataanwendu = get_wendu()
get_wendu()
是一个函数调用,调用get_wendu
,get_wendu
里面print("您输入的温度是%d"%wendu)
就是打印wendu
Nilai pembolehubah tempatan iniwendu = wendu + 3
是因为wendu
这个变量还未定义,你就在使用它,由错误信息就可以看出来,UnboundLocalError: local variable 'wendu' referenced before assignment
print("您输入的温度是%d"%wendu)
Bukankah ayat ini hanya untuk mencetakPython akan mencari pembolehubah dalam skop semasa secara lalai Memandangkan tiada
wendu
这个变量自然也就报错了。你可以在wendu = wendu + 3
前加上一句nonlocal wendu
dalam skop semasa, ia boleh berjalan seperti biasaprint() mencetak ke output standard,
Mesej ralat ialah
Local variable 'wendu' referenced before assignment
, yang bermaksud pembolehubah wendu tidak digunakan sebelum panggilan. Saya percaya anda akan terkejut jika anda menterjemah mesej Ralat ini Nama diisytiharkan dalam wendu = get_wendu() tetapi ia mengatakan tidak, tetapi komputer tidak berkuasa rendah seperti yang anda fikirkan = =, = digunakan untuk tugasan, ia. mesti Tahu wendu yang mana.Alasannya ialah untuk penugasan pembolehubah di dalam fungsi, Python akan menganggap pembolehubah ini sebagai pembolehubah setempat, jadi wendu anda ialah pembolehubah tempatan pada masa ini dan bukan global
Anda boleh cuba mengubah suainya seperti ini
Jangan gunakan Pinyin untuk nama pembolehubah, jangan gunakan Pinyin untuk nama pembolehubah, jangan gunakan Pinyin untuk nama pembolehubah. Gunakan pembolehubah global sesedikit mungkin Mengikut keperluan anda, adalah lebih baik untuk memilih untuk lulus parameter.