İade ifadesinin amacı nedir?


Yanıtlar:


100

print()Fonksiyon yazıyor, yani "baskılar", konsolda bir dize. returnDeyimi çıkış ve el arkasına onun arayan kişiye bir değer senin işlevi neden olur. Genel olarak fonksiyonların amacı, girdileri almak ve bir şey döndürmektir. returnFonksiyonun arayana bir değer döndürmek için hazır olduğunda deyimi kullanılır.

Örneğin, burada hem kullanan bir fonksiyon var print()ve return:

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

Artık foo çağıran kodu şu şekilde çalıştırabilirsiniz:

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

Bunu .pyPython yorumlayıcısının aksine bir komut dosyası (örneğin bir dosya) olarak çalıştırırsanız , aşağıdaki çıktıyı alırsınız:

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

Umarım bu daha açık hale getirir. Yorumlayıcı, dönüş değerlerini konsola yazar, böylece birinin neden kafasının karıştığını anlayabilirim.

İşte tercümandan bunu gösteren başka bir örnek:

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

Sen ne zaman görebiliriz foo()çağrılır bar()1, konsola yazılmaz. Bunun yerine, geri dönen değeri hesaplamak için kullanılır bar().

print()yan etkiye neden olan bir işlevdir (konsola bir dizge yazar), ancak yürütme bir sonraki deyimle devam eder. returnişlevin yürütülmesini durdurmasına ve adı verilen şeye bir değer vermesine neden olur.


Kullanmalısın "foo returned " + str(x)yoksa alacaksın TypeError: cannot concatenate 'str' and 'int' objects.
icktoofay

@NathanHughes, özenle hazırlanmış cevap için teşekkürler.
Andy K

23

Bence sözlük buradaki en iyi referansınız

İade ve Yazdır

Kısacası:

return , bir şeyi geri verir veya işlevi arayan kişiye yanıt verirken print metin üretir


23

Print deyiminin bir yan etkiye neden olduğunu düşünün, işlevinizin kullanıcıya bir metin yazmasını sağlar, ancak başka bir işlev tarafından kullanılamaz.

Bunu bazı örneklerle ve Wikipedia'dan birkaç tanımla daha iyi açıklamaya çalışacağım.

Wikipedia'dan bir fonksiyonun tanımı

Matematikte bir işlev, girdi olarak da bilinen işlevin bağımsız değişkenini, başka bir nicelikle, çıktı olarak da bilinen işlevin değerini ilişkilendirir.

Bunu bir saniye düşünün. Fonksiyonun bir değeri olduğunu söylemeniz ne anlama geliyor?

Bunun anlamı, bir fonksiyonun değerini aslında normal bir değerle değiştirebileceğinizdir! (İki değerin aynı değer türü olduğunu varsayarsak)

Neden sormanı istiyorsun?

Bir girdi olarak aynı tür değeri kabul edebilecek diğer işlevler ne olacak ?

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

Çıktılarını üretmek için yalnızca girdilerine bağlı olan işlevler için süslü bir matematiksel terim vardır: Referans Şeffaflığı. Yine Wikipedia'dan bir tanım.

Bilgi şeffaflığı ve referans opaklığı, bilgisayar programlarının parçalarının özellikleridir. Bir ifadenin, bir programın davranışını değiştirmeden değeri ile değiştirilebiliyorsa, referans olarak şeffaf olduğu söylenir.

Programlamada yeniyseniz bunun ne anlama geldiğini kavramak biraz zor olabilir, ancak bazı deneylerden sonra anlayacağınızı düşünüyorum. Genel olarak, bir işlevde print gibi şeyler yapabilirsiniz ve sonunda bir return ifadesine sahip olabilirsiniz.

Return kullandığınızda temelde "Bu işleve yapılan bir çağrı, döndürülen değeri yazmakla aynıdır" dediğinizi unutmayın.

Python aslında kendi değerinizi koymayı reddederseniz sizin için bir dönüş değeri ekler, buna "Yok" denir ve bu, hiçbir şey ifade etmeyen veya boş olan özel bir türdür.


13

Python'da, bir işlevi "def" ile tanımlamaya başlarız ve genel olarak, ancak zorunlu olmamakla birlikte, işlevi "return" ile sonlandırırız.

X değişkeninin bir fonksiyonu f (x) olarak belirtilir. Bu işlev ne yapar? Farz edelim ki, bu işlev 2'yi x'e ekler. Yani, f (x) = x + 2

Şimdi, bu işlevin kodu şöyle olacaktır:

def A_function (x):
    return x + 2

Fonksiyonu tanımladıktan sonra bunu herhangi bir değişken için kullanabilir ve sonuç alabilirsiniz. Gibi:

print A_function (2)
>>> 4

Kodu biraz farklı yazabiliriz, örneğin:

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

Bu da "4" verir.

Şimdi, bu kodu bile kullanabiliriz:

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

Bu da 4'ü verirdi. Bakın, dönüşün yanındaki "x", "A_fonksiyonunun (x)" x değil, aslında (x + 2) anlamına gelir.

Sanırım bu basit örnekten dönüş komutunun anlamını anlayacaksınız.


12

Bu cevap, yukarıda tartışılmamış bazı vakaların üzerinden geçer. Dönüş deyimi sağlar sonlandırmak Eğer sonuna ulaşmadan bir fonksiyonu yürütülmesini. Bu, yürütme akışının hemen arayana dönmesine neden olur.

4 numaralı satırda:

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)

Koşullu ifade çalıştırıldıktan sonra ret()işlev return temp(4. satır) nedeniyle sonlandırılır . Böylece print("return statement")idam edilmez.

Çıktı:

two digits   

Koşullu ifadelerden sonra veya kontrol akışının ulaşamadığı yerdeki bu kod ölü koddur .

Dönen Değerler
4 ve 8 numaralı satırlarda, koşul yerine getirildikten sonra geçici bir değişkenin değerini döndürmek için return ifadesi kullanılmaktadır.

Baskı ve iade arasındaki farkı ortaya çıkarmak için :

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

Çıktı:

two digits
'two digits'

11

return "bu değeri bu işlevden çıkar" anlamına gelir.

print "bu değeri (genellikle) stdout'a gönder" anlamına gelir

Python REPL'de, ekrana varsayılan olarak bir fonksiyon dönüşü çıkacaktır (bu, print ile tamamen aynı değildir).

Bu bir baskı örneğidir:

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

Bu bir dönüş örneğidir:

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

8

@Nathan Hughes'un mükemmel cevabına eklemek için:

returnDeyim kontrol akışının bir tür olarak kullanılabilir. returnBir işlevin ortasına bir (veya daha fazla) ifade koyarak şunu söyleyebiliriz: "bu işlevi yürütmeyi durdurun. Ya istediğimizi elde ederiz ya da bir şeyler ters gitti!"

İşte bir örnek:

>>> 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!

Bu kullanım şekli hakkında daha fazla tavsiye için Python Kılavuzunun Kod Stili bölümüne bakın return.


4

"Dönüş" ve "baskı" arasındaki fark aşağıdaki örnekte de bulunabilir:

DÖNÜŞ:

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

Yukarıdaki kod, tüm girişler için doğru sonuçları verecektir.

YAZDIR:

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

NOT: Bu, birçok test durumu için başarısız olur.

HATA:

----  

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


1
Hmm, sağladığınız test senaryoları için yazdırma kodunuz başarısız olmadı. Hepsi doğruydu!
codingbryan

4

Sanırım burada gerçekten basit bir yanıt yararlı olabilir:

returndeğeri (genellikle bir değişken) arayan tarafından kullanılabilir hale getirir (örneğin, kullanılan işlevin returniçinde olduğu bir işlev tarafından saklanmak üzere ). Olmadan return, sizin değer veya değişken mağaza / yeniden kullanım için arayan için kullanılabilir olmaz.

print ekrana yazdırır, ancak değeri veya değişkeni arayan tarafından kullanılabilir hale getirmez.

(Daha kapsamlı cevapların daha doğru olduğunu tamamen itiraf ediyorum.)


3

İşte benim anlayışım. (umarım birine yardımcı olur ve doğrudur).

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

Yani bu basit kod parçası, bir şeyin gerçekleşme sayısını sayar. Geri dönüşün yerleştirilmesi önemlidir. Programınıza değere nerede ihtiyacınız olduğunu söyler. Böylece yazdırdığınızda ekrana çıktı gönderirsiniz. Geri döndüğünüzde değeri bir yere gitmesini söyleyin. Bu durumda count = 0'ın return ile girintili olduğunu görebilirsiniz - değerin (count + 1) 0'ın yerini almasını istiyoruz. Return komutunu daha fazla girintilediğinizde kodun mantığını izlemeye çalışırsanız, çıktı her zaman 1 olacaktır. çünkü ilk sayının değişmesini asla söylemeyeceğiz. Umarım doğru anlamışımdır. Oh, ve dönüş her zaman bir işlevin içindedir.


3

returnprintstandart çıktıya (genellikle konsol) metin çıktı verirken, bir işlev tanımının parçasıdır .

Bir fonksiyon, parametreleri kabul eden ve bir değer döndüren bir prosedürdür. returnikincisi için, birincisi ile yapılır def.

Misal:

def timestwo(x):
    return x*2

2

İşlevle ilgili en iyi şey return, işlevden bir değer döndürebilmenizdir, ancak aynı şeyi yapabilirsiniz, printyani fark nedir? Temelde returnsadece döndürmekle ilgili değil, çıktıyı nesne biçiminde verir, böylece bu dönüş değerini işlevden herhangi bir değişkene kaydedebiliriz, ancak yapamayız printçünkü aynısı stdout/coutin C Programming.

Daha iyi anlamak için aşağıdaki kodu izleyin

KOD

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?"

Şimdi add, subtract, multiply,ve için kendi matematik fonksiyonlarımızı yapıyoruz divide. Dikkat edilmesi gereken önemli şey, dönüş a + b(giriş add) dediğimiz son satırdır . Bunun yaptığı şey şudur:

  1. Fonksiyonumuz iki argümanla çağrılır: ave b.
  2. Fonksiyonumuzun ne yaptığını, bu durumda "EKLEME" yazdırıyoruz.
  3. Sonra Python'a geriye doğru bir şey yapmasını söyleriz: toplamını döndürürüz a + b. Bunu "Ben eklerim ave bsonra iade ederim" olarak söyleyebilirsiniz .
  4. Python iki sayıyı toplar. Daha sonra fonksiyon sona erdiğinde, onu çalıştıran herhangi bir satır bu a + bsonucu bir değişkene atayabilecektir .

1

returniçin kullanılmalıdır özyinelemeli fonksiyonlar / yöntemlerin ya da algoritma daha sonra uygulamalar için döndürülen değeri kullanmak istiyorum.

print Kullanıcıya anlamlı ve istenen bir çıktıyı görüntülemek istediğinizde ve ekranı kullanıcının ilgilenmediği ara sonuçlarla karıştırmak istemediğinizde kullanılmalıdır, ancak bunlar kodunuzda hata ayıklamak için yararlıdır.

Aşağıdaki kod, nasıl returnve printdoğru şekilde kullanılacağını gösterir :

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

print(fact(5))

Bu açıklama sadece python değil tüm programlama dilleri için geçerlidir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.