Hướng dẫn can i define a function inside a method python? - tôi có thể định nghĩa một hàm bên trong một phương thức python không?

Chức năng lồng nhau là gì?

Các chức năng là một trong những "công dân hạng nhất" của Python, điều đó có nghĩa là các chức năng ở cùng cấp độ với các đối tượng Python khác như số nguyên, chuỗi, mô-đun, v.v. như các giá trị, v.v.

Python hỗ trợ khái niệm về "hàm lồng nhau" hoặc "hàm bên trong", chỉ đơn giản là một hàm được xác định bên trong một hàm khác. Trong phần còn lại của bài viết, chúng tôi sẽ sử dụng từ "hàm bên trong" và "hàm lồng nhau" thay thế cho nhau.

Có nhiều lý do là lý do tại sao người ta muốn tạo một chức năng bên trong một chức năng khác. Hàm bên trong có thể truy cập các biến trong phạm vi kèm theo. Trong bài viết này, chúng tôi sẽ khám phá các khía cạnh khác nhau của các chức năng bên trong trong Python.

Xác định hàm bên trong

Để xác định hàm bên trong trong Python, chúng tôi chỉ cần tạo một hàm bên trong một hàm khác bằng từ khóa

Hello from outer function
Hello from inner function
5 của Python. Đây là một ví dụ:

def function1(): # outer function
    print ("Hello from outer function")
    def function2(): # inner function
        print ("Hello from inner function")
    function2()

function1()

Đầu ra

Hello from outer function
Hello from inner function

Trong ví dụ trên,

Hello from outer function
Hello from inner function
6 đã được xác định bên trong
Hello from outer function
Hello from inner function
7, làm cho nó trở thành một hàm bên trong. Để gọi
Hello from outer function
Hello from inner function
6, trước tiên chúng ta phải gọi
Hello from outer function
Hello from inner function
7.
Hello from outer function
Hello from inner function
7 sau đó sẽ đi trước và gọi
Hello from outer function
Hello from inner function
6 vì nó đã được xác định bên trong nó.

Điều quan trọng là phải đề cập rằng hàm bên ngoài phải được gọi để chức năng bên trong thực thi. Nếu hàm bên ngoài không được gọi, hàm bên trong sẽ không bao giờ thực thi. Để chứng minh điều này, hãy sửa đổi mã trên thành phần sau và chạy nó:

def function1(): # outer function
    print ("Hello from outer function")
    def function2(): # inner function
        print ("Hello from inner function")
    function2()

Mã sẽ không trả về không có gì khi được thực thi!

Đây là một ví dụ khác:

def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))

Đầu ra

50

Trong ví dụ trên,

Hello from outer function
Hello from inner function
6 đã được xác định bên trong
Hello from outer function
Hello from inner function
7, làm cho nó trở thành một hàm bên trong. Để gọi
Hello from outer function
Hello from inner function
6, trước tiên chúng ta phải gọi
Hello from outer function
Hello from inner function
7.
Hello from outer function
Hello from inner function
7 sau đó sẽ đi trước và gọi
Hello from outer function
Hello from inner function
6 vì nó đã được xác định bên trong nó.

Điều quan trọng là phải đề cập rằng hàm bên ngoài phải được gọi để chức năng bên trong thực thi. Nếu hàm bên ngoài không được gọi, hàm bên trong sẽ không bao giờ thực thi. Để chứng minh điều này, hãy sửa đổi mã trên thành phần sau và chạy nó:

def function1(): # outer function
    x = 2 # A variable defined within the outer function
    def function2(a): # inner function
       # Let's define a new variable within the inner function
       # rather than changing the value of x of the outer function
        x = 6
        print (a+x)
    print (x) # to display the value of x of the outer function
    function2(3)

function1()

Đầu ra

2
9

Trong ví dụ trên,

Hello from outer function
Hello from inner function
6 đã được xác định bên trong
Hello from outer function
Hello from inner function
7, làm cho nó trở thành một hàm bên trong. Để gọi
Hello from outer function
Hello from inner function
6, trước tiên chúng ta phải gọi
Hello from outer function
Hello from inner function
7.
Hello from outer function
Hello from inner function
7 sau đó sẽ đi trước và gọi
Hello from outer function
Hello from inner function
6 vì nó đã được xác định bên trong nó.

Điều quan trọng là phải đề cập rằng hàm bên ngoài phải được gọi để chức năng bên trong thực thi. Nếu hàm bên ngoài không được gọi, hàm bên trong sẽ không bao giờ thực thi. Để chứng minh điều này, hãy sửa đổi mã trên thành phần sau và chạy nó:

Mã sẽ không trả về không có gì khi được thực thi!

Đây là một ví dụ khác:

Mã trả về phép nhân của hai số, nghĩa là 10 và 5. Ví dụ cho thấy hàm bên trong có thể truy cập các biến có thể truy cập ở hàm bên ngoài.

Cho đến nay, bạn đã thấy rằng chúng tôi có thể truy cập các biến của hàm bên ngoài bên trong hàm bên trong. Điều gì sẽ xảy ra nếu chúng ta cố gắng thay đổi các biến của hàm bên ngoài từ bên trong hàm bên trong? Hãy cho chúng tôi xem những gì xảy ra:

def outer_function(x):
    # Hidden from the outer code
    def inner_increment(x):
        return x + 2
    y = inner_increment(x)
    print(x, y)

inner_increment(5)
#outer_function(5)

Đầu ra

Traceback (most recent call last):
  File "C:/Users/admin/inner.py", line 7, in 
    inner_increment(5)
NameError: name 'inner_increment' is not defined

Trong ví dụ trên,

Hello from outer function
Hello from inner function
6 đã được xác định bên trong
Hello from outer function
Hello from inner function
7, làm cho nó trở thành một hàm bên trong. Để gọi
Hello from outer function
Hello from inner function
6, trước tiên chúng ta phải gọi
Hello from outer function
Hello from inner function
7.
Hello from outer function
Hello from inner function
7 sau đó sẽ đi trước và gọi
Hello from outer function
Hello from inner function
6 vì nó đã được xác định bên trong nó.

Điều quan trọng là phải đề cập rằng hàm bên ngoài phải được gọi để chức năng bên trong thực thi. Nếu hàm bên ngoài không được gọi, hàm bên trong sẽ không bao giờ thực thi. Để chứng minh điều này, hãy sửa đổi mã trên thành phần sau và chạy nó:

def outer_function(x):
    # Hidden from the outer code
    def inner_increment(x):
        return x + 2
    y = inner_increment(x)
    print(x, y)

#inner_increment(5)
outer_function(5)

Đầu ra

Hello from outer function
Hello from inner function
0

Trong ví dụ trên,

Hello from outer function
Hello from inner function
6 đã được xác định bên trong
Hello from outer function
Hello from inner function
7, làm cho nó trở thành một hàm bên trong. Để gọi
Hello from outer function
Hello from inner function
6, trước tiên chúng ta phải gọi
Hello from outer function
Hello from inner function
7.
Hello from outer function
Hello from inner function
7 sau đó sẽ đi trước và gọi
Hello from outer function
Hello from inner function
6 vì nó đã được xác định bên trong nó.

Điều quan trọng là phải đề cập rằng hàm bên ngoài phải được gọi để chức năng bên trong thực thi. Nếu hàm bên ngoài không được gọi, hàm bên trong sẽ không bao giờ thực thi. Để chứng minh điều này, hãy sửa đổi mã trên thành phần sau và chạy nó:

Mã sẽ không trả về không có gì khi được thực thi!

Đây là một ví dụ khác:

Mã trả về phép nhân của hai số, nghĩa là 10 và 5. Ví dụ cho thấy hàm bên trong có thể truy cập các biến có thể truy cập ở hàm bên ngoài.

Cho đến nay, bạn đã thấy rằng chúng tôi có thể truy cập các biến của hàm bên ngoài bên trong hàm bên trong. Điều gì sẽ xảy ra nếu chúng ta cố gắng thay đổi các biến của hàm bên ngoài từ bên trong hàm bên trong? Hãy cho chúng tôi xem những gì xảy ra:

Sau đây là các điều kiện được yêu cầu phải đáp ứng để tạo ra một đóng cửa trong Python:

  • Phải có một chức năng lồng nhau
  • Hàm bên trong phải đề cập đến một giá trị được xác định trong phạm vi kèm theo
  • Hàm kèm theo phải trả về chức năng lồng nhau

Xem xét ví dụ sau:

Hello from outer function
Hello from inner function
1

Đầu ra

Hello from outer function
Hello from inner function
2

Mã trên chứng minh rằng với việc đóng cửa, chúng tôi có thể tạo và gọi một hàm từ bên ngoài phạm vi của nó thông qua chức năng đi qua. Phạm vi của

Hello from outer function
Hello from inner function
6 chỉ ở trong
Hello from outer function
Hello from inner function
7. Tuy nhiên, với việc sử dụng đóng cửa, chúng tôi có thể mở rộng phạm vi này và gọi nó từ bên ngoài phạm vi của nó.

Các chức năng bên trong giúp chúng tôi xác định các chức năng của nhà máy. Một chức năng nhà máy là một chức năng tạo ra một đối tượng khác. Ví dụ:

Hello from outer function
Hello from inner function
3

Đầu ra

Hello from outer function
Hello from inner function
4

Mã trên chứng minh rằng với việc đóng cửa, chúng tôi có thể tạo và gọi một hàm từ bên ngoài phạm vi của nó thông qua chức năng đi qua. Phạm vi của

Hello from outer function
Hello from inner function
6 chỉ ở trong
Hello from outer function
Hello from inner function
7. Tuy nhiên, với việc sử dụng đóng cửa, chúng tôi có thể mở rộng phạm vi này và gọi nó từ bên ngoài phạm vi của nó.

Các chức năng bên trong giúp chúng tôi xác định các chức năng của nhà máy. Một chức năng nhà máy là một chức năng tạo ra một đối tượng khác. Ví dụ:

Trong tập lệnh trên, từ hàm

def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
6, chúng tôi đã tạo hai đối tượng khác,
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
7 và
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
8. Điều này làm cho
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
6 trở thành một chức năng nhà máy vì nó tạo ra các hàm
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
7 và
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
8 cho chúng tôi bằng cách sử dụng tham số chúng tôi vượt qua nó.

Chúng ta có thể xác định một hàm bên trong một lớp trong Python không?

Một hàm được xác định bên trong một hàm khác được gọi là hàm bên trong hoặc functio n lồng nhau. Các hàm lồng nhau có thể truy cập các biến của phạm vi kèm theo. Các hàm bên trong được sử dụng để chúng có thể được bảo vệ khỏi mọi thứ xảy ra bên ngoài chức năng.. Nested functions are able to access variables of the enclosing scope. Inner functions are used so that they can be protected from everything happening outside the function.

Bạn có nên xác định một hàm bên trong một hàm?

Chúng ta có thể khai báo một hàm bên trong một hàm, nhưng nó không phải là một hàm lồng nhau.Bởi vì các định nghĩa chức năng lồng nhau không thể truy cập các biến cục bộ của các khối xung quanh, chúng chỉ có thể truy cập các biến toàn cầu của mô -đun chứa.. Because nested functions definitions can not access local variables of the surrounding blocks, they can access only global variables of the containing module.

Các chức năng có thể có các phương thức trong Python?

Một phương pháp là một hàm mà thuộc về một đối tượng..other object types can have methods as well. For example, list objects have methods called append, insert, remove, sort, and so on.

Có thể có chức năng bên trong chức năng?

Hàm lồng nhau là một hàm hoàn toàn chứa trong hàm cha.Bất kỳ chức năng nào trong một tệp chương trình có thể bao gồm một chức năng lồng nhau.Sự khác biệt chính giữa các chức năng lồng nhau và các loại chức năng khác là chúng có thể truy cập và sửa đổi các biến được xác định trong các chức năng cha mẹ của chúng.Any function in a program file can include a nested function. The primary difference between nested functions and other types of functions is that they can access and modify variables that are defined in their parent functions.