Apa tujuan dari pernyataan pengembalian?

Jawaban:

100

The print()Fungsi menulis, yaitu, "cetakan", string di konsol. The returnpernyataan menyebabkan fungsi Anda untuk keluar dan tangan kembali nilai ke pemanggil nya. Titik fungsi secara umum adalah untuk menerima masukan dan mengembalikan sesuatu. The returnpernyataan digunakan ketika fungsi siap untuk mengembalikan nilai ke pemanggil nya.

Misalnya, inilah fungsi yang memanfaatkan print()dan return:

def foo():
    print("hello from inside of foo")
    return 1

Sekarang Anda dapat menjalankan kode yang memanggil foo, seperti:

if __name__ == '__main__':
    print("going to call foo")
    x = foo()
    print("called foo")
    print("foo returned " + str(x))

Jika Anda menjalankan ini sebagai skrip (misalnya .pyfile) sebagai kebalikan dari interpreter Python, Anda akan mendapatkan output berikut:

going to call foo
hello from inside foo
called foo   
foo returned 1

Saya harap ini membuatnya lebih jelas. Penerjemah menulis nilai kembalian ke konsol sehingga saya bisa melihat mengapa seseorang bisa bingung.

Berikut contoh lain dari interpreter yang menunjukkan bahwa:

>>> def foo():
...     print("hello from within foo")
...     return 1
...
>>> foo()
hello from within foo
1
>>> def bar():
...   return 10 * foo()
...
>>> bar()
hello from within foo
10

Anda dapat melihat bahwa ketika foo()dipanggil dari bar(), 1 tidak ditulis ke konsol. Sebaliknya, ini digunakan untuk menghitung nilai yang dikembalikan dari bar().

print()adalah fungsi yang menyebabkan efek samping (menulis string di konsol), tetapi eksekusi dilanjutkan dengan pernyataan berikutnya. returnmenyebabkan fungsi berhenti mengeksekusi dan mengembalikan nilai ke apa pun yang memanggilnya.

Nathan Hughes
sumber
Anda perlu menggunakan "foo returned " + str(x)atau Anda akan mendapatkannya TypeError: cannot concatenate 'str' and 'int' objects.
icktoofay
@NathanHughes terima kasih atas jawaban yang dibuat dengan cermat.
Andy K
23

Saya pikir kamus adalah referensi terbaik Anda di sini

Kembali dan Cetak

Pendeknya:

return memberikan sesuatu kembali atau membalas pemanggil fungsi sementara print menghasilkan teks

Kimvais
sumber
23

Pikirkan pernyataan cetak sebagai penyebab efek samping , itu membuat fungsi Anda menulis beberapa teks kepada pengguna, tetapi tidak dapat digunakan oleh fungsi lain.

Saya akan mencoba menjelaskan ini lebih baik dengan beberapa contoh, dan beberapa definisi dari Wikipedia.

Berikut adalah definisi sebuah fungsi dari Wikipedia

Suatu fungsi, dalam matematika, mengasosiasikan satu besaran, argumen fungsi, juga dikenal sebagai masukan, dengan besaran lain, nilai fungsi, juga dikenal sebagai keluaran.

Pikirkan itu sebentar. Apa artinya jika Anda mengatakan fungsi tersebut memiliki nilai?

Artinya adalah Anda sebenarnya dapat mengganti nilai suatu fungsi dengan nilai normal! (Dengan asumsi kedua nilai adalah jenis nilai yang sama)

Mengapa Anda ingin bertanya?

Bagaimana dengan fungsi lain yang mungkin menerima tipe nilai yang sama sebagai input ?

def square(n):
    return n * n

def add_one(n):
    return n + 1

print square(12)

# square(12) is the same as writing 144

print add_one(square(12))
print add_one(144)
#These both have the same output

Ada istilah matematika yang mewah untuk fungsi yang hanya bergantung pada masukannya untuk menghasilkan keluarannya: Transparansi Referensial. Sekali lagi, definisi dari Wikipedia.

Transparansi referensial dan ketidakjelasan referensial adalah properti dari bagian program komputer. Sebuah ekspresi dikatakan transparan secara referensial jika dapat diganti dengan nilainya tanpa mengubah perilaku program

Mungkin agak sulit untuk memahami apa artinya ini jika Anda baru mengenal pemrograman, tetapi saya pikir Anda akan mendapatkannya setelah beberapa eksperimen. Namun secara umum, Anda dapat melakukan hal-hal seperti mencetak dalam suatu fungsi, dan Anda juga dapat memiliki pernyataan return di akhir.

Ingatlah bahwa ketika Anda menggunakan return, pada dasarnya Anda mengatakan "Panggilan ke fungsi ini sama dengan menulis nilai yang dikembalikan"

Python benar-benar akan memasukkan nilai pengembalian untuk Anda jika Anda menolak untuk memasukkannya sendiri, itu disebut "Tidak Ada", dan itu adalah jenis khusus yang tidak berarti apa-apa, atau nol.

Wes
sumber
12

Dalam python, kita mulai mendefinisikan sebuah fungsi dengan "def" dan umumnya, tetapi tidak harus, mengakhiri fungsi dengan "return".

Fungsi dari variabel x dilambangkan sebagai f (x). Apa fungsi ini? Misalkan, fungsi ini menambahkan 2 ke x. Jadi, f (x) = x + 2

Sekarang, kode dari fungsi ini adalah:

def A_function (x):
    return x + 2

Setelah mendefinisikan fungsi, Anda dapat menggunakannya untuk variabel apa saja dan mendapatkan hasil. Seperti:

print A_function (2)
>>> 4

Kami bisa saja menulis kode sedikit berbeda, seperti:

def A_function (x):
    y = x + 2
    return y
print A_function (2)

Itu juga akan memberi "4".

Sekarang, kita bahkan dapat menggunakan kode ini:

def A_function (x):
    x = x + 2
    return x
print A_function (2)

Itu juga akan memberikan 4. Lihat, bahwa "x" di samping return sebenarnya berarti (x + 2), bukan x dari "A_function (x)".

Saya kira dari contoh sederhana ini, Anda akan mengerti arti dari perintah return.

Sheikh Ahmad Shah
sumber
11

return berarti, "keluarkan nilai ini dari fungsi ini".

print artinya, "kirim nilai ini ke (umumnya) stdout"

Dalam Python REPL, fungsi yang dikembalikan akan ditampilkan ke layar secara default (ini tidak persis sama dengan print).

Ini adalah contoh cetakannya:

>>> n = "foo\nbar" #just assigning a variable. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>

Ini adalah contoh pengembalian:

>>> def getN():
...    return "foo\nbar"
...
>>> getN() #When this isn't assigned to something, it is just output
'foo\nbar'
>>> n = getN() # assigning a variable to the return value. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>
cwallenpoole
sumber
11

Jawaban ini membahas beberapa kasus yang belum dibahas di atas.
The kembali pernyataan memungkinkan Anda untuk mengakhiri pelaksanaan fungsi sebelum Anda mencapai akhir. Ini menyebabkan aliran eksekusi segera kembali ke pemanggil.

Sejalan nomor 4:

def ret(n):
    if n > 9:
         temp = "two digits"
         return temp     #Line 4        
    else:
         temp = "one digit"
         return temp     #Line 8
    print("return statement")
ret(10)

Setelah pernyataan kondisional dijalankan, ret()fungsi dihentikan karena return temp(baris 4). Jadi print("return statement")tidak bisa dieksekusi.

Keluaran:

two digits   

Kode yang muncul setelah pernyataan bersyarat, atau tempat aliran kontrol tidak bisa dijangkau, adalah kode mati .

Returning Values
Pada baris nomor 4 dan 8, pernyataan return digunakan untuk mengembalikan nilai variabel sementara setelah kondisi dieksekusi.

Untuk menonjolkan perbedaan antara mencetak dan mengembalikan :

def ret(n):
    if n > 9:
        print("two digits")
        return "two digits"           
    else :
        print("one digit")
        return "one digit"        
ret(25)

Keluaran:

two digits
'two digits'
BoRRis
sumber
8

Hanya untuk menambah jawaban luar biasa @Nathan Hughes:

The returnpernyataan dapat digunakan sebagai semacam aliran kontrol. Dengan meletakkan satu (atau lebih) returnpernyataan di tengah-tengah fungsi, kita dapat mengatakan: "berhenti menjalankan fungsi ini. Kita mendapatkan apa yang kita inginkan atau ada yang tidak beres!"

Berikut contohnya:

>>> def make_3_characters_long(some_string):
...     if len(some_string) == 3:
...         return False
...     if str(some_string) != some_string:
...         return "Not a string!"
...     if len(some_string) < 3:
...         return ''.join(some_string,'x')[:,3]
...     return some_string[:,3]
... 
>>> threechars = make_3_characters_long('xyz')    
>>> if threechars:
...     print threechars
... else:
...     print "threechars is already 3 characters long!"
... 
threechars is already 3 characters long!

Lihat bagian Gaya Kode dari Panduan Python untuk saran lebih lanjut tentang cara penggunaan ini return.

LondonRob
sumber
4

Perbedaan antara "return" dan "print" juga dapat ditemukan pada contoh berikut:

KEMBALI:

def bigger(a, b):
    if a > b:
        return a
    elif a <b:
        return b
    else:
        return a

Kode di atas akan memberikan hasil yang benar untuk semua masukan.

MENCETAK:

def bigger(a, b):
    if a > b:
        print a
    elif a <b:
        print b
    else:
        print a

CATATAN: Ini akan gagal untuk banyak kasus uji.

KESALAHAN:

----  

FAILURE: Test case input: 3, 8.

            Expected result: 8  

FAILURE: Test case input: 4, 3.

            Expected result: 4  

FAILURE: Test case input: 3, 3.

            Expected result: 3  

You passed 0 out of 3 test cases

Pj_
sumber
1
Hmm, kode cetak Anda tidak gagal untuk kasus uji yang Anda berikan. Semuanya benar!
codingbryan
4

Saya pikir jawaban yang sangat sederhana mungkin berguna di sini:

returnmembuat nilai (variabel, sering kali) tersedia untuk digunakan oleh pemanggil (misalnya, untuk disimpan oleh fungsi yang digunakan fungsi returntersebut di dalam). Tanpa return, nilai atau variabel Anda tidak akan tersedia untuk disimpan / digunakan kembali oleh pemanggil.

print mencetak ke layar, tetapi tidak membuat nilai atau variabel tersedia untuk digunakan oleh pemanggil.

(Mengakui sepenuhnya bahwa jawaban yang lebih menyeluruh lebih akurat.)

Andy
sumber
3

Inilah pemahaman saya. (berharap itu akan membantu seseorang dan itu benar).

def count_number_of(x):
    count = 0
    for item in x:
        if item == "what_you_look_for":
        count = count + 1
    return count

Jadi potongan kode sederhana ini menghitung jumlah kemunculan sesuatu. Penempatan laba signifikan. Ini memberi tahu program Anda di mana Anda membutuhkan nilainya. Jadi saat Anda mencetak, Anda mengirim keluaran ke layar. Ketika Anda kembali, Anda memberi tahu nilainya untuk pergi ke suatu tempat. Dalam hal ini Anda dapat melihat bahwa count = 0 diindentasi dengan return - kami ingin nilai (count + 1) menggantikan 0. Jika Anda mencoba mengikuti logika kode saat Anda mengindentasi perintah return selanjutnya, output akan selalu 1 , karena kami tidak akan pernah memberi tahu hitungan awal untuk berubah. Saya harap saya melakukannya dengan benar. Oh, dan kembali selalu di dalam fungsi.

piotrektt
sumber
3

returnadalah bagian dari definisi fungsi, sedangkan printteks keluaran ke keluaran standar (biasanya konsol).

Fungsi adalah prosedur yang menerima parameter dan mengembalikan nilai. returnadalah untuk yang terakhir, sedangkan yang pertama selesai dengan def.

Contoh:

def timestwo(x):
    return x*2
icarito
sumber
2

Hal terbaik tentang returnfungsi adalah Anda dapat mengembalikan nilai dari fungsi tetapi Anda dapat melakukan hal yang sama, printjadi apa bedanya? Pada dasarnya returnbukan hanya mengembalikan itu memberikan keluaran dalam bentuk objek sehingga kita dapat menyimpan nilai kembali itu dari fungsi ke variabel apa pun tetapi kita tidak dapat melakukannya printkarena sama seperti stdout/coutdi C Programming.

Ikuti kode di bawah ini untuk pemahaman yang lebih baik

KODE

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b

def subtract(a, b):
    print "SUBTRACTING %d - %d" % (a, b)
    return a - b

def multiply(a, b):
    print "MULTIPLYING %d * %d" % (a, b)
    return a * b

def divide(a, b):
    print "DIVIDING %d / %d" % (a, b)
    return a / b


print "Let's do some math with just functions!"

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)


# A puzzle for the extra credit, type it in anyway.
print "Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print "That becomes: ", what, "Can you do it by hand?"

Kami sekarang melakukan fungsi matematika kami sendiri untuk add, subtract, multiply,dan divide. Hal penting yang harus diperhatikan adalah baris terakhir di mana kita mengatakan return a + b(in add). Apa yang dilakukannya adalah sebagai berikut:

  1. Fungsi kami dipanggil dengan dua argumen: adan b.
  2. Kami mencetak apa yang fungsi kami lakukan, dalam hal ini "MENAMBAH".
  3. Kemudian kami memberi tahu Python untuk melakukan sesuatu secara terbalik: kami mengembalikan penambahan a + b. Anda bisa mengatakan ini seperti, "Saya menambahkan adan bmengembalikannya."
  4. Python menambahkan dua angka tersebut. Kemudian ketika fungsi tersebut berakhir, setiap baris yang menjalankannya akan dapat menetapkan a + bhasil ini ke variabel.
Vrushal Raut
sumber
1

returnharus digunakan untuk fungsi / metode rekursif atau Anda ingin menggunakan nilai yang dikembalikan untuk aplikasi selanjutnya dalam algoritme Anda.

print sebaiknya digunakan saat Anda ingin menampilkan hasil yang bermakna dan diinginkan kepada pengguna dan Anda tidak ingin mengacaukan layar dengan hasil antara yang tidak diminati pengguna, meskipun berguna untuk men-debug kode Anda.

Kode berikut menunjukkan cara menggunakan returndan printbenar:

def fact(x):
    if x < 2:
        return 1
    return x * fact(x - 1)

print(fact(5))

Penjelasan ini berlaku untuk semua bahasa pemrograman bukan hanya python .

Habib Karbasian
sumber