Saya ingin mengembalikan dua nilai dari suatu fungsi dalam dua variabel yang terpisah. Sebagai contoh:
def select_choice():
loop = 1
row = 0
while loop == 1:
print('''Choose from the following options?:
1. Row 1
2. Row 2
3. Row 3''')
row = int(input("Which row would you like to move the card from?: "))
if row == 1:
i = 2
card = list_a[-1]
elif row == 2:
i = 1
card = list_b[-1]
elif row == 3:
i = 0
card = list_c[-1]
return i
return card
Dan saya ingin dapat menggunakan nilai-nilai ini secara terpisah. Ketika saya mencoba menggunakan return i, card
, ia mengembalikan a tuple
dan ini bukan yang saya inginkan.
else: continue
sebelum pernyataan pengembalianJawaban:
Anda tidak dapat mengembalikan dua nilai, tetapi Anda bisa mengembalikan a
tuple
atau alist
dan membukanya setelah panggilan:On line
return i, card
i, card
berarti membuat tuple. Anda juga dapat menggunakan tanda kurung sepertireturn (i, card)
, tetapi tupel dibuat dengan koma, jadi paren tidak wajib. Tetapi Anda dapat menggunakan parens untuk membuat kode Anda lebih mudah dibaca atau untuk membagi tuple menjadi beberapa baris. Hal yang sama berlaku untuk saluranmy_i, my_card = select_choice()
.Jika Anda ingin mengembalikan lebih dari dua nilai, pertimbangkan untuk menggunakan tuple bernama . Ini akan memungkinkan pemanggil fungsi untuk mengakses bidang nilai yang dikembalikan dengan nama, yang lebih mudah dibaca. Anda masih dapat mengakses item tuple berdasarkan indeks. Sebagai contoh dalam
Schema.loads
metode kerangka kerja Marshmallow mengembalikan suatuUnmarshalResult
yangnamedtuple
. Jadi kamu bisa melakukan:atau
Dalam kasus lain, Anda dapat mengembalikan a
dict
dari fungsi Anda:Tetapi Anda mungkin ingin mempertimbangkan untuk mengembalikan instance kelas utilitas, yang membungkus data Anda:
sumber
Seperti apa yang Anda harapkan di ujung telepon? Kamu tidak bisa menulis
a = select_choice(); b = select_choice()
karena itu akan memanggil fungsi dua kali.Nilai tidak dikembalikan "dalam variabel"; itu bukan cara kerja Python. Fungsi mengembalikan nilai (objek). Variabel hanyalah nama untuk nilai dalam konteks yang diberikan. Saat Anda memanggil suatu fungsi dan menetapkan nilai balik di suatu tempat, yang Anda lakukan adalah memberi nilai yang diterima nama dalam konteks panggilan. Fungsi tidak menempatkan nilai "ke dalam variabel" untuk Anda, tugasnya (tidak peduli bahwa variabel itu bukan "penyimpanan" untuk nilai, tetapi sekali lagi, hanya nama).
Sebenarnya, itulah yang Anda inginkan. Yang harus Anda lakukan adalah
tuple
membongkar lagi.Jadi ambil saja nilai dari
tuple
.Cara termudah untuk melakukan ini adalah dengan membongkar:
sumber
Saya pikir Anda yang Anda inginkan adalah tuple. Jika Anda menggunakan
return (i, card)
, Anda bisa mendapatkan dua hasil ini dengan:sumber
sekarang Anda dapat melakukan semua yang Anda suka dengan tuple Anda.
sumber
sumber
Dan ini merupakan alternatif. Jika Anda kembali sebagai daftar maka mudah untuk mendapatkan nilai.
sumber
Anda bisa mencoba ini
sumber
Anda dapat mengembalikan lebih dari satu nilai menggunakan daftar juga. Periksa kode di bawah ini
sumber