Saya memiliki dua file main.py dan val.py. Nilai diambil dari val.py di file utama dan kemudian saya ingin memperbarui variabel di file asli. Kemudian gunakan nilai itu lebih lanjut dalam perhitungan. Setiap kali saya memanggil fungsi, saya ingin mendapatkan nilai yang diperbarui daripada nilai awal. Tapi saya hanya mendapatkan nilai awal di sini.

Val.py

num = 0

#update the original value
def update(num):
  num +=1
  return 

#get the current 'num' value
def current():
  return num

Main.py

import val

val.update(val.current())

print(val.current())

Variabel global tidak diperbarui. Sepertinya saya tidak dapat menemukan masalah yang benar di sini. Saya meneruskan nilai-nilai juga dalam fungsi sebagai argumen. Akan sangat membantu jika seseorang bahkan bisa memberikan petunjuk.

0
Anandakrishnan 27 November 2021, 08:36
AFAIK, saat Anda melakukan num +=1, Anda membuat salinan num, karena bilangan bulat tidak dapat diubah: id(num) => 4511967504; num+=1; id(num) => 4511967536. Saya rasa tidak mungkin untuk memperbarui bilangan bulat yang diteruskan sebagai argumen ke fungsi lain
 – 
ForceBru
27 November 2021, 09:05
Apakah ada solusi?
 – 
aei_kay
27 November 2021, 09:07
1
Menggunakan global seperti pada jawaban di bawah ini mungkin merupakan solusi terbersih
 – 
ForceBru
27 November 2021, 09:09

1 menjawab

Jawaban Terbaik

Di update(), Anda telah membayangi variabel num modul dengan variabel lokal yang juga disebut num. Jika Anda menghapusnya dan menggunakan kata kunci global, Anda dapat mengubah nilai num modul.

num = 0

def update():
    global num
    num += 1
3
rchome 27 November 2021, 09:04
Mengerti. Terima kasih.
 – 
aei_kay
27 November 2021, 09:10
Kueri lain, tetapi mengapa current() mengembalikan nilai pembaruan yang benar tanpa menggunakan kata kunci global?
 – 
aei_kay
27 November 2021, 09:38
1
Kata kunci global memungkinkan Anda untuk mengubah variabel di luar cakupan fungsi Anda. Jika Anda hanya membaca variabel, Anda tidak membutuhkannya.
 – 
rchome
27 November 2021, 09:49