Pemula Python, mengenai isu fungsi
高洛峰
高洛峰 2017-06-12 09:26:03
0
4
951

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?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(4)
洪涛

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()

Dan anda tidak boleh menjalankan kenyataan

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.

仅有的幸福
  1. get_wendu() 是一个函数调用,调用 get_wenduget_wendu 里面 print("您输入的温度是%d"%wendu) 就是打印 wendu Nilai pembolehubah tempatan ini

  2. wendu = wendu + 3 是因为 wendu 这个变量还未定义,你就在使用它,由错误信息就可以看出来,UnboundLocalError: local variable 'wendu' referenced before assignment

阿神
  1. print("您输入的温度是%d"%wendu) Bukankah ayat ini hanya untuk mencetak

  2. 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

仅有的幸福
  1. Fungsi

    print() mencetak ke output standard,

        print("您输入的温度是%d"%wendu)
        # print会打印括号中的内容,%d表示格式化输出int类型,
        # 其实这句话和print(("您输入的温度是22")是等价的
  2. 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)
  3. 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.

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