Bạn có thể trả về một biến từ hàm Python không?

Để lấy giá trị từ một hàm trong bất kỳ ngôn ngữ lập trình nào, chúng ta sử dụng câu lệnh return[]. Tương tự như vậy, trong Python, câu lệnh return[] được sử dụng để thoát khỏi một hàm và trả về một giá trị từ một hàm. Trong hướng dẫn này, chúng ta sẽ đọc về nhiều cách khác nhau để sử dụng các câu lệnh return[] trong Python

Mục lục

  1. Giới thiệu về câu lệnh return[]
  2. Trả về nhiều giá trị trong Python
  3. Đối số trong hàm return[]
  4. Hàm trả về một hàm khác
  5. Bớt tư tưởng

trả về [] trong Python

Câu lệnh return[], giống như trong các ngôn ngữ lập trình khác, kết thúc lời gọi hàm và trả về kết quả cho người gọi. Nó là một thành phần quan trọng trong bất kỳ hàm hoặc phương thức nào trong mã bao gồm từ khóa trả về và giá trị sẽ được trả về sau đó
Một số điểm cần nhớ khi sử dụng return[]

  • Các câu lệnh sau câu lệnh return[] không được thực thi
  • không thể sử dụng câu lệnh return[] bên ngoài chức năng
  • Nếu câu lệnh return[] không có bất kỳ biểu thức nào, thì giá trị NONE được trả về

Cú pháp return[] trong Python


        def func_name[]:
        statements....


        return [expression]
    

Sử dụng câu lệnh return[] để trả về nhiều giá trị trong Python

Python cũng cung cấp tùy chọn trả về nhiều giá trị từ một hàm và để làm điều đó, người dùng chỉ cần thêm nhiều giá trị trả về được phân tách bằng dấu phẩy. Còn được gọi là một tuple, có thể được tạo có hoặc không sử dụng dấu []

Đầu vào


        def statFun[a, b]:
        difference = a-b
        percent_diff = [difference/a]*100
        return difference, percent_diff;


        difference, percent_diff = statFun[]
        print [difference]
        print [percent_diff]
    

Ở đây, hàm statFun[] cung cấp cho các giá trị và bằng cách sử dụng tuple, chúng tôi trả về cả hai giá trị

đầu ra


        8
        20
    

return[] trong Python với một đối số

Trong Python, các đối số có thể được sử dụng với câu lệnh trả về. Để bắt đầu, đối số là tham số do người dùng cung cấp và như chúng ta biết, đối số là [các] giá trị đầu vào do người dùng cung cấp cho hàm

Đầu vào


        def divNum[a, b]:
            if b != 0
                return a/b;
        else:
            return 0;

        print [divNum[4, 2]]
        print [divNum[2, 0]] 
    

Ở đây, hàm divNum[] chấp nhận hai đối số và nếu đối số thứ hai khác 0, nó sẽ chia chúng nếu không trả về 0

đầu ra


        2
        0
    

Hàm trả về một hàm khác trong Python

Như chúng ta đã biết, các hàm được coi là đối tượng hạng nhất trong Python, do đó chúng ta có thể trả về một hàm từ một hàm khác. Đối tượng hạng nhất là một đối tượng có thể được gán cho một biến, được truyền dưới dạng đối số cho hàm hoặc được sử dụng làm giá trị trả về trong hàm
Một hàm lấy một hàm làm đối số, trả về một hàm dưới dạng kết quả hoặc cả hai được gọi là hàm bậc cao hơn

Đầu vào


        def func_1[a]:
            def func_2[b]:
                return a-b
            return func_2

        x = func_1[100]
        print ["The value of a-b is", x[50]]

        def another_func[a]:
            return a*10

        def func[]:
            return another_func

        y = func[]
        print ["\nThe value of a*b is" y[10]]
    

đầu ra


        The value of a-b is 50
        The value of a*b is 100
    

Bớt tư tưởng

Câu lệnh return gửi bất kỳ đối tượng nào từ hàm trở lại mã người gọi. Vì câu lệnh return là một phần quan trọng của bất kỳ hàm hoặc phương thức nào, nếu bạn học cách sử dụng nó đúng cách, bạn có thể chuyển sang các mã phức tạp. Mọi người có thể tìm hiểu thêm về các khái niệm Python tại đây

Bạn không chỉ có thể truyền một giá trị tham số vào một hàm, mà một hàm còn có thể tạo ra một giá trị. Bạn đã thấy điều này trong một số chức năng trước đây mà bạn đã sử dụng. Ví dụ: len nhận một danh sách hoặc chuỗi làm giá trị tham số và trả về một số, độ dài của danh sách hoặc chuỗi đó. range lấy một số nguyên làm giá trị tham số và trả về một danh sách chứa tất cả các số từ 0 đến giá trị tham số đó

Hàm trả về giá trị đôi khi được gọi là hàm hiệu quả. Trong nhiều ngôn ngữ khác, một hàm không trả về một giá trị được gọi là một thủ tục, nhưng ở đây chúng ta sẽ sử dụng cách Python gọi nó là một hàm, hoặc nếu chúng ta muốn nhấn mạnh nó, một hàm không hiệu quả

Làm thế nào để chúng ta viết chức năng hiệu quả của riêng mình? . Hàm bình phương sẽ lấy một số làm tham số và trả về kết quả bình phương số đó. Đây là sơ đồ hộp đen với mã Python sau

Câu lệnh return được theo sau bởi một biểu thức được đánh giá. Kết quả của nó được trả về cho người gọi là “kết quả” của việc gọi hàm này. Vì câu lệnh return có thể chứa bất kỳ biểu thức Python nào nên chúng ta có thể tránh tạo biến tạm thời

def addEm[x, y, z]:
    print[x+y+z]
0 và chỉ cần sử dụng
def addEm[x, y, z]:
    print[x+y+z]
1. Hãy thử sửa đổi hàm vuông ở trên để thấy rằng hàm này hoạt động giống nhau. Mặt khác, việc sử dụng các biến tạm thời như
def addEm[x, y, z]:
    print[x+y+z]
0 trong chương trình trên giúp việc gỡ lỗi dễ dàng hơn. Các biến tạm thời này được gọi là biến cục bộ

Chú ý một cái gì đó quan trọng ở đây. Tên của biến mà chúng ta truyền dưới dạng đối số —

def addEm[x, y, z]:
    print[x+y+z]
3 — không liên quan gì đến tên của tham số hình thức —
def addEm[x, y, z]:
    print[x+y+z]
4. Nó giống như thể
def addEm[x, y, z]:
    print[x+y+z]
5 được thực thi khi square được gọi. Không quan trọng giá trị được đặt tên trong trình gọi là gì [nơi hàm được gọi]. Bên trong square, nó tên là
def addEm[x, y, z]:
    print[x+y+z]
4. Bạn có thể thấy điều này rất rõ ràng trong codelens, trong đó các biến toàn cục và biến cục bộ cho hàm bình phương nằm trong các hộp riêng biệt

Hoạt động. MãLens 12. 5. 3 [clens11_4_1]

Có một khía cạnh nữa của các giá trị trả về của hàm cần được lưu ý. Tất cả các hàm Python trả về giá trị đặc biệt

def addEm[x, y, z]:
    print[x+y+z]
9 trừ khi có một câu lệnh trả về rõ ràng có giá trị khác với giá trị
def addEm[x, y, z]:
    print[x+y+z]
9. Hãy xem xét lỗi phổ biến sau đây khi mới bắt đầu lập trình Python. Khi bạn xem qua ví dụ này, hãy chú ý đến giá trị trả về trong danh sách các biến cục bộ. Sau đó nhìn vào những gì được in khi chức năng kết thúc

Hoạt động. MãLens 12. 5. 4 [clens11_4_2]

Vấn đề với chức năng này là mặc dù nó in giá trị của đầu vào bình phương, nhưng giá trị đó sẽ không được trả về nơi thực hiện lệnh gọi. Thay vào đó, giá trị

def addEm[x, y, z]:
    print[x+y+z]
9 sẽ được trả về. Vì dòng 6 sử dụng giá trị trả về làm vế phải của câu lệnh gán, nên
def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
2 sẽ có giá trị là
def addEm[x, y, z]:
    print[x+y+z]
9 và kết quả được in ở dòng 7 là không chính xác. Thông thường, các hàm sẽ trả về các giá trị mà người gọi có thể in hoặc xử lý theo cách khác

Câu lệnh return, sau khi được thực thi, sẽ ngay lập tức kết thúc việc thực thi hàm, ngay cả khi đó không phải là câu lệnh cuối cùng trong hàm. Trong đoạn mã sau, khi dòng 3 thực thi, giá trị 5 được trả về và được gán cho biến x, sau đó được in. Dòng 4 và 5 không bao giờ thực thi. Chạy đoạn mã sau và thử thực hiện một số sửa đổi của nó để đảm bảo bạn hiểu tại sao “có” và 10 không bao giờ in ra

Việc một câu lệnh trả về kết thúc ngay lập tức việc thực thi khối mã bên trong một hàm là điều quan trọng cần hiểu để viết các chương trình phức tạp và nó cũng có thể rất hữu ích. Ví dụ sau đây là một tình huống mà bạn có thể sử dụng điều này để tạo lợi thế cho mình – và hiểu được điều này sẽ giúp bạn hiểu mã của người khác tốt hơn và có thể đọc mã một cách tự tin hơn

Xem xét một tình huống mà bạn muốn viết một hàm để tìm xem, từ danh sách điểm danh của lớp, xem tên của bất kỳ ai dài hơn năm chữ cái, được gọi là

def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
4. Nếu có bất kỳ ai trong lớp có tên dài hơn 5 chữ cái, hàm sẽ trả về
def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
5. Nếu không, nó sẽ trả về
def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
6

Trong trường hợp này, bạn sẽ sử dụng các câu lệnh điều kiện trong mã tồn tại trong thân hàm, khối mã được thụt vào bên dưới câu lệnh định nghĩa hàm [giống như mã bắt đầu bằng dòng

def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
7 trong ví dụ trên – đó là phần thân của

Thử thách tiền thưởng cho việc học. Sau khi bạn xem phần giải thích bên dưới, hãy ngừng xem mã – chỉ xem phần mô tả chức năng ở trên và cố gắng tự viết mã. Sau đó kiểm tra nó trên các danh sách khác nhau và đảm bảo rằng nó hoạt động. Nhưng hãy đọc phần giải thích trước để bạn có thể chắc chắn rằng mình đã nắm vững các cơ chế chức năng này

Đầu tiên, một kế hoạch tiếng Anh cho chức năng mới này để xác định được gọi là

def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
4

  • Bạn sẽ muốn chuyển một danh sách các chuỗi [đại diện cho tên của mọi người] vào hàm

  • Bạn sẽ muốn lặp lại tất cả các mục trong danh sách, từng chuỗi

  • Ngay khi bạn nhận được một tên dài hơn năm chữ cái, bạn biết hàm sẽ trả về

    def square[x]:
        y = x * x
        return y
    
    print[square[5] + square[5]]
    
    5 – vâng, có ít nhất một tên dài hơn năm chữ cái

  • Và nếu bạn xem qua toàn bộ danh sách và không có tên nào dài hơn năm chữ cái, thì hàm sẽ trả về

    def square[x]:
        y = x * x
        return y
    
    print[square[5] + square[5]]
    
    6

Bây giờ, mã

Cho đến nay, chúng ta chỉ thấy các giá trị trả về được gán cho các biến. Ví dụ: chúng tôi có dòng

def square[x]:
    y = x * x
    return y

print[square[square[2]]]
2. Như với tất cả các câu lệnh gán, vế phải được thực hiện trước. Nó gọi hàm square, truyền vào giá trị tham số 10 [giá trị hiện tại của
def addEm[x, y, z]:
    print[x+y+z]
3]. Điều đó trả về giá trị 100, hoàn thành việc đánh giá phía bên tay phải của bài tập. 100 sau đó được gán cho biến
def square[x]:
    y = x * x
    return y

print[square[5] + square[5]]
2. Trong trường hợp này, lời gọi hàm là toàn bộ biểu thức được đánh giá

Tuy nhiên, các lời gọi hàm cũng có thể được sử dụng như một phần của các biểu thức phức tạp hơn. Ví dụ,

def square[x]:
    y = x * x
    return y

print[square[square[2]]]
6. Trong trường hợp này, giá trị 100 được trả về và sau đó được nhân với 2 để tạo ra giá trị 200. Khi python đánh giá một biểu thức như
def square[x]:
    y = x * x
    return y

print[square[square[2]]]
7, nó sẽ thay thế giá trị hiện tại của x vào biểu thức và sau đó thực hiện phép nhân. Khi python đánh giá một biểu thức như
def square[x]:
    y = x * x
    return y

print[square[square[2]]]
8, nó sẽ thay thế giá trị trả về 100 cho toàn bộ lệnh gọi hàm và sau đó thực hiện phép nhân

Để nhắc lại, khi thực thi một dòng mã

def square[x]:
    y = x * x
    return y

print[square[square[2]]]
6, trình thông dịch python thực hiện các bước sau

  1. Đó là một câu lệnh gán, vì vậy hãy đánh giá biểu thức bên phải

    def square[x]:
        y = x * x
        return y
    
    print[square[square[2]]]
    
    8

  2. Tra cứu giá trị của các biến square và toSquare. hình vuông là một đối tượng chức năng và toSquare là 10

  3. Truyền 10 làm giá trị tham số cho hàm, lấy lại giá trị trả về 100

  4. Thay thế 100 cho hình vuông[thành Hình vuông], để biểu thức bây giờ là ________ 35 ______ 1

  5. Gán 200 cho biến

    def square[x]:
        y = x * x
        return y
    
    print[square[5] + square[5]]
    
    2

Kiểm tra việc hiểu của bạn

    Định nghĩa hàm sau có gì sai

    def addEm[x, y, z]:
        return x+y+z
        print['the answer is', x+y+z]
    

  • Bạn không bao giờ nên sử dụng câu lệnh in trong định nghĩa hàm
  • Mặc dù bạn không nên nhầm print với return, nhưng bạn có thể bao gồm các câu lệnh print bên trong hàm của mình
  • Bạn không nên có bất kỳ câu lệnh nào trong hàm sau câu lệnh return. Khi hàm đến câu lệnh return, nó sẽ ngay lập tức dừng thực thi hàm
  • Đây là một lỗi rất phổ biến, vì vậy hãy chú ý đến nó khi bạn viết mã.
  • Bạn phải tính giá trị của x+y+z trước khi trả lại
  • Python sẽ tự động tính toán giá trị x+y+z và sau đó trả về nó trong câu lệnh khi nó được viết
  • Một hàm không thể trả về một số
  • Các hàm có thể trả về bất kỳ dữ liệu hợp pháp nào, bao gồm [nhưng không giới hạn ở] số, chuỗi, danh sách, từ điển, v.v.

    Hàm sau sẽ trả về cái gì?

    def addEm[x, y, z]:
        print[x+y+z]
    

  • giá trị Không có
  • Chúng tôi đã vô tình sử dụng print trong đó chúng tôi muốn nói đến return. Do đó, mặc định hàm sẽ trả về giá trị None. Đây là một sai lầm RẤT PHỔ BIẾN vì vậy hãy coi chừng. Lỗi này cũng đặc biệt khó phát hiện vì khi bạn chạy chức năng này, đầu ra trông giống nhau. Chỉ đến khi bạn thử gán giá trị của nó cho một biến, bạn mới có thể nhận thấy sự khác biệt
  • Giá trị của x+y+z
  • Cẩn thận. Đây là một sai lầm rất phổ biến. Ở đây chúng tôi đã in giá trị x+y+z nhưng chúng tôi chưa trả về. Để trả về một giá trị, chúng ta PHẢI sử dụng từ khóa return
  • Chuỗi 'x+y+z'
  • x+y+z tính toán một số [giả sử x+y+z là các số] đại diện cho tổng của các giá trị x, y và z

    Đoạn mã sau sẽ xuất ra cái gì?

    def square[x]:
        y = x * x
        return y
    
    print[square[5] + square[5]]
    

  • 25
  • Nó bình phương 5 hai lần và cộng chúng lại với nhau
  • 50
  • Hai giá trị trả về được cộng lại với nhau
  • 25 + 25
  • Hai kết quả được thay thế vào biểu thức và sau đó nó được đánh giá. Các giá trị trả về là số nguyên trong trường hợp này, không phải chuỗi

    Đoạn mã sau sẽ xuất ra cái gì?

    def square[x]:
        y = x * x
        return y
    
    print[square[square[2]]]
    

  • 8
  • Nó bình phương 2, mang lại giá trị 4. Nhưng điều đó không có nghĩa là giá trị tiếp theo nhân 2 và 4
  • 16
  • Nó bình phương 2, mang lại giá trị 4. 4 sau đó được chuyển thành giá trị bình phương một lần nữa, kết quả là 16
  • Lỗi. không thể đặt lời gọi hàm bên trong dấu ngoặc đơn
  • Đây là một biểu thức phức tạp hơn, nhưng vẫn hợp lệ. Biểu thức square[2] được ước tính và giá trị trả về 4 thay thế cho square[2] trong biểu thức

    Đoạn mã sau sẽ xuất ra cái gì?

    def cyu2[s1, s2]:
        x = len[s1]
        y = len[s2]
        return x-y
    
    z = cyu2["Yes", "no"]
    if z > 0:
        print["First one was longer"]
    else:
        print["Second one was at least as long"]
    

  • 1
  • cyu2 trả về giá trị 1, nhưng đó không phải là bản in
  • Đúng
  • "Có" dài hơn, nhưng đó không phải là bản in
  • Cái đầu tiên dài hơn
  • cyu2 trả về giá trị 1, được gán cho z
  • Cái thứ hai ít nhất là dài
  • cyu2 trả về giá trị 1, được gán cho z
  • Lỗi
  • bạn nghĩ điều gì sẽ gây ra lỗi

    Cái nào sẽ in ra đầu tiên, hình vuông, g hoặc một số?

    def square[x]:
        print["square"]
        return x*x
    
    def g[y]:
        print["g"]
        return y + 3
    
    print[square[g[2]]]
    

  • Quảng trường
  • Trước khi thực thi square, nó phải tìm ra giá trị nào để truyền vào, bài hát được thực hiện trước
  • g
  • g phải được thực thi và trả về một giá trị để biết giá trị tham số nào sẽ cung cấp cho x
  • một số
  • square và g đều phải thực thi trước khi số được in

    Đoạn mã sau sẽ in bao nhiêu dòng?

    def show_me_numbers[list_of_ints]:
        print[10]
        print["Next we'll accumulate the sum"]
        accum = 0
        for num in list_of_ints:
            accum = accum + num
        return accum
        print["All done with accumulation!"]
    
    show_me_numbers[[4,2,3]]
    

  • 3
  • Hàm nhận được câu lệnh return sau khi in 2 dòng, vì vậy câu lệnh in thứ ba sẽ không chạy
  • 2
  • Đúng. Hai dòng được in và sau đó thực thi thân hàm đạt đến câu lệnh trả về
  • Không có
  • Hàm trả về một giá trị nguyên. Tuy nhiên đoạn code này không in ra kết quả gọi hàm nên các bạn không xem được [in là của mọi người]. Các dòng duy nhất bạn thấy được in ra là những dòng xuất hiện trong câu lệnh in trước câu lệnh return

8. Viết một hàm tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
3 nhận vào một chuỗi làm đầu vào và chỉ cần trả về chuỗi đó

9. Viết hàm có tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
4 trả về tham số không thay đổi

10. Viết một hàm có tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
5 nhận một số nguyên hoặc bất kỳ số nào làm đầu vào và trả về số đó trừ ba

11. Viết một hàm có tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
6 nhận một số làm đầu vào và trả về số đó, cộng với 7

12. Viết một hàm tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
7 lấy một chuỗi làm đầu vào. Chuỗi này dự định là tên của một người và đầu ra là một lời chào được tiêu chuẩn hóa. Ví dụ: với chuỗi “Becky” làm đầu vào, hàm sẽ trả về. “Xin chào, tên tôi là Becky và tôi yêu SI 106. ”

13. Viết một hàm có tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
8 nhận một chuỗi làm đầu vào và trả về chuỗi đó, nối với chuỗi ” cho vui. ”

14. Viết một hàm có tên là

def cyu2[s1, s2]:
    x = len[s1]
    y = len[s2]
    return x-y

z = cyu2["Yes", "no"]
if z > 0:
    print["First one was longer"]
else:
    print["Second one was at least as long"]
9 lấy một chuỗi làm đầu vào, sau đó kiểm tra số lượng ký tự. Nếu nó có hơn 17 ký tự, hãy trả về “Đây là một chuỗi dài”, nếu nó ngắn hơn hoặc có 17 ký tự, hãy trả về “Đây là một chuỗi ngắn”

Bạn có thể trả về kiểu dữ liệu từ hàm không?

Một hàm có thể được định nghĩa để trả về bất kỳ loại giá trị nào, ngoại trừ kiểu mảng hoặc kiểu hàm ; . Khi một hàm không trả về một giá trị, void là bộ xác định kiểu trong khai báo và định nghĩa hàm.

Hàm có thể có giá trị trả về không?

Một số hàm không trả về giá trị quan trọng, nhưng một số hàm khác thì có . Điều quan trọng là phải hiểu giá trị của chúng là gì, cách sử dụng chúng trong mã của bạn và cách làm cho các hàm trả về các giá trị hữu ích.

Hàm có thể in và trả về giá trị không?

Việc in không ảnh hưởng đến việc thực thi chương trình đang diễn ra. Nó không gán giá trị cho một biến. Nó không trả về giá trị từ lệnh gọi hàm .

Chủ Đề