Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: Đánh giá các biểu thức một cách linh hoạt với Python Eval () This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Evaluate Expressions Dynamically With Python eval()
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 cho phép bạn đánh giá các biểu thức Python tùy ý từ đầu vào dựa trên mã dựa trên chuỗi hoặc được biên dịch. Hàm này có thể tiện dụng khi bạn đang cố gắng đánh giá động các biểu thức python từ bất kỳ đầu vào nào đến dưới dạng chuỗi hoặc đối tượng mã được biên dịch.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 allows you to evaluate arbitrary Python
expressions from a string-based or compiled-code-based input. This function can be handy when you’re trying to dynamically evaluate Python expressions from any input that comes as a string or a compiled code object.
Mặc dù Python sườn
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 là một công cụ cực kỳ hữu ích, nhưng chức năng này có một số ý nghĩa bảo mật quan trọng mà bạn nên xem xét trước khi sử dụng nó. Trong hướng dẫn này, bạn sẽ tìm hiểu cách
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 hoạt động và cách sử dụng nó một cách an toàn và hiệu quả trong các chương trình Python của bạn.
Trong hướng dẫn này, bạn sẽ học:
Cách thức hoạt động của Python
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 works
Cách sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để đánh giá động đầu vào dựa trên chuỗi hoặc dựa trên mã tùy ýdynamically evaluate arbitrary string-based or compiled-code-based input
Làm thế nào
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 có thể làm cho mã của bạn không an toàn và cách giảm thiểu các rủi ro bảo mật liên quansecurity risks
Ngoài ra, bạn sẽ học cách sử dụng Python từ
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để mã hóa một ứng dụng đánh giá tương tác các biểu thức toán học. Với ví dụ này, bạn sẽ áp dụng mọi thứ mà bạn đã học được về
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 cho một vấn đề trong thế giới thực. Nếu bạn muốn lấy mã cho ứng dụng này, thì bạn có thể nhấp vào hộp bên dưới:
Hiểu Python từ >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6
Bạn có thể sử dụng Python
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 tích hợp để đánh giá động các biểu thức từ đầu vào dựa trên mã dựa trên chuỗi hoặc được biên dịch. Nếu bạn chuyển trong một chuỗi đến
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6, thì hàm phân tích lại, biên dịch nó thành mã byte và đánh giá nó như một biểu thức python. Nhưng nếu bạn gọi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 với một đối tượng mã được biên dịch, thì hàm chỉ thực hiện bước đánh giá, khá thuận tiện nếu bạn gọi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 nhiều lần với cùng một đầu vào.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 to dynamically evaluate expressions from a string-based or compiled-code-based input. If you pass in a string to
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6, then the
function parses it, compiles it to bytecode, and evaluates it as a Python expression. But if you call
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 with a compiled code object, then the function performs just the evaluation step, which is quite convenient if you call
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 several times with the same input.
Chữ ký của Python từ
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 với một chuỗi làm đối số, hàm trả về giá trị xuất phát từ việc đánh giá chuỗi đầu vào. Theo mặc định,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 có quyền truy cập vào các tên toàn cầu như
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 nhấn mạnh rằng hàm chỉ hoạt động với các biểu thức chứ không phải với các câu lệnh ghép. Tài liệu Python xác định biểu thức như sau:expression as follows:
biểu hiện
Một phần của cú pháp có thể được đánh giá theo một số giá trị. Nói cách khác, một biểu thức là sự tích lũy của các yếu tố biểu thức như nghĩa đen, tên, truy cập thuộc tính, toán tử hoặc các cuộc gọi chức năng mà tất cả trả về một giá trị. Trái ngược với nhiều ngôn ngữ khác, không phải tất cả các cấu trúc ngôn ngữ đều là biểu thức. Cũng có những câu không thể được sử dụng làm biểu thức, chẳng hạn như
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
8. Bài tập cũng là câu lệnh, không biểu thức. (Nguồn)
Mặt khác, một câu lệnh Python có định nghĩa sau:statement has the
following definition:
bản tường trình
Một tuyên bố là một phần của bộ (một khối mã của mã). Một câu lệnh là một biểu thức hoặc một trong một số cấu trúc với từ khóa, chẳng hạn như
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
9,
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
8 hoặc
>>> eval("x + y",{"x":x,"y":y})300
1. (Nguồn)
Nếu bạn cố gắng chuyển một câu lệnh ghép cho
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6, thì bạn sẽ nhận được
>>> eval("x + y",{"x":x,"y":y})300
3. Hãy xem ví dụ sau trong đó bạn cố gắng thực thi câu lệnh
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
9 bằng cách sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 với một chuỗi làm đối số, hàm trả về giá trị xuất phát từ việc đánh giá chuỗi đầu vào. Theo mặc định,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 có quyền truy cập vào các tên toàn cầu như
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 chạy các bước sau:
>>>
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
Khi bạn gọi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 với một chuỗi làm đối số, hàm trả về giá trị xuất phát từ việc đánh giá chuỗi đầu vào. Theo mặc định,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 có quyền truy cập vào các tên toàn cầu như
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong ví dụ trên.
Bạn cũng sẽ nhận được
>>> eval("x + y",{"x":x,"y":y})300
3 bất cứ khi nào trình phân tích cú pháp không hiểu biểu thức đầu vào. Hãy xem ví dụ sau trong đó bạn cố gắng đánh giá một biểu thức vi phạm cú pháp Python:
>>>
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
Bạn có thể chuyển một biểu thức đến
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 vi phạm cú pháp Python. Trong ví dụ trên, bạn cố gắng đánh giá một biểu thức không đầy đủ (
8 giữ mã nguồn mà bạn muốn biên dịch. Đối số này chấp nhận các chuỗi bình thường, chuỗi byte và các đối tượng AST. holds the source
code that you want to compile. This argument accepts normal strings, byte strings, and AST objects.
00.parsing and compiling steps. Unneeded repetitions can lead to high CPU times and excessive memory consumption if you’re evaluating complex expressions.
>>> eval("2 ** 8")
256
>>> eval("1024 + 1024")
2048
>>> eval("sum([8, 16, 32])")
56
>>> x = 100
>>> eval("x * 2")
200
01 Chỉ định loại mã được biên dịch nào bạn muốn nhận. Nếu bạn muốn xử lý mã được biên dịch với >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6, thì đối số này sẽ được đặt thành >>> eval("2 ** 8")
256
>>> eval("1024 + 1024")
2048
>>> eval("sum([8, 16, 32])")
56
>>> x = 100
>>> eval("x * 2")
200
03.
5 để biên dịch các biểu thức mà bạn sẽ chuyển sang
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6, thì
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 sẽ trải qua các bước sau:
Đánh giá mã được biên dịch
>>>
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
Trả về kết quả đánh giá
Nếu bạn gọi Python sườn
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 bằng cách sử dụng đầu vào dựa trên mã được biên dịch, thì hàm thực hiện bước đánh giá và ngay lập tức trả về kết quả. Điều này có thể tiện dụng khi bạn cần đánh giá cùng một biểu thức nhiều lần. Trong trường hợp này, nó tốt nhất để đưa ra biểu thức và sử dụng lại mã byte kết quả trên các cuộc gọi tiếp theo đến
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.
>>>
>>> eval("x + y",{"x":x,"y":y})300
Nếu bạn biên dịch biểu thức đầu vào trước đó, thì các cuộc gọi liên tiếp đến
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 sẽ chạy nhanh hơn vì bạn đã thắng được lặp lại các bước phân tích cú pháp và biên dịch. Sự lặp lại không cần thiết có thể dẫn đến thời gian CPU cao và mức tiêu thụ bộ nhớ quá mức nếu bạn đánh giá các biểu thức phức tạp.
>>> eval("x + y + z",{"x":x,"y":y,"z":300})600>>> zTraceback (most recent call last):
File "<stdin>", line 1, in <module>NameError: name 'z' is not defined
Đối số thứ hai cho
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
Tên toàn cầu là tất cả những tên có sẵn trong phạm vi hoặc không gian tên toàn cầu hiện tại của bạn. Bạn có thể truy cập chúng từ bất cứ nơi nào trong mã của bạn.
65 là không gian tên toàn cầu của nó. Vì vậy, trong ví dụ trên, bạn có thể tự do truy cập
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
65 là không gian tên toàn cầu của nó. Vì vậy, trong ví dụ trên, bạn có thể tự do truy cập
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
Tên địa phương là những tên (biến, hàm, lớp, v.v.) mà bạn xác định bên trong một hàm đã cho. Tên địa phương chỉ có thể nhìn thấy từ bên trong chức năng kèm theo. Bạn xác định các loại tên này khi bạn viết một hàm.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 sẽ coi những tên đó là tên địa phương:
Từ điển thứ hai trong cuộc gọi đầu tiên đến
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 giữ biến
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2. Biến này được giải thích bởi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 là một biến cục bộ. Nói cách khác, nó được xem là một biến được định nghĩa trong phần thân của
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.
Bạn có thể sử dụng >>> x = 100 # A global variable
>>> eval("x + 100", {"x": x})
200
>>> y = 200 # Another global variable
>>> eval("x + y", {"x": x})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'y' is not defined
2 trong >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
0 và >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6 sẽ có quyền truy cập vào nó. Ngược lại, nếu bạn cố gắng sử dụng >>> eval("2 ** 8")
256
>>> eval("1024 + 1024")
2048
>>> eval("sum([8, 16, 32])")
56
>>> x = 100
>>> eval("x * 2")
200
27, thì bạn sẽ nhận được >>> eval("2 ** 8")
256
>>> eval("1024 + 1024")
2048
>>> eval("sum([8, 16, 32])")
56
>>> x = 100
>>> eval("x * 2")
200
26 vì >>> eval("2 ** 8")
256
>>> eval("1024 + 1024")
2048
>>> eval("sum([8, 16, 32])")
56
>>> x = 100
>>> eval("x * 2")
200
27 được định nghĩa trong không gian tên >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
2 hoặc không gian tên >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
3.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6:
Nếu bạn cố gắng sử dụng các đối số từ khóa khi gọi >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6, thì bạn sẽ nhận được một >>> x = 100
>>> eval("if x: print(x)")
File "<string>", line 1
if x: print(x)
^
SyntaxError: invalid syntax
01 giải thích rằng >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6 không có đối số từ khóa. Vì vậy, bạn cần cung cấp từ điển >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
2 trước khi bạn có thể cung cấp từ điển >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
3.
26) when the interpreter evaluates them. They’re commonly used in
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
9 statements to check if some condition is true or false. Since Boolean expressions aren’t compound statements, you can use
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
Trong mọi trường hợp, hàm trả về giá trị sự thật của biểu thức mà bạn đang đánh giá.
Bây giờ, bạn có thể nghĩ, tại sao tôi nên sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 thay vì sử dụng biểu thức boolean trực tiếp? Chà, giả sử bạn cần thực hiện một tuyên bố có điều kiện, nhưng bạn muốn thay đổi điều kiện khi đang bay:
48 theo kết quả của đánh giá. Bạn chỉ sử dụng một vài điều kiện khác nhau trong ví dụ trên, nhưng bạn có thể sử dụng bất kỳ số lượng nào khác với điều kiện bạn gắn bó với tên
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để thực thi một vài lệnh hệ thống. Như bạn có thể tưởng tượng, bạn có thể làm rất nhiều điều hữu ích với tính năng này. Tuy nhiên,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 cũng có thể khiến bạn gặp rủi ro bảo mật nghiêm trọng, như cho phép người dùng độc hại chạy các lệnh hệ thống hoặc bất kỳ đoạn mã tùy ý nào trong máy của bạn.
Trong phần tiếp theo, bạn sẽ xem xét các cách để giải quyết một số rủi ro bảo mật liên quan đến eval ().
Giảm thiểu các vấn đề bảo mật của >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6
Mặc dù nó có một số lượng sử dụng gần như không giới hạn, Python xông
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 cũng có ý nghĩa bảo mật quan trọng.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 được coi là không an toàn vì nó cho phép bạn (hoặc người dùng của bạn) thực hiện động mã Python tùy ý.security
implications.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 is considered insecure because it allows you (or your users) to dynamically execute arbitrary Python code.
Đây được coi là thực hành lập trình xấu vì mã mà bạn đang đọc (hoặc viết) không phải là mã mà bạn sẽ thực thi. Nếu bạn có kế hoạch sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để đánh giá đầu vào từ người dùng hoặc bất kỳ nguồn bên ngoài nào khác, thì bạn đã thắng được biết chắc chắn mã nào sẽ được thực thi. Đó là một rủi ro bảo mật nghiêm trọng nếu ứng dụng của bạn chạy sai.
Vì lý do này, thực tiễn lập trình tốt thường đề nghị sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6. Nhưng nếu bạn chọn sử dụng chức năng, thì quy tắc của ngón tay cái là không bao giờ sử dụng nó với đầu vào không đáng tin cậy. Phần khó khăn của quy tắc này là tìm ra loại đầu vào nào bạn có thể tin tưởng.untrusted input. The tricky part of this rule is figuring out which kinds of input you can trust.
Như một ví dụ về cách sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 vô trách nhiệm có thể làm cho mã của bạn không an toàn, giả sử bạn muốn xây dựng một dịch vụ trực tuyến để đánh giá các biểu thức python tùy ý. Người dùng của bạn sẽ giới thiệu các biểu thức và sau đó nhấp vào nút
69. Ứng dụng sẽ nhận được đầu vào của người dùng và chuyển nó sang
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để đánh giá.
Ứng dụng này sẽ chạy trên máy chủ cá nhân của bạn. Có, cùng một máy chủ nơi bạn có tất cả các tệp có giá trị đó. Nếu bạn đang chạy một hộp Linux và quy trình ứng dụng có quyền đúng, thì người dùng độc hại có thể giới thiệu một chuỗi nguy hiểm như sau:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 đã giành được tên
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong không gian tên toàn cầu hoặc không gian tên cục bộ của nó khi đánh giá chuỗi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 đã giành được tên
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong không gian tên toàn cầu hoặc không gian tên cục bộ của nó khi đánh giá chuỗi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 đã giành được tên
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong không gian tên toàn cầu hoặc không gian tên cục bộ của nó khi đánh giá chuỗi
Thật không may, việc hạn chế các đối số >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
2 và >>> # Arithmetic operations
>>> code = compile("5 + 4", "<string>", "eval")
>>> eval(code)
9
>>> code = compile("(5 + 7) * 2", "<string>", "eval")
>>> eval(code)
24
>>> import math
>>> # Volume of a sphere
>>> code = compile("4 / 3 * math.pi * math.pow(25, 3)", "<string>", "eval")
>>> eval(code)
65449.84694978735
3 như thế này không loại bỏ tất cả các rủi ro bảo mật liên quan đến việc sử dụng Python tựa >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6, bởi vì bạn vẫn có thể truy cập tất cả các tên tích hợp của Python.
Hạn chế sử dụng tên tích hợptype literal like
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
21,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 đã giành được tên
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong không gian tên toàn cầu hoặc không gian tên cục bộ của nó khi đánh giá chuỗi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 đã giành được tên
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong không gian tên toàn cầu hoặc không gian tên cục bộ của nó khi đánh giá chuỗi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 đã giành được tên
>>> x=100# A global variable>>> eval("x + 100",{"x":x})200>>> y=200# Another global variable>>> eval("x + y",{"x":x})Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>NameError: name 'y' is not defined
2 trong không gian tên toàn cầu hoặc không gian tên cục bộ của nó khi đánh giá chuỗi
94 để có quyền truy cập vào thư viện tiêu chuẩn và bất kỳ mô-đun bên thứ ba nào mà bạn đã cài đặt trên hệ thống của mình. a dictionary containing the names that you want to use with
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.
Các ví dụ sau đây cho thấy rằng bạn có thể sử dụng bất kỳ chức năng tích hợp nào và bất kỳ mô-đun tiêu chuẩn nào như
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
46 để đánh giá các hoạt động số học hoặc nếu bạn sử dụng các biểu thức bao gồm tên được phép, thì bạn sẽ nhận được kết quả dự kiến. Nếu không, bạn sẽ nhận được một
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
64 chỉ hoạt động với các loại chữ tiêu chuẩn. Nó không hỗ trợ việc sử dụng các nhà khai thác hoặc tên. Nếu bạn cố gắng cung cấp một biểu thức cho
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
64, thì bạn sẽ nhận được
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
67. Chức năng này cũng có thể giúp bạn giảm thiểu các rủi ro bảo mật liên quan đến việc sử dụng Python từ
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.
Sử dụng Python từ >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6 với >>> eval("pi = 3.1416")
File "<string>", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
70
Trong Python 3.x,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 tích hợp đọc đầu vào của người dùng ở dòng lệnh, chuyển đổi nó thành một chuỗi, dải dòng mới và trả lại kết quả cho người gọi. Vì kết quả của
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 là một chuỗi, bạn có thể cung cấp nó thành
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 và đánh giá nó như một biểu thức Python:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 reads the user input at the command line, converts it to a string, strips the trailing newline, and returns the result to the caller. Since the result of
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 is a string, you can feed it to
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 khoảng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 để tự động đánh giá đầu vào của người dùng. Đây là một trường hợp sử dụng phổ biến cho
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 vì nó mô phỏng hành vi của
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 trong Python 2.x, trong đó
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 đánh giá đầu vào của người dùng là biểu thức python và trả về kết quả.
Hành vi này của
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
70 trong Python 2.x đã được thay đổi trong Python 3.x vì ý nghĩa bảo mật của nó.
Xây dựng một người đánh giá biểu thức toán học
Cho đến nay, bạn đã học được cách thức hoạt động của Python từ ____36 và cách sử dụng nó trong thực tế. Bạn cũng đã học được rằng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 có ý nghĩa bảo mật quan trọng và nó thường được coi là thực hành tốt để tránh việc sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 trong mã của bạn. Tuy nhiên, có một số tình huống trong đó Python xông
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 có thể giúp bạn tiết kiệm rất nhiều thời gian và công sức.
Trong phần này, bạn sẽ mã hóa một ứng dụng để đánh giá các biểu thức toán học một cách nhanh chóng. Nếu bạn muốn giải quyết vấn đề này mà không cần sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6, thì bạn sẽ cần phải trải qua các bước sau:
Phân tích biểu thức đầu vào. the input expression.
Thay đổi các thành phần biểu thức thành các đối tượng Python (số, toán tử, chức năng, v.v.). the expression’s components into Python objects (numbers, operators, functions, and so on).
Kết hợp mọi thứ thành một biểu hiện. everything into an expression.
Xác nhận rằng biểu thức là hợp lệ trong Python.
that the expression is valid in Python.
Đánh giá biểu thức cuối cùng và trả về kết quả. the final expression and return the result.
Đó sẽ là rất nhiều công việc xem xét nhiều biểu thức có thể mà Python có thể xử lý và đánh giá. May mắn thay, bạn có thể sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để giải quyết vấn đề này và bạn đã học được một số kỹ thuật để giảm các rủi ro bảo mật liên quan.
Bạn có thể nhận mã nguồn cho ứng dụng mà bạn sẽ xây dựng trong phần này bằng cách nhấp vào hộp bên dưới:
Đầu tiên, kích hoạt trình chỉnh sửa mã yêu thích của bạn. Tạo tập lệnh Python mới có tên
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
86, sau đó thêm mã sau:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
0
Trong đoạn mã này, trước tiên bạn nhập mô -đun Python từ ____256. Mô -đun này sẽ cho phép bạn thực hiện các thao tác toán học bằng các hàm và hằng số được xác định trước. Hằng số
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
88 chứa một từ điển chứa các tên không đặc biệt trong
56. Bằng cách này, bạn sẽ có thể sử dụng chúng với
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.
Bạn cũng xác định thêm ba hằng số chuỗi. Bạn sẽ sử dụng chúng làm giao diện người dùng cho tập lệnh của bạn và bạn sẽ in chúng ra màn hình khi cần thiết.
Bây giờ bạn đã sẵn sàng để mã hóa chức năng cốt lõi của ứng dụng của bạn. Trong trường hợp này, bạn muốn mã hóa một hàm nhận biểu thức toán học làm đầu vào và trả về kết quả của chúng. Để làm điều này, bạn viết một hàm gọi là
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
91:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
1
Ở đây, cách thức hoạt động của chức năng:
Trong dòng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
92, bạn xác định
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
0 và xác nhận rằng chúng có thể được sử dụng trong biểu thức cuối cùng. Nếu người dùng cung cấp một tên không có trong danh sách các tên được phép, thì bạn sẽ tăng
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
10, cho phép bạn giảm thiểu các rủi ro bảo mật liên quan đến việc sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.line
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
10, allows you to minimize the security risks associated with the use of
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6.
Trình đánh giá biểu thức toán học của bạn sẽ được hoàn thành khi bạn viết mã máy khách của nó trong
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
12. Trong chức năng này, bạn sẽ xác định vòng lặp chính của chương trình và đóng chu kỳ đọc và đánh giá các biểu thức mà người dùng của bạn nhập vào dòng lệnh.
Đối với ví dụ này, ứng dụng sẽ:
In tin nhắn chào mừng cho người dùng a welcome message to the user
Hiển thị lời nhắc đã sẵn sàng để đọc đầu vào của người dùng a prompt ready to read the user’s input
Cung cấp các tùy chọn để nhận hướng dẫn sử dụng và chấm dứt ứng dụng options to
get usage instructions and to terminate the application
Đọc biểu thức toán học của người dùng the user’s math expression
Đánh giá biểu thức toán học của người dùng the user’s math expression
In kết quả đánh giá vào màn hình the result of the evaluation to the screen
Kiểm tra triển khai sau của
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
12:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
2
Bên trong
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
12, trước tiên bạn in tin nhắn
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
15. Sau đó, bạn đọc đầu vào của người dùng trong một câu lệnh
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
16 để bắt
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
17 và
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
18. Nếu một trong hai trường hợp ngoại lệ này xảy ra, thì bạn sẽ chấm dứt ứng dụng.
Nếu người dùng nhập tùy chọn
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
19, thì ứng dụng hiển thị hướng dẫn
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
20 của bạn. Tương tự như vậy, nếu người dùng nhập
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
21 hoặc
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
22, thì ứng dụng sẽ chấm dứt.
Cuối cùng, bạn sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
91 để đánh giá biểu thức toán học của người dùng và sau đó bạn in kết quả lên màn hình. Điều quan trọng cần lưu ý là một cuộc gọi đến
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
91 có thể nâng cao các ngoại lệ sau:
>>> eval("x + y",{"x":x,"y":y})300
3: Điều này xảy ra khi người dùng nhập biểu thức không theo cú pháp Python.: This happens when the user enters an expression that doesn’t follow Python syntax.
26: Điều này xảy ra khi người dùng cố gắng sử dụng tên (hàm, lớp hoặc thuộc tính) được phép.: This happens when the user tries to use a name (function, class, or attribute) that isn’t allowed.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
67: Điều này xảy ra khi người dùng cố gắng sử dụng một giá trị được phép làm đầu vào cho một hàm nhất định trong
>>> # Incomplete expression>>> eval("5 + 7 *")
File "<string>", line 15+7*^SyntaxError: unexpected EOF while parsing
12, bạn bắt được tất cả các ngoại lệ này và in tin nhắn cho người dùng cho phù hợp. Điều này sẽ cho phép người dùng xem xét biểu thức, khắc phục sự cố và chạy lại chương trình.
Đó là nó! Bạn đã xây dựng một trình đánh giá biểu thức toán học trong khoảng bảy mươi dòng mã bằng cách sử dụng Python,
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6. Để chạy ứng dụng, hãy mở dòng lệnh hệ thống của bạn và nhập lệnh sau:
Lệnh này sẽ khởi chạy giao diện dòng lệnh (CLI) của Trình đánh giá biểu thức Math (CLI). Bạn sẽ thấy một cái gì đó như thế này trên màn hình của bạn:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
3
Khi bạn ở đó, bạn có thể nhập và đánh giá bất kỳ biểu thức toán học nào. Ví dụ: nhập các biểu thức sau:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
4
Nếu bạn nhập biểu thức toán học hợp lệ, thì ứng dụng sẽ đánh giá nó và in kết quả vào màn hình của bạn. Nếu có bất kỳ vấn đề nào với biểu thức của bạn, thì ứng dụng sẽ cho bạn biết:
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
5
Trong ví dụ đầu tiên, bạn bỏ lỡ dấu ngoặc đơn, vì vậy bạn nhận được một thông báo cho bạn biết rằng cú pháp không chính xác. Sau đó, bạn gọi
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
01, được phép và bạn nhận được thông báo lỗi giải thích. Cuối cùng, bạn gọi hàm
56 có giá trị đầu vào không hợp lệ và ứng dụng tạo thông báo xác định vấn đề trong đầu vào của bạn.
Ở đó, bạn có nó là người đánh giá biểu thức toán học của bạn đã sẵn sàng! Hãy thoải mái thêm một số tính năng bổ sung. Một vài ý tưởng để bạn bắt đầu bao gồm mở rộng từ điển của các tên được phép và thêm các thông điệp cảnh báo phức tạp hơn. Cho nó một phát bắn và cho chúng tôi biết trong các ý kiến về nó diễn ra như thế nào.
Sự kết luận
Bạn có thể sử dụng Python từ
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để đánh giá các biểu thức Python từ đầu vào dựa trên chuỗi hoặc dựa trên mã. Chức năng tích hợp này có thể hữu ích khi bạn đang cố gắng đánh giá các biểu thức python một cách nhanh chóng và bạn muốn tránh những rắc rối trong việc tạo ra người đánh giá biểu thức của riêng bạn từ đầu.
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 to evaluate Python expressions from a string-based or code-based input. This built-in function can be useful when you’re trying to evaluate Python expressions on the fly and you want to avoid the hassle of creating your own expressions evaluator from scratch.
Trong hướng dẫn này, bạn đã học cách
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 hoạt động và cách sử dụng nó một cách an toàn và hiệu quả để đánh giá các biểu thức Python tùy ý.
Bây giờ bạn có thể:
Sử dụng Python từ
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để đánh giá động các biểu thức Python cơ bảnevaluate basic Python expressions
Chạy các câu lệnh phức tạp hơn như các cuộc gọi chức năng, tạo đối tượng và truy cập thuộc tính bằng cách sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6function calls, object creation, and attribute access using
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6
Giảm thiểu các rủi ro bảo mật liên quan đến việc sử dụng Python từ
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6security risks associated with the use of Python’s
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6
Ngoài ra, bạn đã mã hóa một ứng dụng sử dụng
>>> eval("pi = 3.1416")
File "<string>", line 1pi=3.1416^SyntaxError: invalid syntax
6 để đánh giá tương tác các biểu thức toán học bằng giao diện dòng lệnh. Bạn có thể tải xuống mã ứng dụng bằng cách nhấp vào liên kết bên dưới:
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: Đánh giá các biểu thức một cách linh hoạt với Python Eval () This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Evaluate
Expressions Dynamically With Python eval()
Làm thế nào để bạn đánh giá một chuỗi trong Python?
Bạn có thể sử dụng Python Eval () tích hợp để đánh giá động các biểu thức từ đầu vào dựa trên mã hoặc dựa trên mã ...
Biểu thức phân tích cú pháp ..
Biên dịch nó với mã byte ..
Đánh giá nó như một biểu thức Python ..
Trả về kết quả đánh giá ..
Eval có chấp nhận chuỗi không?
Đối số của hàm eval () là một chuỗi. Nó sẽ đánh giá chuỗi nguồn là một cơ thể tập lệnh, có nghĩa là cả hai câu và biểu thức đều được cho phép. Nó trả về giá trị hoàn thành của mã. Đối với các biểu thức, đó là giá trị mà biểu thức đánh giá.. It will evaluate the source string as a script body, which means both statements and expressions are allowed. It returns the completion value of the code. For expressions, it's the value the expression evaluates to.
Hàm eval () là gì?
Hàm Eval đánh giá biểu thức chuỗi và trả về giá trị của nó.Ví dụ: Eval ("1 + 1") Trả về 2. Nếu bạn chuyển đến hàm Eval, một chuỗi chứa tên của hàm, hàm Eval trả về giá trị trả về của hàm.evaluates the string expression and returns its value. For example, Eval("1 + 1") returns 2. If you pass to the Eval function a string that contains the name of a function, the Eval function returns the return value of the function.
Là eval () là một từ khóa trong Python?
Eval () trong Python là gì và cú pháp của nó là gì?Trả lời: Eval là một hàm tích hợp được sử dụng trong Python, hàm eval phân tích đối số biểu thức và đánh giá nó như một biểu thức python.Nói một cách đơn giản, hàm Eval đánh giá chuỗi chuỗi giống như biểu thức python và trả về kết quả dưới dạng số nguyên.eval is a built-in- function used in python, eval function parses the expression argument and evaluates it as a python expression. In simple words, the eval function evaluates the “String” like a python expression and returns the result as an integer.