Rumah > Soal Jawab > teks badan
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?
PHP中文网2017-06-12 09:28:03
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.
def get_wendu_huashi():
result = wendu + 3
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+3wendu = get_wendu()
def get_wendu_huashi():
wendu = wendu + 3
print("您输入的新温度是%d"%wendu)
Pembolehubah baru wendu sebenarnya diisytiharkan dalam skop dalaman fungsi, yang belum ditakrifkan Kemudian pembolehubah wendu dalam wendu+3 merujuk kepada pembolehubah baru yang tidak ditentukan ini, yang secara semula jadi menyebabkan ralat. Fahami skop global dan skop tempatan dan anda akan tahu di mana silapnya.
仅有的幸福2017-06-12 09:28:03
get_wendu()
是一个函数调用,调用 get_wendu
,get_wendu
里面 print("您输入的温度是%d"%wendu)
就是打印 wendu
Nilai pembolehubah tempatan ini
wendu = wendu + 3
是因为 wendu
这个变量还未定义,你就在使用它,由错误信息就可以看出来,UnboundLocalError: local variable 'wendu' referenced before assignment
阿神2017-06-12 09:28:03
print("您输入的温度是%d"%wendu)
Bukankah ayat ini hanya untuk mencetak
Python akan mencari pembolehubah dalam skop semasa secara lalai Memandangkan tiada wendu
这个变量自然也就报错了。你可以在 wendu = wendu + 3
前加上一句 nonlocal wendu
dalam skop semasa, ia boleh berjalan seperti biasa
仅有的幸福2017-06-12 09:28:03
print() mencetak ke output standard,
print("您输入的温度是%d"%wendu)
# print会打印括号中的内容,%d表示格式化输出int类型,
# 其实这句话和print(("您输入的温度是22")是等价的
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
def get_wendu_huashi():
global wendu
wendu = wendu + 3
print("您输入的新温度是%d"%wendu)
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.