Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

2288

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Làm cách nào để gọi một hàm, sử dụng một chuỗi có tên của chức năng? Ví dụ:

import foo
func_name = "bar"
call(foo, func_name)  # calls foo.bar()

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Mateen Ulhaq

22.3K16 Huy hiệu vàng86 Huy hiệu bạc127 Huy hiệu đồng16 gold badges86 silver badges127 bronze badges

Hỏi ngày 6 tháng 8 năm 2008 lúc 3:36Aug 6, 2008 at 3:36

2

Cho một mô -đun

locals()["myfunction"]()
7 với Phương thức
locals()["myfunction"]()
8:

import foo
bar = getattr(foo, 'bar')
result = bar()

locals()["myfunction"]()
9 có thể được sử dụng tương tự trên các phương thức giới hạn phiên bản lớp, các phương thức cấp mô-đun, phương thức lớp ... danh sách tiếp tục.

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Mateen Ulhaq

22.3K16 Huy hiệu vàng86 Huy hiệu bạc127 Huy hiệu đồng16 gold badges86 silver badges127 bronze badges

Hỏi ngày 6 tháng 8 năm 2008 lúc 3:36Aug 6, 2008 at 3:57

17

  • Cho một mô -đun

    locals()["myfunction"]()
    
    7 với Phương thức
    locals()["myfunction"]()
    
    8:

    locals()["myfunction"]()
    
  • locals()["myfunction"]()
    
    9 có thể được sử dụng tương tự trên các phương thức giới hạn phiên bản lớp, các phương thức cấp mô-đun, phương thức lớp ... danh sách tiếp tục.

    globals()["myfunction"]()
    

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Mateen Ulhaq

22.3K16 Huy hiệu vàng86 Huy hiệu bạc127 Huy hiệu đồng16 gold badges86 silver badges127 bronze badges

Hỏi ngày 6 tháng 8 năm 2008 lúc 3:36May 7, 2009 at 12:45

Cho một mô -đun

locals()["myfunction"]()
7 với Phương thức
locals()["myfunction"]()
8:sastanin

locals()["myfunction"]()
9 có thể được sử dụng tương tự trên các phương thức giới hạn phiên bản lớp, các phương thức cấp mô-đun, phương thức lớp ... danh sách tiếp tục.13 gold badges100 silver badges128 bronze badges

4

Đã trả lời ngày 6 tháng 8 năm 2008 lúc 3:57

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

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Mateen Ulhaq

22.3K16 Huy hiệu vàng86 Huy hiệu bạc127 Huy hiệu đồng16 gold badges86 silver badges127 bronze badges

Hỏi ngày 6 tháng 8 năm 2008 lúc 3:36Aug 7, 2008 at 11:35

HS.HS.HS.

Cho một mô -đun

locals()["myfunction"]()
7 với Phương thức
locals()["myfunction"]()
8:8 gold badges40 silver badges48 bronze badges

6

locals()["myfunction"]()
9 có thể được sử dụng tương tự trên các phương thức giới hạn phiên bản lớp, các phương thức cấp mô-đun, phương thức lớp ... danh sách tiếp tục.

# Get class from globals and create an instance
m = globals()['our_class']()

# Get the function (from the instance) that we need to call
func = getattr(m, 'function_name')

# Call it
func()

Đã trả lời ngày 6 tháng 8 năm 2008 lúc 3:57

Sử dụng
globals()["myfunction"]()
0, trả về một từ điển với bảng ký hiệu cục bộ hiện tại:

Sử dụng

globals()["myfunction"]()
1, trả về một từ điển với bảng ký hiệu toàn cầu:

def sampleFunc(arg):
    print('you called sampleFunc({})'.format(arg))

globals()['sampleFunc']('sample arg')

tbc0

Đã trả lời ngày 7 tháng 5 năm 2009 lúc 12:451 gold badge16 silver badges21 bronze badges

SastaninsastaninAug 19, 2012 at 9:40

39,4K13 Huy hiệu vàng100 Huy hiệu bạc128 Huy hiệu đồngSourcegeek

Dựa trên giải pháp của Patrick, để có được mô -đun một cách tự động, hãy nhập nó bằng cách sử dụng:1 gold badge9 silver badges2 bronze badges

1

Đã trả lời ngày 7 tháng 8 năm 2008 lúc 11:35

import importlib
function_string = 'mypackage.mymodule.myfunc'
mod_name, func_name = function_string.rsplit('.',1)
mod = importlib.import_module(mod_name)
func = getattr(mod, func_name)
result = func()

15K8 Huy hiệu vàng40 Huy hiệu bạc48 Huy hiệu đồngOct 16, 2013 at 0:24

Chỉ là một đóng góp đơn giản. Nếu lớp mà chúng ta cần ví dụ nằm trong cùng một tệp, chúng ta có thể sử dụng một cái gì đó như thế này:ferrouswheel

Ví dụ:2 gold badges22 silver badges24 bronze badges

2

class A:
    def __init__(self):
        pass

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

m = globals()['A']()
func = getattr(m, 'sampleFunc')
func('sample arg')

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

functions = {'myfoo': foo.bar}

mystring = 'myfoo'
if mystring in functions:
    functions[mystring]()

Và, nếu không phải là một lớp học:

1.4691 Huy hiệu vàng16 Huy hiệu bạc21 Huy hiệu đồngOct 24, 2016 at 13:20

Đã trả lời ngày 19 tháng 8 năm 2012 lúc 9:40

SourceGeekSourceGeek

import foo
bar = getattr(foo, 'bar')
result = bar()
0

1.5691 Huy hiệu vàng9 Huy hiệu bạc2 Huy hiệu đồng

import foo
bar = getattr(foo, 'bar')
result = bar()
1

Đưa ra một chuỗi, với một đường dẫn python hoàn chỉnh đến một hàm, đây là cách tôi đi về kết quả của chức năng đã nói:

import foo
bar = getattr(foo, 'bar')
result = bar()
2

Đã trả lời ngày 16 tháng 10 năm 2013 lúc 0:24

import foo
bar = getattr(foo, 'bar')
result = bar()
3

FerrouswheelferrouswheelApr 9, 2014 at 10:17

005000050050000500500005

3,4612 Huy hiệu vàng22 Huy hiệu bạc24 Huy hiệu đồng2 gold badges30 silver badges38 bronze badges

2

Câu trả lời tốt nhất theo Câu hỏi thường gặp về lập trình Python sẽ là:

import foo
bar = getattr(foo, 'bar')
result = bar()
4

Ưu điểm chính của kỹ thuật này là các chuỗi không cần phải khớp với tên của các chức năng. Đây cũng là kỹ thuật chính được sử dụng để mô phỏng cấu trúc trường hợpFeb 14, 2012 at 5:55

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Đã trả lời ngày 24 tháng 10 năm 2016 lúc 13:20trubliphone

Câu trả lời (tôi hy vọng) không ai muốn3 gold badges38 silver badges59 bronze badges

2

Eval thích hành vi

Tại sao không thêm tự động nhập khẩu

import foo
bar = getattr(foo, 'bar')
result = bar()
5

Trong trường hợp chúng tôi có thêm từ điển, chúng tôi muốn kiểm traDec 7, 2016 at 18:29

tvt173tvt173tvt173

Chúng ta cần đi sâu hơn19 silver badges17 bronze badges

4

Đã trả lời ngày 9 tháng 4 năm 2014 lúc 10:17

3,4972 Huy hiệu vàng30 Huy hiệu bạc38 Huy hiệu Đồng

import foo
bar = getattr(foo, 'bar')
result = bar()
6

Đối với những gì nó có giá trị, nếu bạn cần chuyển tên và tên ứng dụng và tên và tên ứng dụng như một chuỗi, thì bạn có thể làm điều này:

Đã trả lời ngày 14 tháng 2 năm 2012 lúc 5:55

Trubliphonetrubliphone

3.9113 huy hiệu vàng38 Huy hiệu bạc59 Huy hiệu đồngMar 26, 2019 at 18:15

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Thử cái này. Mặc dù điều này vẫn sử dụng Eval, nhưng nó chỉ sử dụng nó để triệu tập chức năng từ bối cảnh hiện tại. Sau đó, bạn có chức năng thực sự để sử dụng như bạn muốn.Serjik

Lợi ích chính cho tôi từ điều này là bạn sẽ nhận được bất kỳ lỗi liên quan đến đánh giá nào tại điểm triệu tập hàm. Sau đó, bạn sẽ chỉ nhận được các lỗi liên quan đến chức năng khi bạn gọi.7 gold badges60 silver badges70 bronze badges

3

Đã trả lời ngày 7 tháng 12 năm 2016 lúc 18:29

import foo
bar = getattr(foo, 'bar')
result = bar()
7

1.64819 Huy hiệu bạc17 Huy hiệu đồng

Vì câu hỏi này, làm thế nào để gọi các phương thức tự động trong một lớp bằng cách sử dụng gán tên phương thức cho một biến [trùng lặp] được đánh dấu là một bản sao như bản này, tôi đang đăng một câu trả lời liên quan ở đây:

Kịch bản là, một phương thức trong một lớp muốn gọi một phương thức khác trên cùng một lớp một cách linh hoạt, tôi đã thêm một số chi tiết vào ví dụ ban đầu cung cấp một số kịch bản rộng hơn và sự rõ ràng:Dec 28, 2012 at 16:56

Đầu ra (Python 3.7.x)Natdrip

Hàm1: 121 gold badge11 silver badges25 bronze badges

4

Hàm2: 12

import foo
bar = getattr(foo, 'bar')
result = bar()
8

Đã trả lời ngày 26 tháng 3 năm 2019 lúc 18:15

import foo
bar = getattr(foo, 'bar')
result = bar()
9

SerjikserjikJul 16, 2020 at 15:20

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

10.1k7 Huy hiệu vàng60 Huy hiệu bạc70 Huy hiệu đồngLukas

Không có gì được đề nghị giúp tôi. Tôi đã khám phá ra điều này mặc dù.19 silver badges25 bronze badges

Tôi đang sử dụng Python 2.66

locals()["myfunction"]()
0

Hi vọng điêu nay co ichJul 7, 2021 at 9:30

1

Đã trả lời ngày 28 tháng 12 năm 2012 lúc 16:56

locals()["myfunction"]()
1

NatdripnatdripSep 20, 2021 at 6:13

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

U12-ForwardU12-ForwardU12-Forward

1.0991 Huy hiệu vàng11 Huy hiệu bạc25 Huy hiệu đồng13 gold badges77 silver badges96 bronze badges

locals()["myfunction"]()
9 Phương thức gọi theo tên từ một đối tượng. Nhưng đối tượng này nên là cha mẹ của lớp gọi. Lớp cha có thể được nhận bởi
globals()["myfunction"]()
6

locals()["myfunction"]()
2

Đã trả lời ngày 1 tháng 7 năm 2020 lúc 8:09Jul 1, 2020 at 8:09

정도 유정도정도유

5294 Huy hiệu bạc6 Huy hiệu Đồng4 silver badges6 bronze badges

Tôi đang phải đối mặt với vấn đề tương tự trước đây, đó là chuyển đổi một chuỗi thành một hàm. Nhưng tôi không thể sử dụng

globals()["myfunction"]()
7 hoặc
globals()["myfunction"]()
8, vì tôi không muốn thực thi mã này ngay lập tức.but i can't use
globals()["myfunction"]()
7 or
globals()["myfunction"]()
8, because i don't want to execute this code immediately.

ví dụ. Tôi có một chuỗi

globals()["myfunction"]()
9 và tôi muốn gán nó cho
module = __import__('foo')
func = getattr(module, 'bar')
func()
0 dưới dạng tên hàm thay vì một chuỗi, điều đó có nghĩa là tôi có thể gọi hàm bằng
module = __import__('foo')
func = getattr(module, 'bar')
func()
1 theo yêu cầu.ON DEMAND.

Đây là mã của tôi:

locals()["myfunction"]()
3

Đối với câu hỏi của bạn, bạn chỉ cần thêm tên mô -đun

locals()["myfunction"]()
7 và
module = __import__('foo')
func = getattr(module, 'bar')
func()
3 trước
module = __import__('foo')
func = getattr(module, 'bar')
func()
4 như sau:

locals()["myfunction"]()
4

CẢNH BÁO!!! Hoặc

globals()["myfunction"]()
7 hoặc
module = __import__('foo')
func = getattr(module, 'bar')
func()
6 là một phương pháp nguy hiểm, bạn nên xác nhận sự an toàn. Hoặc
globals()["myfunction"]()
7 hoặc
module = __import__('foo')
func = getattr(module, 'bar')
func()
6 là một phương pháp nguy hiểm, bạn nên xác nhận sự an toàn. Hoặc
globals()["myfunction"]()
7 hoặc
module = __import__('foo')
func = getattr(module, 'bar')
func()
6 là một phương pháp nguy hiểm, bạn nên xác nhận sự an toàn.
WARNING!!! either
globals()["myfunction"]()
7 or
module = __import__('foo')
func = getattr(module, 'bar')
func()
6 is a dangerous method, you should confirm the safety.
WARNING!!! either
globals()["myfunction"]()
7 or
module = __import__('foo')
func = getattr(module, 'bar')
func()
6 is a dangerous method, you should confirm the safety.

Đã trả lời ngày 15 tháng 6 năm 2021 lúc 8:14Jun 15, 2021 at 8:14

3

Bạn có nghĩa là đưa con trỏ đến hàm bên trong từ mô -đun

locals()["myfunction"]()
5

Đây không phải là một cách pythonic tốt hơn thực sự có thể cho các trường hợp đúng giờ

Đã trả lời ngày 30 tháng 12 năm 2021 lúc 1:17Dec 30, 2021 at 1:17

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

Franz Kurtfranz KurtFranz Kurt

8952 Huy hiệu vàng13 Huy hiệu bạc12 Huy hiệu đồng2 gold badges13 silver badges12 bronze badges

1

Đây là một câu trả lời đơn giản, điều này sẽ cho phép bạn xóa màn hình chẳng hạn. Có hai ví dụ dưới đây, với Eval và EXEC, sẽ in 0 ở trên cùng sau khi làm sạch (nếu bạn đang sử dụng Windows, thay đổi

# Get class from globals and create an instance
m = globals()['our_class']()

# Get the function (from the instance) that we need to call
func = getattr(m, 'function_name')

# Call it
func()
1 thành
# Get class from globals and create an instance
m = globals()['our_class']()

# Get the function (from the instance) that we need to call
func = getattr(m, 'function_name')

# Call it
func()
2, người dùng Linux và Mac để lại như là ví dụ) hoặc chỉ thực hiện nó, tương ứng.

locals()["myfunction"]()
6

Đã trả lời ngày 28 tháng 8 năm 2019 lúc 16:46Aug 28, 2019 at 16:46

Hướng dẫn how do you call a function from a string in python? - làm thế nào để bạn gọi một hàm từ một chuỗi trong python?

2

Làm thế nào để bạn gọi một hàm trong một chuỗi?

Có hai phương thức để gọi một hàm từ chuỗi được lưu trữ trong một biến. Chế độ đầu tiên là bằng cách sử dụng phương thức đối tượng cửa sổ và phương thức thứ hai là bằng cách sử dụng phương thức eval (). Phương pháp eval () cũ hơn và nó không được dùng.using the window object method and the second one is by using eval() method. The eval() method is older and it is deprecated.

Làm thế nào để bạn gọi một hàm từ một mô -đun trong Python?

Bạn cần sử dụng từ khóa nhập cùng với tên mô -đun mong muốn. Khi thông dịch viên bắt gặp một câu lệnh nhập, nó sẽ nhập mô -đun vào chương trình hiện tại của bạn. Bạn có thể sử dụng các hàm bên trong một mô -đun bằng cách sử dụng toán tử DOT (.) Cùng với tên mô -đun.using a dot(.) operator along with the module name.

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

Gọi các chức năng với chuỗi F-String F-Strings cho phép chúng tôi gọi các chức năng trong đó.Do đó, tối ưu hóa mã đến một mức độ.Theo cách tương tự có thể được sử dụng để tạo các chức năng Lambda trong các vòng tay F-String.Python f-strings enables us to call functions within it. Thus, optimizing the code to an extent. The same way can be used for creating lambda functions within f-string bracets.

__ Gọi __ Phương thức trong Python là gì?

Phương thức __call__ cho phép các lập trình viên Python viết các lớp trong đó các trường hợp hoạt động như các hàm và có thể được gọi giống như một hàm.Khi thể hiện được gọi là một hàm;Nếu phương pháp này được xác định, x (arg1, arg2, ...) là tốc ký cho x.__call __ (arg1, arg2, ...).enables Python programmers to write classes where the instances behave like functions and can be called like a function. When the instance is called as a function; if this method is defined, x(arg1, arg2, ...) is a shorthand for x. __call__(arg1, arg2, ...) .