Phương thức
eval[expression, globals=None, locals=None]8 phân tích biểu thức được truyền vào phương thức này và chạy biểu thức python [mã] trong chương trình.
Thí dụ
number = 9
# eval performs the multiplication passed as argument
square_number = eval['number * number']
print[square_number]
# Output: 81
Eval [] Cú pháp
Cú pháp của
eval[expression, globals=None, locals=None]8 là:
eval[expression, globals=None, locals=None]
eval [] tham số
Hàm
eval[expression, globals=None, locals=None]8 mất ba tham số:
- Biểu thức - Chuỗi phân tích cú pháp và được đánh giá là biểu thức Python - the string parsed and evaluated as a Python expression
- Globals [Tùy chọn] - Từ điển [optional] - a dictionary
- Người dân địa phương [tùy chọn]- một đối tượng ánh xạ. Từ điển là loại ánh xạ tiêu chuẩn và thường được sử dụng trong Python. [optional]- a mapping object. Dictionary is the standard and commonly used mapping type in Python.
Việc sử dụng toàn cầu và người dân địa phương sẽ được thảo luận sau trong bài viết này.
eval [] giá trị trả về
Phương pháp
eval[expression, globals=None, locals=None]8 trả về kết quả được đánh giá từ biểu thức.
Ví dụ 1: Làm thế nào Eval [] hoạt động trong Python
x = 1
print[eval['x + 1']]
Đầu ra
2
Ở đây, hàm
eval[expression, globals=None, locals=None]8 đánh giá biểu thức
x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
# Perimeter of Square
def calculatePerimeter[l]:
return 4*l
# Area of Square
def calculateArea[l]:
return l*l
expression = input["Type a function: "]
for l in range[1, 5]:
if [expression == 'calculatePerimeter[l]']:
print["If length is ", l, ", Perimeter = ", eval[expression]]
elif [expression == 'calculateArea[l]']:
print["If length is ", l, ", Area = ", eval[expression]]
else:
print['Wrong Function']
break
Đầu ra
Type a function: calculateArea[l] If length is 1 , Area = 1 If length is 2 , Area = 4 If length is 3 , Area = 9 If length is 4 , Area = 16
Ở đây, hàm eval[expression, globals=None, locals=None]
8 đánh giá biểu thức x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.
x = 1
print[eval['x + 1']]
x = 1
print[eval['x + 1']]
Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
Cảnh báo khi sử dụng eval []
Hãy xem xét một tình huống mà bạn đang sử dụng hệ thống Unix [MacOS, Linux, v.v.] và bạn đã nhập mô -đun
x = 1
print[eval['x + 1']]
5. Mô -đun OS cung cấp một cách di động để sử dụng các chức năng hệ điều hành như đọc hoặc ghi vào tệp.from math import *
print[eval['dir[]']]
Đầu ra
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'os', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Ở đây, hàm eval[expression, globals=None, locals=None]
8 đánh giá biểu thức x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.
x = 1
print[eval['x + 1']]
x = 1
print[eval['x + 1']]
Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
Cảnh báo khi sử dụng eval []
Hãy xem xét một tình huống mà bạn đang sử dụng hệ thống Unix [MacOS, Linux, v.v.] và bạn đã nhập mô -đun
x = 1
print[eval['x + 1']]
5. Mô -đun OS cung cấp một cách di động để sử dụng các chức năng hệ điều hành như đọc hoặc ghi vào tệp.print[eval['dir[]']
Nếu bạn cho phép người dùng nhập giá trị bằng x = 1
print[eval['x + 1']]
6, người dùng có thể ban hành các lệnh thay đổi tệp hoặc thậm chí xóa tất cả các tệp bằng lệnh: x = 1
print[eval['x + 1']]
7.
x = 1
print[eval['x + 1']]
x = 1
print[eval['x + 1']]
Nếu bạn đang sử dụng
x = 1
print[eval['x + 1']]
6 trong mã của mình, nên kiểm tra các biến và phương thức nào mà người dùng có thể sử dụng. Bạn có thể thấy các biến và phương thức nào có sẵn bằng phương thức dir [].Hạn chế sử dụng các phương thức và biến có sẵn trong eval [] You can check the current global and local dictionary in Python using globals[] and locals[] built-in methods respectively.
Thường xuyên hơn không, tất cả các phương thức và biến có sẵn được sử dụng trong biểu thức [tham số đầu tiên thành eval[expression, globals=None, locals=None]
8] có thể không cần thiết hoặc thậm chí có thể có lỗ bảo mật. Bạn có thể cần hạn chế việc sử dụng các phương pháp và biến này cho eval[expression, globals=None, locals=None]
8. Bạn có thể làm như vậy bằng cách chuyển các tham số toàn cầu và địa phương tùy chọn [từ điển] cho hàm eval[expression, globals=None, locals=None]
8.
from math import *
print[eval['dir[]', {}]]
# The code will raise an exception
print[eval['sqrt[25]', {}]]
Đầu ra
eval[expression, globals=None, locals=None]0
Ở đây, hàm
eval[expression, globals=None, locals=None]8 đánh giá biểu thức
x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
Cảnh báo khi sử dụng eval []
eval[expression, globals=None, locals=None]1
Đầu ra
eval[expression, globals=None, locals=None]2
Ở đây, hàm
eval[expression, globals=None, locals=None]8 đánh giá biểu thức
x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
eval[expression, globals=None, locals=None]3
Đầu ra
eval[expression, globals=None, locals=None]4
Ở đây, hàm
eval[expression, globals=None, locals=None]8 đánh giá biểu thức
x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
Cảnh báo khi sử dụng eval []
eval[expression, globals=None, locals=None]5
Hãy xem xét một tình huống mà bạn đang sử dụng hệ thống Unix [MacOS, Linux, v.v.] và bạn đã nhập mô -đun x = 1
print[eval['x + 1']]
5. Mô -đun OS cung cấp một cách di động để sử dụng các chức năng hệ điều hành như đọc hoặc ghi vào tệp.
x = 1
print[eval['x + 1']]
Nếu bạn cho phép người dùng nhập giá trị bằng
x = 1
print[eval['x + 1']]
6, người dùng có thể ban hành các lệnh thay đổi tệp hoặc thậm chí xóa tất cả các tệp bằng lệnh: x = 1
print[eval['x + 1']]
7.eval[expression, globals=None, locals=None]6
Đầu ra
eval[expression, globals=None, locals=None]7
Ở đây, hàm
eval[expression, globals=None, locals=None]8 đánh giá biểu thức
x = 1
print[eval['x + 1']]
3 và x = 1
print[eval['x + 1']]
4 được sử dụng để hiển thị giá trị này.Ví dụ 2: Ví dụ thực tế để chứng minh việc sử dụng eval []
Cảnh báo khi sử dụng eval [] Sometimes,
eval[expression, globals=None, locals=None]8 is not secure even with limited names. When an object and its methods are made accessible, almost anything can be done. The only secure way is by validating the user input.