Hướng dẫn python call function with string argument - hàm gọi python với đối số chuỗi

Vài ngày trước tôi đã tìm kiếm trên mạng và tôi đã tìm thấy một bài viết thú vị về từ điển Python. Đó là về việc sử dụng các khóa trong từ điển để gọi một hàm. Trong bài viết đó, tác giả đã xác định một số chức năng, và sau đó là một từ điển có khóa giống hệt như tên hàm. Sau đó, anh ta có thể nhận được một tham số đầu vào từ người dùng và gọi cùng một phương thức (một cái gì đó như thực hiện ngắt trường hợp) sau đó tôi nhận ra về điều tương tự nhưng bằng cách nào đó khác nhau. Tôi muốn biết làm thế nào tôi có thể thực hiện điều này. Nếu tôi có một chức năng:

def fullName( name = "noName", family = "noFamily" ):
    return name += family

Và bây giờ nếu tôi có một chuỗi như thế này:

myString = "fullName( name = 'Joe', family = 'Brand' )"

Có cách nào để thực hiện truy vấn này và nhận được kết quả không: ví dụ như Joebrand mà tôi nhớ là chúng ta có thể đưa ra một câu lệnh EXEC () và nó làm điều đó cho chúng ta. Nhưng tôi không chắc chắn về trường hợp đặc biệt này, và tôi cũng không biết cách hiệu quả trong Python. Và tôi cũng sẽ rất biết ơn khi giúp tôi làm thế nào để xử lý giá trị trả về các hàm đó, ví dụ như trong trường hợp của tôi, làm thế nào tôi có thể in tên đầy đủ được trả về bởi hàm đó?
For example something I remember is that we might give a string to exec() statement and it does it for us. But I’m not sure about this special case, and also I do not know the efficient way in Python. And also I will be so grateful to help me how to handle that functions return value, for example in my case how can I print the full name returned by that function?

hỏi ngày 9 tháng 11 năm 2010 lúc 8:49Nov 9, 2010 at 8:49

Hướng dẫn python call function with string argument - hàm gọi python với đối số chuỗi

3

Điều này không trả lời chính xác câu hỏi của bạn, nhưng có lẽ nó sẽ giúp

Như đã đề cập,

myString = "fullName( name = 'Joe', family = 'Brand' )"
2 nên tránh nếu có thể. Một cách tốt hơn IMO là sử dụng việc giải nén từ điển. Điều này cũng rất năng động và ít dễ bị lỗi.

Example:

def fullName(name = "noName", family = "noFamily"):
    return name + family

functionList = {'fullName': fullName}

function = 'fullName'
parameters = {'name': 'Foo', 'family': 'Bar'}

print functionList[function](**parameters)
# prints FooBar

parameters = {'name': 'Foo'}
print functionList[function](**parameters)
# prints FoonoFamily

Đã trả lời ngày 9 tháng 11 năm 2010 lúc 9:02Nov 9, 2010 at 9:02

Hướng dẫn python call function with string argument - hàm gọi python với đối số chuỗi

Felix Klingfelix KlingFelix Kling

770K172 Huy hiệu vàng1069 Huy hiệu bạc1115 Huy hiệu đồng172 gold badges1069 silver badges1115 bronze badges

0

Bạn có thể sử dụng eval ():

myString = "fullName( name = 'Joe', family = 'Brand' )"
result = eval(myString)

Mặc dù vậy, hãy cẩn thận,

myString = "fullName( name = 'Joe', family = 'Brand' )"
3 được coi là xấu xa bởi nhiều người.

Đã trả lời ngày 9 tháng 11 năm 2010 lúc 8:51Nov 9, 2010 at 8:51

Frédéric Hamidifrédéric HamidiFrédéric Hamidi

253K41 Huy hiệu vàng473 Huy hiệu bạc471 Huy hiệu Đồng41 gold badges473 silver badges471 bronze badges

5

Tôi biết câu hỏi này khá cũ, nhưng bạn có thể làm điều gì đó như thế này:

argsdict = {'name': 'Joe', 'family': 'Brand'}
globals()['fullName'](**argsdict)

myString = "fullName( name = 'Joe', family = 'Brand' )"
4 là một từ điển đối số,
myString = "fullName( name = 'Joe', family = 'Brand' )"
5 gọi hàm bằng một chuỗi và
myString = "fullName( name = 'Joe', family = 'Brand' )"
6 mở rộng từ điển sang danh sách tham số. Sạch hơn nhiều so với
myString = "fullName( name = 'Joe', family = 'Brand' )"
2. Rắc rối duy nhất nằm ở việc tách chuỗi. Một giải pháp (rất lộn xộn):

example = 'fullName(name=\'Joe\',family=\'Brand\')'
# Split at left parenthesis
funcname, argsstr = example.split('(')
# Split the parameters
argsindex = argsstr.split(',')
# Create an empty dictionary
argsdict = dict()
# Remove the closing parenthesis
# Could probably be done better with re...
argsindex[-1] = argsindex[-1].replace(')', '')
for item in argsindex:
    # Separate the parameter name and value
    argname, argvalue = item.split('=')
    # Add it to the dictionary
    argsdict.update({argname: argvalue})
# Call our function
globals()[funcname](**argsdict)

Đã trả lời ngày 22 tháng 5 năm 2013 lúc 5:05May 22, 2013 at 5:05

kirbyfan64soskirbyfan64soskirbyfan64sos

9,9716 Huy hiệu vàng54 Huy hiệu bạc73 Huy hiệu đồng6 gold badges54 silver badges73 bronze badges

1

Nói chung, các hàm Python được gọi bằng cách sử dụng tên của chúng làm nghĩa đen. Nhưng đôi khi bạn có thể cần gọi chức năng Python bằng biến chuỗi. Trong bài viết này, chúng tôi sẽ học cách gọi các chức năng Python bằng cách sử dụng tên của chúng dưới dạng chuỗi.

Ví dụ: chúng ta hãy nói rằng 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 tên là giá trị của nó.

d="abc"

Và bạn có thể muốn gọi chức năng 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 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 điều này. Đầu tiên, nếu hàm được gọi là 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 ký hiệu này chứa tên chức năng cũng như các 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 () bằng cách sử dụng chuỗi ABC ABC hoặc biến chuỗi D được xác định trước đó.

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

Nếu chức năng ABC () của bạn nằm trong một loại E khác, thì bạn cần sửa đổi cuộc gọi chức năng của mình như được hiển thị bên dưới. Hãy để chúng tôi nói rằng bạn có lớp E với chức năng ABC ().

myString = "fullName( name = 'Joe', family = 'Brand' )"
0

Trong mã trên, chúng tôi đã tạo một loại 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 đầu tiên. Sau đó, chúng tôi sử dụng hàm getAttr () để chỉ hàm abc () trong lớp E và lưu trữ tham chiếu trong một func biến. Sau đó, sử dụng tham chiếu này, chúng tôi gọi nó và chuyển một đối số ‘mẫu arg cho nó.

Cách tiếp cận này 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à thanh chức năng cuộc gọi trong mô -đun này bằng tên chuỗi của nó.

myString = "fullName( name = 'Joe', family = 'Brand' )"
1

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

Cũng đọc:

Cách lưu tên người dùng Git & Mật khẩu Làm thế nào để lấy tên lớp của phiên bản trong Pythonhow để khóa tệp trong Pythonhow để sử dụng các biến Boolean trong skropthow shell để kết hợp các biến chuỗi trong script shell
How to Get Classname of Instance in Python
How to Lock File in Python
How to Use Boolean Variables in Shell Script
How to Concatenate String Variables in Shell Script

Bài viết liên quan:

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

Sử dụng getAttr () để gọi một phương thức lớp theo tên của nó dưới dạng cuộc gọi chuỗi getAttr (đối tượng, tên) bằng cách sử dụng tên phương thức trong biểu mẫu chuỗi dưới dạng tên và lớp của nó là đối tượng. Gán kết quả cho một biến và sử dụng nó để gọi phương thức với một thể hiện của lớp làm đối số. Call getattr(object, name) using a method name in string form as name and its class as object . Assign the result to a variable, and use it to call the method with an instance of the class as an argument.

Làm cách nào để gọi một hàm có tham số trong Python?

Cách xác định và gọi một chức năng cơ bản trong Python..
Nhập tên chức năng ..
Tên chức năng phải được theo sau bởi dấu ngoặc đơn. Nếu có bất kỳ đối số cần thiết, chúng phải được thông qua trong dấu ngoặc đơn. Nếu chức năng không có bất kỳ đối số nào, bạn vẫn cần dấu ngoặc đơn ..

Bạn có thể sử dụng một chuỗi để gọi một hàm không?

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 ().. The first one is by using the window object method and the second one is by using eval() method.

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

Nếu bạn vượt qua các đối số bất biến như số nguyên, chuỗi hoặc bộ dữ liệu cho một hàm, các hành vi vượt qua như giá trị gọi.Tham chiếu đối tượng được chuyển đến các tham số chức năng.Chúng không thể được thay đổi trong chức năng, vì chúng không thể thay đổi, tức là chúng là bất biến.. The object reference is passed to the function parameters. They can't be changed within the function, because they can't be changed at all, i.e. they are immutable.