Masalah pemindahan nilai fungsi
Mari kita lihat contoh dahulu:
# -*- coding: UTF-8 -*- def chagne_number( b ): b = 1000 b = 1 chagne_number(b) print( b )
Hasil keluaran akhir ialah:
1
Sesetengah orang di sini mungkin mempunyai soalan, mengapa nilai b tidak diubah melalui fungsi chagne_number? Mengapa tiada perubahan dan hasil keluaran masih 1 Masalah ini dibincangkan dalam banyak bahasa pengaturcaraan, dan penjelasan prinsipnya adalah serupa.
Ini terutamanya mengenai pemindahan parameter fungsi, iaitu objek jenis Jenis data asas dalam Python juga telah diperkenalkan sebelum ini. Objek jenis ini boleh dibahagikan kepada jenis yang boleh diubah dan jenis yang tidak boleh diubah Dalam Python, rentetan, integer, jenis titik terapung dan tuple ialah objek yang tidak boleh ditukar, manakala senarai, dict, dsb. ialah objek yang boleh diubah.
Contohnya:
Jenis tidak boleh ubah: Tugasan pembolehubah a = 1 sebenarnya menjana objek integer 1, dan kemudian pembolehubah a menunjuk kepada 1. Apabila a = 1000, ia sebenarnya menjana objek integer lain 1000, dan kemudian menukar nilai Mata kepada, tidak lagi menunjuk kepada objek integer 1, tetapi mata kepada 1000, dan 1 terakhir akan dibuang
Jenis boleh ubah: penugasan pembolehubah a = [1,2,3,4,5,6 ], iaitu untuk menjana senarai objek, terdapat 6 elemen dalam senarai, dan pembolehubah a menunjuk ke senarai, a[2] = 5 mengubah nilai elemen ketiga senarai a di atas. Ia tidak mengubah hala a, tetapi secara langsung mengubah suai nilai elemen dalam senarai.
Ini juga akan menjejaskan penghantaran parameter dalam fungsi:
Jenis tidak berubah: Hantaran nilai seperti C++, seperti integer, rentetan dan tupel. Sebagai contoh, fun(a) hanya memindahkan nilai a dan tidak menjejaskan objek itu sendiri. Sebagai contoh, mengubah suai nilai keseronokan dalam(a) hanya mengubah suai objek yang disalin dan tidak menjejaskan objek itu sendiri.
Jenis boleh tukar: serupa dengan hantaran rujukan c++, seperti senarai dan kamus. Sebagai contoh, keseronokan(a), a sebenarnya dihantar kepadanya Selepas pengubahsuaian, keseronokan luar juga akan terjejas Oleh itu, dalam contoh pertama, b = 1, objek integer 1 dicipta, dan pembolehubah b menunjuk kepada Objek ini diperoleh, dan kemudian apabila melepasi fungsi chagne_number, pembolehubah b disalin mengikut nilai Apa yang diluluskan hanyalah nilai b, dan tidak menjejaskan b itu sendiri. Untuk butiran, anda boleh melihat contoh yang diubah suai dan mempunyai pemahaman yang lebih baik melalui hasil cetakan. # -*- coding: UTF-8 -*-
def chagne_number( b ):
print('函数中一开始 b 的值:{}' .format( b ) )
b = 1000
print('函数中 b 赋值后的值:{}' .format( b ) )
b = 1
chagne_number( b )
print( '最后输出 b 的值:{}' .format( b ) )
Hasil cetakan:
函数中一开始 b 的值:1 函数中 b 赋值后的值:1000 最后输出 b 的值:1
Sudah tentu, jika parameter adalah jenis yang boleh diubah, maka selepas memanggil fungsi ini, nilai asal juga akan ditukar Contoh khusus adalah seperti berikut:
# -*- coding: UTF-8 -*- def chagne_list( b ): print('函数中一开始 b 的值:{}' .format( b ) ) b.append(1000) print('函数中 b 赋值后的值:{}' .format( b ) ) b = [1,2,3,4,5] chagne_list( b ) print( '最后输出 b 的值:{}' .format( b ) )
Hasil output:
函数中一开始 b 的值:[1, 2, 3, 4, 5] 函数中 b 赋值后的值:[1, 2, 3, 4, 5, 1000] 最后输出 b 的值:[1, 2, 3, 4, 5, 1000].