Tên hàm dưới dạng chuỗi python

Nói chung, các hàm python được gọi bằng tên của chúng dưới dạng chữ. Nhưng đôi khi bạn có thể cần gọi hàm python bằng biến chuỗi. Trong bài viết này, chúng ta sẽ tìm hiểu cách gọi các hàm python bằng cách sử dụng tên của chúng dưới dạng chuỗi


Gọi hàm Python theo tên chuỗi

Ví dụ: giả sử bạn có một hàm abc(), thì đây là cách bạn thường gọi hàm này, bằng cách nhập tên của nó theo nghĩa đen

abc()

Nhưng đôi khi, bạn có thể có một biến chuỗi với tên hàm là giá trị của nó

d="abc"

và bạn có thể muốn gọi hàm bằng biến chuỗi này

Nếu bạn sử dụng cú pháp sau, bạn sẽ gặp lỗi

d()
OR
"abc"()

Vì vậy, chúng tôi sẽ xem xét làm thế nào để khắc phục vấn đề này. Có nhiều cách khác nhau để gọi một hàm bằng cách sử dụng biến chuỗi. Chúng tôi sẽ xem xét các trường hợp sử dụng khác nhau cho việc này. Đầu tiên, nếu hàm được gọi nằm trong cùng một mô-đun từ nơi bạn đang gọi nó, thì bạn có thể sử dụng locals() hoặc globals() để gọi hàm theo chuỗi của nó. locals() chứa bảng ký hiệu cục bộ trong khi globals() chứa bảng ký hiệu toàn cầu. Các bảng biểu tượng này chứa tên hàm cũng như vị trí tham chiếu của chúng. Vì vậy, chúng có thể được sử dụng để gọi các chức năng. Dưới đây là các cách khác nhau để gọi hàm abc() sử dụng chuỗi “abc” hoặc biến chuỗi d đã xác định trước đó

locals()["abc"]()
OR
locals()[d]()
OR
globals()["abc"]()
OR
globals()[d]()

Nếu hàm abc() của bạn nằm trong một lớp E khác, thì bạn cần sửa đổi lệnh gọi hàm của mình như hình bên dưới. Giả sử bạn có lớp E với hàm abc()

class E:
    def __init__(self):
        pass

    def abc(self, arg):
        print('you called abc({})'.format(arg))

m = globals()['E']()
func = getattr(m, 'abc')
func('sample arg')

# Sample, all on one line
getattr(globals()['E'](), 'abc')('sample arg')

Trong đoạn mã trên, chúng ta đã tạo một lớp E với hàm abc() chấp nhận các đối số và hiển thị chúng. Chúng tôi sử dụng globals() để chỉ lớp E trước. Sau đó, chúng tôi sử dụng hàm getattr() để tham chiếu đến hàm abc() trong lớp E và lưu trữ tham chiếu trong một biến func. Sau đó, sử dụng tham chiếu này, chúng tôi gọi nó và truyền đối số 'sample arg' cho nó

Cách tiếp cận này cũng có thể được sử dụng để gọi các chức năng từ bên trong các mô-đun. Dưới đây là một ví dụ để nhập mô-đun foo và gọi thanh chức năng trong mô-đun này bằng tên chuỗi của nó

module = __import__('foo')
func = getattr(module, 'bar')
func()

Trong bài viết này, chúng ta đã biết một số cách gọi hàm python theo chuỗi. Bạn có thể sử dụng bất kỳ trong số họ theo yêu cầu của bạn

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về cách lấy tên hàm dưới dạng chuỗi trong Python với sự trợ giúp của một ví dụ

Hãy xem xét, chúng tôi có một chức năng sau

def add(a, b):
   return a + b

Bây giờ, chúng ta cần lấy tên hàm trên

Sử dụng tài sản __name__

Trong python, mọi hàm đều có thuộc tính dấu gạch dưới __name__ bằng cách sử dụng thuộc tính đó chúng ta có thể lấy tên hàm dưới dạng chuỗi

Nếu bạn cần gọi một hàm được cung cấp một tên chuỗi và hàm này được xác định trong một mô-đun khác, trước tiên bạn phải nhập mô-đun đó

Mẫu mã giả định rằng có một mô-đun tên là example_module nằm trong cùng một thư mục

def example_function(a, b):
    return a + b

Khi chúng ta có mô-đun xác định hàm đã nhập, chúng ta có thể sử dụng hàm getattr() để lấy hàm theo tên chuỗi

Hàm trả về giá trị của thuộc tính được cung cấp của đối tượng

Hàm nhận các tham số sau

TênMô tảđối tượngđối tượng có thuộc tính sẽ được truy xuấttên của giá trị mặc định được gán cho giá trị mặc định khi thuộc tính không tồn tại trên đối tượng

Hàm getattr() sẽ trả về hàm, vì vậy bước cuối cùng là gọi nó và cung cấp tất cả các đối số cần thiết

Nếu chức năng được xác định trong cùng một mô-đun, hãy sử dụng chức năng globals()

Gọi một hàm bằng tên Chuỗi bằng cách sử dụng globals()

Để gọi một chức năng bằng một tên chuỗi

  1. Sử dụng hàm globals() để lấy từ điển chứa các biến toàn cục của phạm vi hiện tại
  2. Sử dụng chuỗi làm khóa từ điển để lấy hàm
  3. Gọi chức năng

Hàm trả về một từ điển thực hiện không gian tên mô-đun hiện tại

Bạn có thể sử dụng chuỗi để truy cập khóa cụ thể trong từ điển

Có một khóa với tên của chức năng trỏ đến chức năng thực tế

Nếu một chức năng với tên đã cho không tồn tại trong mô-đun, bạn sẽ nhận được một ngoại lệ KeyError

Bước cuối cùng là sử dụng dấu ngoặc đơn để gọi hàm cung cấp cho nó bất kỳ đối số nào mà nó yêu cầu

Ngoài ra, bạn có thể xác định một từ điển ánh xạ tên hàm với các hàm thực tế

Từ điển functions_dict có tên hàm là khóa và hàm thực tế là giá trị

Câu lệnh if

class Employee():
    def __init__(self, first, last):
        self.first = first
        self.last = last

    def get_name(self):
        return self.first + ' ' + self.last
0 kiểm tra xem chuỗi đã chỉ định có trong từ điển hay không trước khi gọi hàm

Bạn có thể sử dụng hàm getattr() nếu bạn cần gọi một phương thức của lớp bằng tên chuỗi

Gọi một phương thức bằng tên Chuỗi trong Python

Để gọi một phương thức bằng một tên chuỗi

  1. Khởi tạo lớp để lấy một đối tượng
  2. Sử dụng hàm getattr() để truy cập phương thức
  3. Gọi phương thức

Nếu bạn phải gọi một phương thức bằng một tên chuỗi từ bên trong một phương thức lớp khác, bạn sẽ chuyển

class Employee():
    def __init__(self, first, last):
        self.first = first
        self.last = last

    def get_name(self):
        return self.first + ' ' + self.last
3 làm đối số đầu tiên cho hàm getattr()

Nếu lớp được định nghĩa trong một mô-đun khác, bạn sẽ phải nhập nó

Bạn có thể nhập lớp trực tiếp hoặc sử dụng phương thức

class Employee():
    def __init__(self, first, last):
        self.first = first
        self.last = last

    def get_name(self):
        return self.first + ' ' + self.last
5

Đây là một ví dụ nhập lớp trực tiếp và gọi một phương thức bằng tên chuỗi

Mẫu mã giả định rằng có một mô-đun tên là example_module nằm trong cùng một thư mục

________số 8_______

Chúng tôi đã sử dụng hàm getattr() để lấy lớp và sau đó sử dụng hàm này để lấy phương thức

Bước cuối cùng là gọi phương thức

Đây là một ví dụ sử dụng phương thức

class Employee():
    def __init__(self, first, last):
        self.first = first
        self.last = last

    def get_name(self):
        return self.first + ' ' + self.last
5 để nhập mô-đun trước khi gọi một phương thức cụ thể với tên chuỗi

Mẫu mã giả định rằng có một mô-đun tên là example_module trong cùng một thư mục và mô-đun đó định nghĩa một lớp getattr()0

Phương thức lấy tên của một mô-đun và nhập nó

Đối số getattr()1 có thể là tuyệt đối hoặc tương đối, e. g. getattr()2 hoặc getattr()3

Nếu bạn sử dụng tên gói tương đối, e. g. getattr()3, bạn phải truyền đối số thứ hai cho phương thức getattr()5, e. g. getattr()6 nhập khẩu getattr()2

Bạn có thể gọi một hàm trong chuỗi Python không?

Hàm Python thường được gọi bằng tên của chúng. Tuy nhiên, bạn cũng có thể sử dụng chuỗi để gọi hàm . Đối với điều đó, hãy sử dụng locals() và globals().

Các hàm Python nên được đặt tên như thế nào?

Tên hàm phải là chữ thường, với các từ được phân tách bằng dấu gạch dưới nếu cần để dễ đọc hơn . Tên biến tuân theo quy ước giống như tên hàm. mixCase chỉ được phép trong các ngữ cảnh mà đó đã là phong cách phổ biến (e. g. xâu chuỗi. py), để duy trì khả năng tương thích ngược.

Bạn có thể gọi một hàm là một biến trong Python không?

Trong Python, chúng ta có thể gán một hàm cho một biến . Và sử dụng biến đó, chúng ta có thể gọi hàm bao nhiêu lần chúng ta muốn. Qua đó, tăng khả năng tái sử dụng code. Chỉ cần gán một hàm cho biến mong muốn nhưng không có () i. e. chỉ với tên của chức năng.

Bạn có thể đặt một hàm làm đối số Python không?

Vì hàm là đối tượng nên chúng ta có thể chuyển chúng làm đối số cho các hàm khác . Các hàm có thể nhận các hàm khác làm đối số còn được gọi là hàm bậc cao. Trong ví dụ bên dưới, một hàm hello được tạo lấy một hàm làm đối số.