Hướng dẫn python call function in dictionary - chức năng gọi python trong từ điển

Tôi đang cố gắng sử dụng lập trình chức năng để tạo một từ điển chứa một khóa và chức năng để thực thi:

myDict={}
myItems=("P1","P2","P3",...."Pn")
def myMain(key):
    def ExecP1():
        pass
    def ExecP2():
        pass
    def ExecP3():
        pass
        ...
    def ExecPn():
        pass  

Bây giờ, tôi đã thấy một mã được sử dụng để tìm các hàm được xác định trong một mô -đun và tôi cần phải làm một cái gì đó như thế này:

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function

Vì vậy, câu hỏi của tôi là, làm cách nào để lập danh sách tất cả các hàm

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
9 và sau đó gán chúng cho mục mong muốn bằng từ điển A? Vì vậy, cuối cùng tôi sẽ có
def ExecPn():
    pass
myDict["Pn"]=ExecPn
0

Vấn đề thực sự của tôi là tôi có hàng tấn các mặt hàng đó và tôi tạo một thư viện sẽ xử lý chúng để người dùng cuối cùng chỉ cần gọi

def ExecPn():
    pass
myDict["Pn"]=ExecPn
1

Tôi nghĩ rằng sử dụng mô -đun kiểm tra, nhưng tôi không chắc chắn làm thế nào để làm điều đó.

Lý do của tôi để tránh:

def ExecPn():
    pass
myDict["Pn"]=ExecPn

là tôi phải bảo vệ mã vì tôi đang sử dụng nó để cung cấp một tính năng kịch bản trong ứng dụng của tôi.

Hướng dẫn python call function in dictionary - chức năng gọi python trong từ điển

Jonrsharpe

Huy hiệu vàng 111K2525 gold badges218 silver badges403 bronze badges

hỏi ngày 6 tháng 2 năm 2012 lúc 22:33Feb 6, 2012 at 22:33

5

Đơn giản hóa, đơn giản hóa, đơn giản hóa:

def p1(args):
    whatever

def p2(more args):
    whatever

myDict = {
    "P1": p1,
    "P2": p2,
    ...
    "Pn": pn
}

def myMain(name):
    myDict[name]()

Đó là tất cả những gì bạn cần.


Bạn có thể xem xét việc sử dụng

def ExecPn():
    pass
myDict["Pn"]=ExecPn
2 với mặc định có thể gọi được nếu
def ExecPn():
    pass
myDict["Pn"]=ExecPn
3 đề cập đến một chức năng không hợp lệ

def myMain(name):
    myDict.get(name, lambda: 'Invalid')()

(Chọn thủ thuật gọn gàng này từ Martijn Pieters)

Hướng dẫn python call function in dictionary - chức năng gọi python trong từ điển

cs95

353K87 Huy hiệu vàng653 Huy hiệu bạc704 Huy hiệu đồng87 gold badges653 silver badges704 bronze badges

Đã trả lời ngày 6 tháng 2 năm 2012 lúc 22:37Feb 6, 2012 at 22:37

S.LottS.LottS.Lott

378K79 Huy hiệu vàng503 Huy hiệu bạc773 Huy hiệu Đồng79 gold badges503 silver badges773 bronze badges

16

Đơn giản hóa, đơn giản hóa, đơn giản hóa + khô ráo:

tasks = {}
task = lambda f: tasks.setdefault(f.__name__, f)

@task
def p1():
    whatever

@task
def p2():
    whatever

def my_main(key):
    tasks[key]()

Đã trả lời ngày 9 tháng 9 năm 2016 lúc 16:20Sep 9, 2016 at 16:20

JoejoeJoe

16.1k11 Huy hiệu vàng59 Huy hiệu bạc74 Huy hiệu đồng11 gold badges59 silver badges74 bronze badges

4

Không tự hào về nó, nhưng:

def myMain(key):
    def ExecP1():
        pass
    def ExecP2():
        pass
    def ExecP3():
        pass
    def ExecPn():
        pass 
    locals()['Exec' + key]()

Tuy nhiên, tôi khuyên bạn nên đặt những thứ đó vào một mô -đun/lớp bất cứ điều gì, điều này thực sự khủng khiếp.


Nếu bạn sẵn sàng thêm một bộ trang trí cho từng chức năng, bạn có thể xác định một bộ trang trí thêm từng hàm vào từ điển:

def myMain(key):
    tasks = {}
    
    def task(task_fn):
        tasks[task_fn.__name__] = task_fn
    
    @task
    def ExecP1():
        print(1)
    @task
    def ExecP2():
        print(2)
    @task
    def ExecP3():
        print(3)
    @task
    def ExecPn():
        print(4)
    
    tasks['Exec' + key]()

Một tùy chọn khác là đặt tất cả các chức năng trong một lớp (hoặc trong một mô -đun khác) và sử dụng

def ExecPn():
    pass
myDict["Pn"]=ExecPn
4:

def myMain(key):
    class Tasks:
        def ExecP1():
            print(1)
        def ExecP2():
            print(2)
        def ExecP3():
            print(3)
        def ExecPn():
            print(4)
    
    task = getattr(Tasks, 'Exec' + key)
    task()

Đã trả lời ngày 6 tháng 2 năm 2012 lúc 22:47Feb 6, 2012 at 22:47

OhadohadOhad

2.71917 Huy hiệu bạc14 Huy hiệu đồng17 silver badges14 bronze badges

2

# index dictionary by list of key names

def fn1():
    print "One"

def fn2():
    print "Two"

def fn3():
    print "Three"

fndict = {"A": fn1, "B": fn2, "C": fn3}

keynames = ["A", "B", "C"]

fndict[keynames[1]]()

# keynames[1] = "B", so output of this code is

# Two

Đã trả lời ngày 8 tháng 5 năm 2017 lúc 18:31May 8, 2017 at 18:31

Hướng dẫn python call function in dictionary - chức năng gọi python trong từ điển

jwc3119jwc3119jwc3119

Huy hiệu Bạc 9911 silver badge1 bronze badge

Điều này sẽ gọi các phương thức từ từ điển

Đây là câu lệnh Python Switch với Gọi chức năng

Tạo một vài mô -đun theo yêu cầu của bạn. Nếu muốn vượt qua các đối số thì vượt qua.

Tạo một từ điển, sẽ gọi các mô -đun này theo yêu cầu.

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
0

Đã trả lời ngày 27 tháng 4 năm 2018 lúc 8:42Apr 27, 2018 at 8:42

AkdakdakD

1.0371 Huy hiệu vàng10 Huy hiệu bạc15 Huy hiệu đồng1 gold badge10 silver badges15 bronze badges

1

Bạn chỉ có thể sử dụng

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
1

Đã trả lời ngày 19 tháng 4 năm 2018 lúc 17:28Apr 19, 2018 at 17:28

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
2

Đã trả lời ngày 6 tháng 2 năm 2012 lúc 22:37Feb 6, 2012 at 22:37

Hướng dẫn python call function in dictionary - chức năng gọi python trong từ điển

378K79 Huy hiệu vàng503 Huy hiệu bạc773 Huy hiệu Đồngsynthesizerpatel

Đơn giản hóa, đơn giản hóa, đơn giản hóa + khô ráo:5 gold badges73 silver badges91 bronze badges

2

Đã trả lời ngày 9 tháng 9 năm 2016 lúc 16:20

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
3

JoejoeFeb 9, 2020 at 1:10

Hướng dẫn python call function in dictionary - chức năng gọi python trong từ điển

16.1k11 Huy hiệu vàng59 Huy hiệu bạc74 Huy hiệu đồngMilind Deore

Không tự hào về nó, nhưng:4 gold badges22 silver badges39 bronze badges

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
4

Tuy nhiên, tôi khuyên bạn nên đặt những thứ đó vào một mô -đun/lớp bất cứ điều gì, điều này thực sự khủng khiếp.Dec 22, 2020 at 11:57

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
5

Nếu bạn sẵn sàng thêm một bộ trang trí cho từng chức năng, bạn có thể xác định một bộ trang trí thêm từng hàm vào từ điển:

Một tùy chọn khác là đặt tất cả các chức năng trong một lớp (hoặc trong một mô -đun khác) và sử dụng

def ExecPn():
    pass
myDict["Pn"]=ExecPn
4:

Đã trả lời ngày 6 tháng 2 năm 2012 lúc 22:4713 gold badges122 silver badges124 bronze badges

OhadohadFeb 20, 2017 at 17:27

1

2.71917 Huy hiệu bạc14 Huy hiệu đồng

  1. Đã trả lời ngày 8 tháng 5 năm 2017 lúc 18:31
  2. Huy hiệu Bạc 991
  3. Điều này sẽ gọi các phương thức từ từ điển

Đây là câu lệnh Python Switch với Gọi chức năng

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
6

Tạo một vài mô -đun theo yêu cầu của bạn. Nếu muốn vượt qua các đối số thì vượt qua.

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
7

or:

    for myitem in myItems:
        myDict[myitem] = ??? #to dynamically find the corresponding function
8

Tạo một từ điển, sẽ gọi các mô -đun này theo yêu cầu.

Đã trả lời ngày 27 tháng 4 năm 2018 lúc 8:42Feb 6, 2012 at 22:49

5

Chúng ta có thể gọi một chức năng trong từ điển trong Python không?

Đưa ra một từ điển, gán các khóa của nó là các cuộc gọi chức năng.Trường hợp 1: Không có thông số.Cách được sử dụng để đạt được nhiệm vụ này là, tên hàm được giữ làm giá trị từ điển và trong khi gọi bằng các phím, dấu ngoặc '()' được thêm vào.. Case 1 : Without Params. The way that is employed to achieve this task is that, function name is kept as dictionary values, and while calling with keys, brackets '()' are added.

Dict () và {} giống nhau?

Dict () so với {} Python cung cấp hai cách khác nhau để khởi tạo từ điển - có lẽ là loại được sử dụng nhiều nhất trong mã Python.Nếu bạn quan tâm đến hiệu suất, bạn sẽ tìm thấy rất nhiều bài viết trong đó nó tuyên bố rõ ràng rằng Dict () chậm hơn so với chỉ sử dụng {}.dict() is slower than simply using {}.

Chức năng Dict () trong Python là gì?

Hàm Dict () tạo ra một từ điển.Một từ điển là một bộ sưu tập không được đặt hàng, có thể thay đổi và được lập chỉ mục.creates a dictionary. A dictionary is a collection which is unordered, changeable and indexed.

Phương thức từ điển Get () là gì?

Phương thức từ điển Python GET () Phương thức Get () trả về giá trị của mục với khóa được chỉ định.returns the value of the item with the specified key.