Các chức năng trong Python là các khối mã được xác định thực hiện một nhiệm vụ cụ thể. Trong phần này, chúng tôi sẽ thảo luận về sự khác biệt trong việc gọi các chức năng có và không có dấu ngoặc đơn.
- Khi chúng ta gọi một chức năng với dấu ngoặc đơn, chức năng sẽ được thực thi và trả về kết quả cho người được gọi.function with parentheses, the function gets execute and returns the result to the callable.
- Trong một trường hợp khác, khi chúng ta gọi một hàm không có dấu ngoặc đơn, một tham chiếu chức năng sẽ được gửi đến gọi có thể gọi thay vì thực hiện chính chức năng.function without parentheses, a function reference is sent to the callable rather than executing the function itself.
Hãy để thảo luận về 3 khái niệm quan trọng:
- Gọi các chức năng
- Trả về các chức năng
- Vượt qua các chức năng
Hàm Gọi -
Hàm dưới đây thực hiện một tác vụ đơn giản, nối chuỗi. Ở đây chúng tôi sẽ gọi hàm `Concatenate_String` có và không có dấu ngoặc đơn và xem sự khác biệt.
def concatenate_string(*Hello, George0
Hello, George1Hello, George2Hello, George3 Hello, George4Hello, George5Hello, George6
Hello, George1Hello, George8Hello, George3 Hello, George4 return merge_string(string1, string2) 1Hello, George6
Hello, George1 return merge_string(string1, string2) 4 Hello, George2 return merge_string(string1, string2) 6 return merge_string(string1, string2) 7
return merge_string(string1, string2) 8Hello, George3 concatenate_string(<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 2<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 3<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 4
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 6<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 7<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 4
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5return merge_string0
return merge_string(string1, string2) 8Hello, George3 return merge_string3
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 6return merge_string6<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 4
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5return merge_string0
Đầu ra
Function call with Parentheses: Hello, George Function call without Parentheses: <function concatenate_string at 0x7f0bb991df28>Đối với trường hợp đầu tiên, khi chúng tôi gọi Hello, George0, chức năng đã thực thi và trả về chuỗi được nối. Và trong trường hợp thứ hai, khi chúng tôi gọi return merge_string3, tức là không có dấu ngoặc đơn, một tham chiếu được chuyển đến có thể gọi thay vì tự thực hiện chức năng. Ở đây có thể gọi có thể quyết định phải làm gì với tài liệu tham khảo.
And, for the second case, when we call return merge_string3 i.e.
without parentheses, a reference is passed to the callable rather than executing the function itself. Here the callable can decide what to do with the reference.
Trả về các chức năng -
Từ các cuộc thảo luận ở trên, bạn có thể hiểu rằng, khi hàm được gọi với dấu ngoặc đơn, mã được thực thi và trả về kết quả. Và, khi nó được gọi là không có dấu ngoặc đơn, một tham chiếu chức năng được trả lại cho Callable. Vì vậy, điều gì xảy ra khi một hàm được mã hóa cùng với câu lệnh trả về với dấu ngoặc đơn và không có dấu ngoặc đơn. Hãy để đi qua một ví dụ.
So, what happens when a function is coded along with a return
statement with parentheses and without parentheses. Let’s go through an example.
Với dấu ngoặc đơn
def concatenate_string(*Hello, George0
Hello, George1Hello, George2Hello, George3 Hello, George4Hello, George5Hello, George6
Hello, George1Hello, George8Hello, George3 Hello, George4 return merge_string(string1, string2) 1Hello, George6
Hello, George1 return merge_string(string1, string2) 4 Hello, George2 return merge_string(string1, string2) 6 return merge_string(string1, string2) 7
return merge_string(string1, string2) 8Hello, George3 concatenate_string(<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 2<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 3<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 4
return merge_string(string1, string2) 8Hello, George3 return merge_string3
Đầu ra
Đối với trường hợp đầu tiên, khi chúng tôi gọi Hello, George0, chức năng đã thực thi và trả về chuỗi được nối. Và trong trường hợp thứ hai, khi chúng tôi gọi return merge_string3, tức là không có dấu ngoặc đơn, một tham chiếu được chuyển đến có thể gọi thay vì tự thực hiện chức năng. Ở đây có thể gọi có thể quyết định phải làm gì với tài liệu tham khảo.
Hello, George1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5*1
*2
Đầu ra
Hello, GeorgeĐối với trường hợp đầu tiên, khi chúng tôi gọi Hello, George0, chức năng đã thực thi và trả về chuỗi được nối. Và trong trường hợp thứ hai, khi chúng tôi gọi return merge_string3, tức là không có dấu ngoặc đơn, một tham chiếu được chuyển đến có thể gọi thay vì tự thực hiện chức năng. Ở đây có thể gọi có thể quyết định phải làm gì với tài liệu tham khảo.
return merge_string(string1, string2)Trả về các chức năng -
Từ các cuộc thảo luận ở trên, bạn có thể hiểu rằng, khi hàm được gọi với dấu ngoặc đơn, mã được thực thi và trả về kết quả. Và, khi nó được gọi là không có dấu ngoặc đơn, một tham chiếu chức năng được trả lại cho Callable. Vì vậy, điều gì xảy ra khi một hàm được mã hóa cùng với câu lệnh trả về với dấu ngoặc đơn và không có dấu ngoặc đơn. Hãy để đi qua một ví dụ.
Với dấu ngoặc đơn
Hello, George1 return merge_string(string1, string2) 4 Hello, George2 return merge_string(string1, string2) 6 return merge_string(string1, string2) 7
return merge_string(string1, string2) 8Hello, George3 concatenate_string(<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 2<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 3<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 4
return merge_string(string1, string2) 8Hello, George3 return merge_string3
Đầu ra
Đối với trường hợp đầu tiên, khi chúng tôi gọi Hello, George0, chức năng đã thực thi và trả về chuỗi được nối. Và trong trường hợp thứ hai, khi chúng tôi gọi return merge_string3, tức là không có dấu ngoặc đơn, một tham chiếu được chuyển đến có thể gọi thay vì tự thực hiện chức năng. Ở đây có thể gọi có thể quyết định phải làm gì với tài liệu tham khảo.
Hello, George1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5Hello, George21
Hello, George1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5Hello, George24<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 2<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 3Hello, George28
*2
Output:
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, GeorgeTrả về các chức năng -
return merge_stringTừ các cuộc thảo luận ở trên, bạn có thể hiểu rằng, khi hàm được gọi với dấu ngoặc đơn, mã được thực thi và trả về kết quả. Và, khi nó được gọi là không có dấu ngoặc đơn, một tham chiếu chức năng được trả lại cho Callable. Vì vậy, điều gì xảy ra khi một hàm được mã hóa cùng với câu lệnh trả về với dấu ngoặc đơn và không có dấu ngoặc đơn. Hãy để đi qua một ví dụ.
And, when we code subfunction without parentheses in a return statement, the main function passes the sub-function reference to the callable rather than executing it. Here the callable decides what to do with the reference.
Với dấu ngoặc đơn
Hello, George1def def0
def concatenate_string(*Hello, George0
Hello, George1Hello, George2Hello, George3 Hello, George4Hello, George5Hello, George6
Hello, George1Hello, George8Hello, George3 Hello, George4 return merge_string(string1, string2) 1Hello, George6
Hello, George1 return merge_string(string1, string2) 4 Hello, George2 return merge_string(string1, string2) 6 return merge_string(string1, string2) 7
return merge_string(string1, string2) 8Hello, George3 concatenate_string(<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 1<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 2<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 3<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 4
return merge_string(string1, string2) 8Hello, George3 return merge_string3
Đầu ra
Đối với trường hợp đầu tiên, khi chúng tôi gọi Hello, George0, chức năng đã thực thi và trả về chuỗi được nối. Và trong trường hợp thứ hai, khi chúng tôi gọi return merge_string3, tức là không có dấu ngoặc đơn, một tham chiếu được chuyển đến có thể gọi thay vì tự thực hiện chức năng. Ở đây có thể gọi có thể quyết định phải làm gì với tài liệu tham khảo.
Trả về các chức năng -
Từ các cuộc thảo luận ở trên, bạn có thể hiểu rằng, khi hàm được gọi với dấu ngoặc đơn, mã được thực thi và trả về kết quả. Và, khi nó được gọi là không có dấu ngoặc đơn, một tham chiếu chức năng được trả lại cho Callable. Vì vậy, điều gì xảy ra khi một hàm được mã hóa cùng với câu lệnh trả về với dấu ngoặc đơn và không có dấu ngoặc đơn. Hãy để đi qua một ví dụ.
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George 5Hello, George75
Output:
Hello, GeorgeVới dấu ngoặc đơn
function_call(concatenate_string)Hello, George1def def0