Chúng ta có thể gọi một phương thức bên trong một phương thức trong python không?

phương pháp xác định[]. # một số mã # thực thi mã lặp method_repeated[] method_repeated[] method_repeated[] method_repeated[] def method_repeated[]. // một số mã // một số mã

Cách tiếp cận trên là tốt để ngăn chặn sự lặp lại mã nhưng có 2 mối quan tâm sau với điều này

  1. Đôi khi các dòng mã lặp lại dành riêng cho cùng một phương thức và không có ý nghĩa gì khi nhóm chúng thành một phương thức bên ngoài riêng biệt vì chúng không bắt buộc ở bất kỳ nơi nào khác
  2. Mã được nhóm thành một phương thức riêng biệt có thể yêu cầu quyền truy cập vào một số biến hoặc giá trị từ phương thức gọi của nó. Điều này sẽ yêu cầu chuyển các giá trị đó là đối số cho phương thức riêng biệt

Cả hai vấn đề trên đều được giải quyết nếu thay vì di chuyển mã lặp lại vào một phương thức bên ngoài, nó được viết bên trong cùng một phương thức yêu cầu nó

Tạo các phương thức lồng nhau
Các phương thức lồng nhau được tạo giống như các phương thức thông thường được tạo. Sự khác biệt duy nhất là chúng được viết bên trong một phương thức khác. Một ví dụ sẽ làm cho nó rõ ràng hơn

def outer_method[numone, numtwo]:
        # nested method
        def operations[innerone, innertwo]:
            print["Sum of numbers", innerone + innertwo]
            print["Product of numbers", innerone * innertwo]
        # call nested method
        operations[numone, numtwo]
 
 
# call outer method
outer_method[10, 20]

def outside_method[numone, numtwo]. # hoạt động xác định phương thức lồng nhau [innerone, innertwo]. print["Tổng của các số", innerone + innertwo] print["Tích của các số", innerone * innertwo] # gọi phương thức lồng nhau operation[numone, numtwo] # gọi phương thức bên ngoài outside_method[10, 20]

Ví dụ trên định nghĩa một phương thức chứa một phương thức khác. Phương thức lồng nhau chấp nhận hai đối số và thực hiện cộng và nhân các đối số đó và in kết quả
Hãy nhớ rằng để phương thức lồng nhau thực thi, bạn cần gọi nó từ bên trong phương thức bên ngoài. Bạn có thể gọi nó bao nhiêu lần tùy thích từ bên trong phương thức bên ngoài
Lưu ý rằng phương thức lồng nhau chỉ có thể được gọi từ bên trong phương thức bên ngoài. Điều này là do phạm vi của phương thức lồng nhau [hoặc bên trong] chỉ giới hạn ở phần thân của phương thức bên ngoài và nó không thể nhìn thấy từ bên ngoài
Cố gắng gọi phương thức bên trong trực tiếp từ bên ngoài sẽ gây ra lỗi

TênLỗi. tên 'hoạt động' không được xác định

Ngoài ra, phương thức bên trong có thể truy cập các biến được định nghĩa trong phương thức bên ngoài như hình bên dưới

def outer_method[numone, numtwo]:
        # variable defined in outer method 
        outer_var = 30
        # inner method
        def operations[innerone, innertwo]:
            # access outer method variable
            print["Value of outer method variable is", outer_var]
        # call inner method
        operations[numone, numtwo]
 
# call outer method
outer_method[10, 20]

def outside_method[numone, numtwo]. # biến được định nghĩa trong phương thức bên ngoài outside_var = 30 # hoạt động xác định phương thức bên trong[innerone, innertwo]. # truy cập biến phương thức bên ngoài print["Giá trị của biến phương thức bên ngoài là", outside_var] # gọi phương thức bên trong operation[numone, numtwo] # gọi phương thức bên ngoài outside_method[10, 20]

Giá trị của biến phương thức bên ngoài là 30

Như đã trình bày ở trên, phương thức bên trong có thể truy cập các biến của phương thức bên ngoài nhưng ngược lại là không đúng. Phương thức bên ngoài không có quyền truy cập vào các biến được khai báo trong phương thức bên trong
Điều này có ý nghĩa vì phương thức bên trong là một khối bên trong phương thức bên ngoài. Một khối bên trong luôn có thể truy cập các thuộc tính của khối bên ngoài nhưng các thuộc tính bên trong khối bên trong chỉ là cục bộ của khối đó

Các phương thức bên trong lớp
Tạo các phương thức bên trong một lớp cũng giống như tạo các phương thức lồng nhau bên ngoài lớp. Khi truyền đối số cho phương thức bên ngoài, bạn cần truyền self làm đối số đầu tiên nhưng đó là điều không liên quan đến phương thức lồng nhau
Ví dụ về một phương thức lồng nhau trong lớp được đưa ra dưới đây

class NestedMethods:
    # define class variable
    x = 10
    def outer_method[self, c, d]:
        # define inner method
        def operations[a, b]:
            print["Sum of numbers", a+b]
            print["Product of numbers", a * b]
            # access instance variable 
            print["Instance variable is", self.x]
        # call inner method
        operations[10, 20]
 
# create class instance
obj = NestedMethods[]
# call outer method
o = obj.outer_method[2,3]

Phương thức lồng nhau trong lớp. # định nghĩa biến lớp x = 10 def outside_method[self, c, d]. # xác định các hoạt động xác định phương thức bên trong [a, b]. print["Tổng các số", a+b] print["Tích các số", a * b] # truy cập biến thể hiện print["Biến thể hiện là", self. x] # ​​gọi phương thức bên trong operation[10, 20] # tạo cá thể lớp obj = NestedMethods[] # gọi phương thức bên ngoài o = obj. outside_method[2,3]

Mã này sẽ tạo ra đầu ra sau

Tổng các số 30
Tích của số 200
Biến thể hiện là 10

Hãy nhớ rằng ở đây cũng vậy, các phương thức bên trong có thể truy cập các biến được xác định bên trong phương thức bên ngoài cũng như các biến lớp [được hiển thị trong ví dụ trên] nhưng ngược lại là không thể
Ngoài ra, phương thức bên trong không thể được gọi trực tiếp
Trả về giá trị từ hàm bên trong
Một hàm lồng nhau cũng có thể trả về một giá trị cho hàm bên ngoài. Như đã giải thích ở trên, hàm bên ngoài không thể truy cập trực tiếp vào các giá trị của hàm bên trong nhưng nếu hàm bên trong trả về một giá trị, thì hàm bên ngoài có thể truy cập vào các giá trị từ hàm bên trong
Ví dụ sau

class NestedMethods:
    # define class variable
    x = 10
    def outer_method[self, c, d]:
        # define inner method
        def operations[a, b]:
            # return value from inner method
            return a + b
        # call inner method
        result = operations[c, d]
        print["Value returned from inner function is", result]
 
# create object of class
obj = NestedMethods[]
# call method
obj.outer_method[2,3]

Phương thức lồng nhau trong lớp. # định nghĩa biến lớp x = 10 def outside_method[self, c, d]. # xác định các hoạt động xác định phương thức bên trong [a, b]. # giá trị trả về từ phương thức bên trong return a + b # gọi phương thức bên trong result = operation[c, d] print["Giá trị trả về từ hàm bên trong là", result] # tạo đối tượng của lớp obj = NestedMethods[] # gọi phương thức obj. outside_method[2,3]

Trong ví dụ này, phương thức bên trong thêm các giá trị nhận được làm đối số và trả về kết quả cho phương thức bên ngoài. Phương thức bên ngoài sau đó in kết quả tạo ra đầu ra bên dưới

Giá trị được trả về từ hàm bên trong là 5

Trả về hàm lồng nhau
Tất cả các ví dụ trên gọi hàm bên trong trực tiếp từ hàm bên ngoài nhưng cũng có thể trả về hàm bên trong từ hàm bên ngoài và gọi nó sau. Một ví dụ sẽ làm rõ điều này

class NestedMethods:
    def outer_method[self, c, d]:
        # define inner method
        def operations[a, b]:
            print["Sum of numbers", a+b]
            print["Product of numbers", a * b]
        # return inner method
        return operations
 
# create instance of class
obj = NestedMethods[]
# call outer method and store its return value
inner_method_handle = obj.outer_method[2,3]
inner_method_handle[2,3]

Phương thức lồng nhau trong lớp. def outside_method[self, c, d]. # xác định các hoạt động xác định phương thức bên trong [a, b]. print["Tổng của các số", a+b] print["Tích của các số", a * b] # trả về các phép toán trả về phương thức bên trong # tạo thể hiện của lớp obj = NestedMethods[] # gọi phương thức bên ngoài và lưu giá trị trả về của nó inner_method_handle . outside_method[2,3] inner_method_handle[2,3]

Tôi có thể gọi một phương thức bên trong một phương thức khác trong Python không?

Trong Python, bất kỳ hàm nào được viết ra đều có thể được gọi bởi một hàm khác .

Chúng ta có thể có một phương thức bên trong một phương thức trong Python không?

Nếu bạn định nghĩa một hàm bên trong một hàm khác, thì bạn đang tạo một hàm bên trong, còn được gọi là hàm lồng nhau . Trong Python, các hàm bên trong có quyền truy cập trực tiếp vào các biến và tên mà bạn xác định trong hàm kèm theo.

Bạn có thể gọi một chức năng trong một chức năng?

Việc gọi một hàm từ bên trong chính nó được gọi là đệ quy và câu trả lời đơn giản là có.

Chúng ta có thể gọi một hàm bên trong một lớp trong Python không?

mode_impute thực sự là cách chính xác để gọi hàm bên trong lớp . Tuy nhiên, vấn đề ở đây là lệnh gọi của bạn không phải là một phần của hàm, đặt vòng lặp for với lệnh gọi bên trong hàm [e. g. __init__ ] sẽ giải quyết lỗi vì self được xác định trong hàm [được chuyển làm đối số đầu tiên].

Chủ Đề