>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python cho phép bạn đánh giá các biểu thức Python tùy ý từ đầu vào hoặc dựa trên chuỗi. Hàm này có thể hữu ích 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 có dạng chuỗi hoặc đối tượng mã được biên dịchMặc dù
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python 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 cân nhắc trước khi sử dụng nó. Trong hướng dẫn này, bạn sẽ tìm hiểu cách thức hoạt động của >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 cũng như 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ạnTrong hướng dẫn này, bạn sẽ học
- Cách thức hoạt động của
7 của Python>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
- Cách sử dụng
7 để đánh giá động đầu vào dựa trên chuỗi hoặc dựa trên mã được biên dịch tùy ý>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
- Cách
7 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 quan>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
Ngoài ra, bạn sẽ học cách sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python để viết mã ứng dụng đánh giá các biểu thức toán học một cách tương tác. Với ví dụ này, bạn sẽ áp dụng mọi thứ bạn đã học về >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 vào 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ướiTải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu về eval[] của Python trong hướng dẫn này
Hiểu về >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
Bạn có thể sử dụng Python tích hợp để đánh giá động các biểu thức từ đầu vào dựa trên chuỗi hoặc dựa trên mã được biên dịch. Nếu bạn chuyển một chuỗi tới
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, thì hàm sẽ phân tích cú pháp chuỗi đó, biên dịch chuỗi đó thành và đánh giá chuỗi đó dưới dạng một biểu thức Python. Nhưng nếu bạn gọi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 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á, điều này khá thuận tiện nếu bạn gọi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 nhiều lần với cùng một đầu vàoChữ ký của Python's
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 được định nghĩa như saueval[expression[, globals[, locals]]]
Hàm nhận đối số đầu tiên, được gọi là
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1, chứa biểu thức mà bạn cần đánh giá. >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 cũng có hai đối số tùy chọn
3>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
4>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
Trong ba phần tiếp theo, bạn sẽ tìm hiểu những đối số này là gì và cách
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sử dụng chúng để đánh giá các biểu thức Python một cách nhanh chóngGhi chú. Bạn cũng có thể sử dụng
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
6 để tự động thực thi mã Python. Sự khác biệt chính giữa >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
6 là >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 chỉ có thể thực thi hoặc đánh giá các biểu thức, trong khi >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
6 có thể thực thi bất kỳ đoạn mã Python nàoLoại bỏ các quảng cáoĐối số đầu tiên. >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
Đối số đầu tiên của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 được gọi là >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1. Đó là một đối số bắt buộc chứa đầu vào dựa trên chuỗi hoặc dựa trên mã được biên dịch cho hàm. Khi bạn gọi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, nội dung của >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1 được đánh giá là một biểu thức Python. Kiểm tra các ví dụ sau sử dụng đầu vào dựa trên chuỗi>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
Khi bạn gọi
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 với một chuỗi làm đối số, hàm sẽ trả về giá trị là kết quả của việc đánh giá chuỗi đầu vào. Theo mặc định, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 có quyền truy cập vào các tên chung 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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
8 trong ví dụ trênĐể đánh giá một
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1 dựa trên chuỗi, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python thực hiện các bước sau- Phân tích cú pháp
1>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
- Biên dịch nó thành mã byte
- Đánh giá nó như một biểu thức Python
- Trả về kết quả đánh giá
Tên
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1 cho đối số đầu tiên của >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 nêu bật 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 định nghĩa biểu thức như sausự diễn đạt
Một đoạn cú pháp có thể được ước tính cho 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 thành phần biểu thức như chữ, tên, truy cập thuộc tính, toán tử hoặc lệnh gọi hàm, tất cả đều trả về một giá trị. Ngược lại 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ể dùng làm biểu thức, chẳng hạn như
4. Bài tập cũng là câu lệnh, không phải biểu thức. []>>> eval["x + y", {"x": x, "y": y}] 300
Mặt khác, một câu lệnh Python có định nghĩa sau
tuyên bố
Một câu lệnh là một phần của bộ [một “khối” mã]. Câu lệnh là một biểu thức hoặc một trong nhiều cấu trúc có từ khóa, chẳng hạn như
5,>>> eval["x + y", {"x": x, "y": y}] 300
4 hoặc>>> eval["x + y", {"x": x, "y": y}] 300
7. []>>> eval["x + y", {"x": x, "y": y}] 300
Nếu bạn cố gắng chuyển một câu lệnh ghép cho
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, thì bạn sẽ nhận được một >>> eval["x + y", {"x": x, "y": y}]
300
9. Hãy xem ví dụ sau trong đó bạn cố gắng thực hiện câu lệnh >>> eval["x + y", {"x": x, "y": y}]
300
5 bằng cách sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
Nếu bạn cố gắng đánh giá một câu lệnh ghép bằng cách sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python, thì bạn sẽ nhận được một >>> eval["x + y", {"x": x, "y": y}]
300
9 như trong truy nguyên ở trên. Đó là bởi vì >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 chỉ chấp nhận biểu thức. Bất kỳ tuyên bố nào khác, chẳng hạn như >>> eval["x + y", {"x": x, "y": y}]
300
5, >>> eval["x + y", {"x": x, "y": y}]
300
7, >>> eval["x + y", {"x": x, "y": y}]
300
4, >>> eval["x + y + z", {"x": x, "y": y, "z": 300}]
600
>>> z
Traceback [most recent call last]:
File "", line 1, in
NameError: name 'z' is not defined
8, >>> eval["x + y + z", {"x": x, "y": y, "z": 300}]
600
>>> z
Traceback [most recent call last]:
File "", line 1, in
NameError: name 'z' is not defined
9 hoặc >>> eval["sum[[2, 2, 2]]", {}]
6
>>> eval["min[[1, 2, 3]]", {}]
1
>>> eval["pow[10, 2]", {}]
100
0, sẽ gây ra lỗiGhi chú. Vòng lặp
>>> eval["x + y", {"x": x, "y": y}]
300
7 là một câu lệnh ghép, nhưng từ khóa >>> eval["x + y", {"x": x, "y": y}]
300
7 cũng có thể được sử dụng trong phần đọc hiểu, được coi là biểu thức. Bạn có thể sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đánh giá mức độ hiểu mặc dù họ sử dụng từ khóa >>> eval["x + y", {"x": x, "y": y}]
300
7Hoạt động chuyển nhượng không được phép với
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 hoặc>>>
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
Nếu bạn cố gắng chuyển một thao tác gán làm đối số cho
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python, thì bạn sẽ nhận được một >>> eval["x + y", {"x": x, "y": y}]
300
9. Các thao tác gán là câu lệnh chứ không phải biểu thức và câu lệnh không được phép với >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Bạn cũng sẽ nhận được một
>>> eval["x + y", {"x": x, "y": y}]
300
9 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 mà 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 "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
Bạn không thể chuyển một biểu thức tới
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 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 đủ [_______29_______01] và nhận được ____38_______9 vì trình phân tích cú pháp không hiểu cú pháp của biểu thứcBạn cũng có thể chuyển đến
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python. Để biên dịch mã mà bạn sẽ chuyển đến >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, bạn có thể sử dụng. Đây là một hàm tích hợp có thể biên dịch một chuỗi đầu vào thành một hoặc một để bạn có thể đánh giá nó bằng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Chi tiết về cách sử dụng
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
05 nằm ngoài phạm vi của hướng dẫn này, nhưng đây là một cái nhìn nhanh về ba đối số bắt buộc đầu tiên của nó
08 giữ mã nguồn mà bạn muốn biên dịch. Đối số này chấp nhận các đối tượng chuỗi, và AST thông thường>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
09 cung cấp tệp mà mã được đọc từ đó. Nếu bạn định sử dụng đầu vào dựa trên chuỗi, thì giá trị cho đối số này phải là>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
10>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
11 chỉ định loại mã được biên dịch mà bạn muốn nhận. Nếu bạn muốn xử lý mã đã biên dịch với>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
7, thì đối số này phải được đặt thành>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
13>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
Ghi chú. Để biết thêm thông tin về
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
05, hãy xemBạn có thể sử dụng
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
05 để cung cấp các đối tượng mã cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 thay vì các chuỗi bình thường. Kiểm tra các ví dụ sau>>>
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
Nếu bạn sử dụng
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
05 để biên dịch các biểu thức mà bạn sẽ chuyển đến >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, thì >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ thực hiện các bước sau- Đánh giá mã được biên dịch
- Trả về kết quả đánh giá
Nếu bạn gọi hàm
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python bằng cách sử dụng đầu vào dựa trên mã được biên dịch, thì hàm sẽ 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ể hữu ích 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, tốt nhất là biên dịch trước biểu thức và sử dụng lại mã byte kết quả trong các lệnh gọi tiếp theo tới >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Nếu bạn biên dịch biểu thức đầu vào trước, thì các lệnh gọi liên tiếp tới
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ chạy nhanh hơn vì bạn sẽ không phải lặp lại các bước phân tích cú pháp và biên dịch. Các lần 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 đang đánh giá các biểu thức phức tạpLoại bỏ các quảng cáoĐối số thứ hai. >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
Đối số thứ hai của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 được gọi là >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Nó là tùy chọn và chứa một từ điển cung cấp toàn cục cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7. Với >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, bạn có thể cho biết >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 tên chung nào sẽ sử dụng khi đánh giá >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1Tên chung là tất cả những tên có sẵn trong. Bạn có thể truy cập chúng từ bất kỳ đâu trong mã của mình
Tất cả các tên được chuyển đến
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 trong từ điển sẽ có sẵn cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 tại thời điểm thực hiện. Xem ví dụ sau, ví dụ này cho biết cách sử dụng từ điển tùy chỉnh để cung cấp không gian tên chung cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7>>>
>>> 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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
Nếu bạn cung cấp một từ điển tùy chỉnh cho đối số
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 của >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, thì >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ chỉ lấy những tên đó làm tên toàn cục. Bất kỳ tên chung nào được xác định bên ngoài từ điển tùy chỉnh này sẽ không thể truy cập được từ bên trong >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7. Đó là lý do tại sao Python tăng >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
37 khi bạn cố truy cập vào >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
38 trong đoạn mã trên. Từ điển được chuyển đến >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 không bao gồm >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
38Bạn có thể chèn tên vào
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 bằng cách liệt kê chúng trong từ điển của mình, sau đó những tên đó sẽ có sẵn trong quá trình đánh giá. Ví dụ: nếu bạn chèn >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
38 vào >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, thì đánh giá của >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
44 trong ví dụ trên sẽ hoạt động như mong đợi>>>
>>> eval["x + y", {"x": x, "y": y}]
300
Vì bạn thêm
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
38 vào từ điển >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 tùy chỉnh của mình, nên việc đánh giá >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
44 thành công và bạn nhận được giá trị trả về dự kiến là >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
48Bạn cũng có thể cung cấp các tên không tồn tại trong phạm vi toàn cầu hiện tại của mình. Để điều này hoạt động, bạn cần cung cấp một giá trị cụ thể cho mỗi tên.
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ hiểu những tên này là tên chung khi chạy>>>
>>> eval["x + y + z", {"x": x, "y": y, "z": 300}]
600
>>> z
Traceback [most recent call last]:
File "", line 1, in
NameError: name 'z' is not defined
Mặc dù
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
50 không được xác định trong phạm vi toàn cầu hiện tại của bạn, nhưng biến có mặt trong ____14_______3 với giá trị là ____29_______48. Trong trường hợp này, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 có quyền truy cập vào >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
50 như thể đó là một biến toàn cụcCơ chế đằng sau
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 khá linh hoạt. Bạn có thể chuyển bất kỳ biến hiển thị nào [toàn cục, , hoặc ] tới >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Bạn cũng có thể chuyển các cặp khóa-giá trị tùy chỉnh như >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
57 trong ví dụ trên. >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ coi tất cả chúng là biến toàn cụcMột điểm quan trọng liên quan đến
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 là nếu bạn cung cấp một từ điển tùy chỉnh cho từ điển đó không chứa giá trị cho khóa >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
60, thì tham chiếu đến từ điển của sẽ được tự động chèn vào dưới >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
60 trước khi >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1 được phân tích cú pháp. Điều này đảm bảo rằng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ có toàn quyền truy cập vào tất cả các tên dựng sẵn của Python khi đánh giá >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1Các ví dụ sau đây cho thấy rằng ngay cả khi bạn cung cấp một từ điển trống cho
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, lệnh gọi tới >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 vẫn sẽ có quyền truy cập vào các tên tích hợp sẵn của Python>>>
>>> eval["sum[[2, 2, 2]]", {}]
6
>>> eval["min[[1, 2, 3]]", {}]
1
>>> eval["pow[10, 2]", {}]
100
Trong đoạn mã trên, bạn cung cấp một từ điển trống [_______29_______68] cho
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Vì từ điển đó không chứa khóa có tên là >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
60, nên Python sẽ tự động chèn một khóa có tham chiếu đến các tên trong >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
61. Bằng cách này, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 có toàn quyền truy cập vào tất cả các tên dựng sẵn của Python khi nó phân tích cú pháp >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1Nếu bạn gọi
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 mà không chuyển từ điển tùy chỉnh tới >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, thì đối số sẽ mặc định là từ điển được trả về trong môi trường nơi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 được gọi>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
0Khi bạn gọi
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 mà không cung cấp đối số >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, hàm sẽ đánh giá >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1 bằng cách sử dụng từ điển được trả về bởi >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
76 làm không gian tên chung của nó. Vì vậy, trong ví dụ trên, bạn có thể tự do truy cập vào >>> 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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
8 và >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
38 vì chúng là các biến toàn cục được bao gồm trong dữ liệu hiện tại của bạn.Lập luận thứ ba. >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
Python's
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 lấy đối số thứ ba có tên là >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4. Đây là một đối số tùy chọn khác chứa từ điển. Trong trường hợp này, từ điển chứa các biến mà >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sử dụng làm tên địa phương khi đánh giá >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1Tên cục bộ là những tên [biến, hàm, lớp, v.v.] mà bạn định nghĩa bên trong một hàm đã cho. Tên cục bộ chỉ hiển thị 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 viết một hàm
Vì
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 đã được viết, bạn không thể thêm tên địa phương vào mã của nó hoặc. Tuy nhiên, bạn có thể chuyển từ điển tới >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4 và >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ coi những tên đó là tên địa phương>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
1Từ điển thứ hai trong lần gọi đầu tiên đến
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
8. Biến này được hiểu bởi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 như một biến cục bộ. Nói cách khác, nó được xem như một biến được xác định trong phần thân của >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Bạ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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
8 trong >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1 và >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 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
38, thì bạn sẽ nhận được một >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
37 vì >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
38 không được xác định trong không gian tên >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 hoặc không gian tên >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4Giống như với
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, bạn có thể chuyển bất kỳ biến hiển thị nào [toàn cục, cục bộ hoặc không cục bộ] cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4. Bạn cũng có thể chuyển các cặp khóa-giá trị tùy chỉnh như >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
06 trong ví dụ trên. >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ coi tất cả chúng là biến cục bộLưu ý rằng để cung cấp từ điển cho
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, trước tiên bạn cần cung cấp từ điển cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Không thể sử dụng đối số từ khóa với >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
2Nếu bạn cố gắng sử dụng đối số từ khóa khi gọi
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, thì bạn sẽ nhận được một >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
12 giải thích rằng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 không cần đối số từ khóa. Vì vậy, bạn cần cung cấp từ điển >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 trước khi có thể cung cấp từ điển >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4Nếu bạn không chuyển một từ điển tới
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, thì nó sẽ mặc định là từ điển được chuyển tới >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Đây là một ví dụ trong đó bạn chuyển một từ điển trống cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và không có gì cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
3Cho rằng bạn không cung cấp từ điển tùy chỉnh cho
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, đối số mặc định cho từ điển được chuyển đến >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Trong trường hợp này, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 không có quyền truy cập vào >>> 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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
8 vì >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 chứa một từ điển trốngSự khác biệt thực tế chính giữa
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4 là Python sẽ tự động chèn khóa >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
60 vào >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 nếu khóa đó chưa tồn tại. Điều này xảy ra cho dù bạn có cung cấp từ điển tùy chỉnh cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 hay không. Mặt khác, nếu bạn cung cấp một từ điển tùy chỉnh cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, thì từ điển đó sẽ không thay đổi trong quá trình thực hiện >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Đánh giá các biểu thức bằng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
Bạn có thể sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python để đánh giá bất kỳ loại biểu thức Python nào nhưng không phải câu lệnh Python, chẳng hạn như câu lệnh ghép dựa trên từ khóa hoặc câu lệnh gán>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 có thể hữu ích khi bạn cần đánh giá động các biểu thức và sử dụng các kỹ thuật hoặc công cụ Python khác sẽ tăng đáng kể thời gian và công sức phát triển của bạn. Trong phần này, bạn sẽ tìm hiểu cách bạn có thể sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python để đánh giá các biểu thức Python đa năng, toán học và logicBiểu thức Boolean
Biểu thức Boolean là biểu thức Python trả về giá trị thực [
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
36 hoặc >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
37] khi trình thông dịch đánh giá chúng. Chúng thường được sử dụng trong các câu lệnh >>> eval["x + y", {"x": x, "y": y}]
300
5 để kiểm tra xem một số điều kiện là đúng hay sai. Vì biểu thức Boolean không phải là câu lệnh ghép nên bạn có thể sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đánh giá chúng>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
4Bạn có thể sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 với các biểu thức Boolean sử dụng bất kỳ toán tử Python nào sau đây
41,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
42,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
43,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
44,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
45,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
46>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
47,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
48,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
49>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
50,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
51>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
52,>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
53>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
Trong mọi trường hợp, hàm trả về giá trị thực của biểu thức mà bạn đang đánh giá
Bây giờ, bạn có thể đang nghĩ, tại sao tôi nên sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 thay vì sử dụng trực tiếp biểu thức Boolean? >>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
5Bên trong
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
55, bạn sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đánh giá >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
57 được cung cấp và trả về >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
58 hoặc >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
59 tùy theo kết quả đá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 điều kiện nào khác với điều kiện là bạn gắn với các tên >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
60 và >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
61 mà bạn đã xác định trong >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
55Bây giờ hãy tưởng tượng bạn sẽ triển khai một cái gì đó như thế này như thế nào mà không cần sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python. Điều đó sẽ mất ít mã và thời gian hơn? Loại bỏ các quảng cáobiểu thức toán học
Một trường hợp sử dụng phổ biến của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python là đánh giá các biểu thức toán học từ đầu vào dựa trên chuỗi. Ví dụ: nếu bạn muốn tạo một máy tính Python, thì bạn có thể sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đánh giá đầu vào của người dùng và trả về kết quả tính toánCác ví dụ sau đây cho thấy cách bạn có thể sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 cùng với >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67 để thực hiện các phép toán>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
6Khi bạn sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đánh giá các biểu thức toán học, bạn có thể chuyển các biểu thức thuộc bất kỳ loại hoặc độ phức tạp nào. >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ phân tích chúng, đánh giá chúng và nếu mọi thứ đều ổn, sẽ cung cấp cho bạn kết quả như mong đợiBiểu thức mục đích chung
Cho đến giờ, bạn đã học cách sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 với các biểu thức toán học và Boolean. Tuy nhiên, bạn có thể sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 với các biểu thức Python phức tạp hơn kết hợp các lệnh gọi hàm, tạo đối tượng, truy cập thuộc tính, hiểu, v.v.Ví dụ: bạn có thể gọi hàm tích hợp sẵn hoặc hàm mà bạn đã nhập bằng mô-đun tiêu chuẩn hoặc bên thứ ba
>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
7Trong ví dụ này, bạn sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python để thực thi một số 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 cũng có thể khiến bạn gặp rủi ro bảo mật nghiêm trọng, chẳng hạn như cho phép người dùng ác ý 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ạnTrong 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
Mặc dù nó có số lần sử dụng gần như không giới hạn, nhưng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python cũng có ý nghĩa bảo mật quan trọng. >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 đượ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] tự động thực thi mã Python tùy ýĐây được coi là phương pháp lập trình tồi 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 định sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đá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 sẽ không biết chắc 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 vào tay kẻ xấuVì lý do này, các phương pháp lập trình tốt thường khuyên không nên sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7. Nhưng nếu bạn vẫn chọn sử dụng chức năng này, thì nguyên tắc chung là không bao giờ sử dụng chức năng đó với thông tin đầ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ưởngNhư một ví dụ về cách sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 một cách vô trách nhiệm có thể khiến 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 >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
80. Ứng dụng sẽ nhận thông tin đầu vào của người dùng và chuyển nó tới >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đá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 hộp Linux và quy trình của ứng dụng có quyền phù hợp, thì người dùng độc hại có thể đưa ra một chuỗi nguy hiểm như sau
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
8Đoạn mã trên sẽ xóa tất cả các tệp trong thư mục hiện tại của ứng dụng. Đó sẽ là khủng khiếp, phải không?
Ghi chú. là một hàm tích hợp lấy tên mô-đun làm chuỗi và trả về tham chiếu đến đối tượng mô-đun.
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
82 là một hàm hoàn toàn khác với câu lệnh >>> eval["x + y + z", {"x": x, "y": y, "z": 300}]
600
>>> z
Traceback [most recent call last]:
File "", line 1, in
NameError: name 'z' is not defined
8. Bạn không thể đánh giá một câu lệnh >>> eval["x + y + z", {"x": x, "y": y, "z": 300}]
600
>>> z
Traceback [most recent call last]:
File "", line 1, in
NameError: name 'z' is not defined
8 bằng cách sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Khi thông tin đầu vào không đáng tin cậy, không có cách hoàn toàn hiệu quả nào để tránh các rủi ro bảo mật liên quan đến
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7. Tuy nhiên, bạn có thể giảm thiểu rủi ro của mình bằng cách hạn chế môi trường thực thi của >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7. Bạn sẽ học một vài kỹ thuật để làm như vậy trong các phần sauLoại bỏ các quảng cáoHạn chế >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
Bạn có thể hạn chế môi trường thực thi của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 bằng cách chuyển các từ điển tùy chỉnh tới các đối số >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4. Ví dụ: bạn có thể chuyển các từ điển trống cho cả hai đối số để ngăn >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 truy cập tên trong trình gọi>>>
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
9Nếu bạn chuyển các từ điển trống [
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
68] cho >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, thì >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ không tìm thấy 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 "", line 1, in
File "", line 1, in
NameError: name 'y' is not defined
8 trong không gian tên chung hoặc không gian tên cục bộ khi đánh giá chuỗi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
00. Kết quả là, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ ném một >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
37Thật không may, việc hạn chế các đối số
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4 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 >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python, bởi vì bạn vẫn có thể truy cập tất cả các tên dựng sẵn của PythonHạn chế sử dụng tên dựng sẵn
Như bạn đã thấy trước đó,
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python tự động chèn tham chiếu đến từ điển của >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
61 vào >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 trước khi phân tích cú pháp >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
1. Người dùng ác ý có thể khai thác hành vi này bằng cách sử dụng chức năng tích hợp sẵn >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
82 để 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ìnhCá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 sẵn nào và bất kỳ mô-đun tiêu chuẩn nào như
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67 hoặc >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
12 ngay cả sau khi bạn đã hạn chế >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
0Mặc dù bạn hạn chế
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4 sử dụng từ điển trống, bạn vẫn có thể sử dụng bất kỳ chức năng tích hợp nào giống như bạn đã làm với >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
17 và >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
82 trong đoạn mã trênBạn có thể sử dụng
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
82 để nhập bất kỳ mô-đun tiêu chuẩn hoặc bên thứ ba nào giống như bạn đã làm ở trên với >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67 và >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
12. Với kỹ thuật này, bạn có thể truy cập bất kỳ chức năng hoặc lớp nào được định nghĩa trong >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
12 hoặc bất kỳ mô-đun nào khác. Bây giờ hãy tưởng tượng những gì một người dùng độc hại có thể làm với hệ thống của bạn bằng cách sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
12 hoặc bất kỳ mô-đun mạnh mẽ nào khác trong thư viện tiêu chuẩnĐể giảm thiểu rủi ro này, bạn có thể hạn chế quyền truy cập vào các chức năng tích hợp sẵn của Python bằng cách ghi đè khóa
>>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
60 trong >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3. Thực tiễn tốt khuyên bạn nên sử dụng từ điển tùy chỉnh có chứa cặp khóa-giá trị >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
27. Kiểm tra ví dụ sau>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
1Nếu bạn chuyển một từ điển chứa cặp khóa-giá trị
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
27 đến >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3, thì >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 sẽ không có quyền truy cập trực tiếp vào các hàm tích hợp sẵn của Python như >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
82. Tuy nhiên, như bạn sẽ thấy trong phần tiếp theo, cách tiếp cận này vẫn không làm cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 hoàn toàn an toànHạn chế tên trong đầu vào
Mặc dù bạn có thể hạn chế môi trường thực thi của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python bằng cách sử dụng các từ điển tùy chỉnh >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, chức năng này vẫn sẽ dễ bị tổn thương trước một số thủ thuật ưa thích. Ví dụ: bạn có thể truy cập lớp bằng cách sử dụng một loại chữ như >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
37, >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
38, >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
68 hoặc >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
40 cùng với một số thuộc tính đặc biệt>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
2Khi bạn có quyền truy cập vào
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
36, bạn có thể sử dụng phương thức đặc biệt để truy cập vào tất cả các lớp kế thừa từ >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
36. Đây là cách nó hoạt động>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
3Mã này sẽ in một danh sách lớn các lớp ra màn hình của bạn. Một số lớp này khá mạnh và có thể cực kỳ nguy hiểm nếu rơi vào tay kẻ xấu. Điều này mở ra một lỗ hổng bảo mật quan trọng khác mà bạn không thể đóng bằng cách hạn chế môi trường thực thi của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
4Việc hiểu danh sách trong đoạn mã trên lọc các lớp kế thừa từ
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
36 để trả về một >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
46 chứa lớp >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
47. Chỉ mục đầu tiên [>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
48] trả về lớp >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
47. Khi bạn có quyền truy cập vào >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
47, bạn gọi nó để tạo một đối tượng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
47. Sau đó, bạn gọi >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
52 trên đối tượng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
47 để tạo danh sách mười số nguyênTrong ví dụ này, bạn sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
47 để minh họa lỗ hổng bảo mật trong >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7. Bây giờ hãy tưởng tượng những gì một người dùng độc hại có thể làm nếu hệ thống của bạn hiển thị các lớp nhưGhi chú. Để tìm hiểu sâu hơn về các lỗ hổng của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, hãy xem bài viết của Ned Batchelder, Eval thực sự nguy hiểmMột giải pháp khả thi cho lỗ hổng này là hạn chế sử dụng tên trong đầu vào, đối với một loạt tên an toàn hoặc không có tên nào cả. Để thực hiện kỹ thuật này, bạn cần trải qua các bước sau
- Tạo một từ điển chứa các tên mà bạn muốn sử dụng với
7>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
- Biên dịch chuỗi đầu vào thành mã byte bằng cách sử dụng
05 ở chế độ>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
13>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
- Kiểm tra
61 trên đối tượng mã byte để đảm bảo rằng nó chỉ chứa các tên được phép>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
- Nâng cao
37 nếu người dùng cố gắng nhập tên không được phép>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
Hãy xem chức năng sau đây trong đó bạn thực hiện tất cả các bước này
>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
5Trong
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
63, bạn thực hiện tất cả các bước mà bạn đã thấy trước đây. Hàm này hạn chế các tên mà bạn có thể sử dụng với >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 chỉ với những tên đó trong từ điển >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
65. Để làm điều này, hàm sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
61, là một thuộc tính của đối tượng mã trả về một chứa các tên trong đối tượng mãCác ví dụ sau đây cho thấy cách thức hoạt động của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
63 trong thực tế>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
6Nếu bạn gọi
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
63 để đánh giá các phép toán số học hoặc nếu bạn sử dụng các biểu thức bao gồm các tên được phép, thì bạn sẽ nhận được kết quả như mong đợi. Nếu không, bạn sẽ nhận được một >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
37. Trong các ví dụ trên, tên duy nhất bạn cho phép là >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
17. Các tên khác như >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
71 và >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
72 không được phép, vì vậy hàm sẽ tạo ra một số >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
37 khi bạn cố gắng sử dụng chúngNếu bạn muốn hoàn toàn không cho phép sử dụng tên, thì bạn có thể viết lại
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
63 như sau>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
7Bây giờ chức năng của bạn không cho phép bất kỳ tên nào trong chuỗi đầu vào. Để thực hiện điều này, bạn kiểm tra các tên trong
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
61 và tăng số >>> eval["2 ** 8"]
256
>>> eval["1024 + 1024"]
2048
>>> eval["sum[[8, 16, 32]]"]
56
>>> x = 100
>>> eval["x * 2"]
200
37 nếu tìm thấy. Nếu không, bạn đánh giá >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
77 và trả về kết quả đánh giá. Trong trường hợp này, bạn cũng sử dụng một từ điển trống để hạn chế >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4Bạn có thể sử dụng kỹ thuật này để giảm thiểu các vấn đề bảo mật của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 và củng cố áo giáp của bạn trước các cuộc tấn công nguy hiểmLoại bỏ các quảng cáoHạn chế đầu vào chỉ bằng chữ
Một trường hợp sử dụng phổ biến cho
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python là đánh giá các chuỗi chứa các ký tự Python tiêu chuẩn và biến chúng thành các đối tượng cụ thểThư viện tiêu chuẩn cung cấp một chức năng được gọi là có thể giúp đạt được mục tiêu này. Hàm này không hỗ trợ toán tử, nhưng nó hỗ trợ danh sách, bộ dữ liệu, số, chuỗi, v.v.
>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
8Lưu ý rằng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
81 chỉ hoạt động với các ký tự loại tiêu chuẩn. Nó không hỗ trợ việc sử dụng các toán tử 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
81, thì bạn sẽ nhận được một >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
84. Chức năng này cũng có thể giúp bạn giảm thiểu rủi ro bảo mật liên quan đến việc sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của PythonSử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python với >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
87
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
Trong Trăn 3. x, phần tích hợp đọc đầu vào của người dùng tại dòng lệnh, chuyển đổi nó thành một chuỗi, loại bỏ dòng mới ở cuối và trả về kết quả cho người gọi. Vì kết quả của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
87 là một chuỗi, bạn có thể cung cấp nó cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 và đánh giá nó dưới dạng một biểu thức Python>>>
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
9Bạn có thể quấn
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python xung quanh >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
87 để tự động đánh giá đầu vào của người dùng. Đây là trường hợp sử dụng phổ biến cho >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 vì nó mô phỏng hành vi của , trong đó >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
87 đánh giá đầu vào của người dùng dưới dạng biểu thức Python và trả về kết quảHành vi này của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
87 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 bộ đánh giá biểu thức toán học
Cho đến giờ, bạn đã học cách hoạt động của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python và cách sử dụng nó trong thực tế. Bạn cũng đã biết rằng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 có ý nghĩa bảo mật quan trọng và việc tránh sử dụng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 trong mã của bạn thường được coi là thông lệ tốt. Tuy nhiên, có một số tình huống trong đó >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python có thể giúp bạn tiết kiệm rất nhiều thời gian và công sứcTrong phần này, bạn sẽ viết mã 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 sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7, thì bạn cần thực hiện các bước sau- Phân tích cú pháp biểu thức đầu vào
- Thay đổi các thành phần của biểu thức thành các đối tượng Python [số, toán tử, hàm, v.v.]
- Kết hợp mọi thứ thành một biểu thức
- Xác nhận rằng biểu thức hợp lệ trong Python
- Đánh giá biểu thức cuối cùng và trả về kết quả
Đó sẽ là rất nhiều công việc khi xem xét rất nhiều biểu thức có thể có 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để giải quyết vấn đề này và bạn đã học được một số kỹ thuật để giảm rủi ro bảo mật liên quanBạn có thể lấy 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
Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu về eval[] của Python trong hướng dẫn này
Đầu tiên, kích hoạt trình chỉnh sửa mã yêu thích của bạn. Tạo một cái mới có tên là
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
03, rồi thêm đoạn mã sau>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
0Trong đoạn mã này, trước tiên bạn nhập mô-đun
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67 của Python. Mô-đun này sẽ cho phép bạn thực hiện các phép toán bằng cách sử dụng các hàm và hằng số được xác định trước. Hằng số >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
05 chứa một từ điển chứa các tên không đặc biệt trong >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67. Bằng cách này, bạn sẽ có thể sử dụng chúng với >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Bạn cũng xác định thêm ba. Bạn sẽ sử dụng chúng làm giao diện người dùng cho tập lệnh của mình và bạn sẽ in chúng ra màn hình khi cần
Bây giờ bạn đã sẵn sàng viết mã chức năng cốt lõi của ứng dụng của mình. Trong trường hợp này, bạn muốn viết mã một hàm nhận các 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 có tên là
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
08>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
1Đây là cách chức năng hoạt động
Trong dòng
09, bạn xác định>>> # Incomplete expression >>> eval["5 + 7 *"] File "", line 1 5 + 7 * ^ SyntaxError: unexpected EOF while parsing
08. Hàm này lấy chuỗi>>> # Incomplete expression >>> eval["5 + 7 *"] File "", line 1 5 + 7 * ^ SyntaxError: unexpected EOF while parsing
1 làm đối số và trả về một số float biểu thị kết quả đánh giá chuỗi dưới dạng biểu thức toán học>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
Ở dòng
12, bạn sử dụng>>> # Incomplete expression >>> eval["5 + 7 *"] File "", line 1 5 + 7 * ^ SyntaxError: unexpected EOF while parsing
05 để biến chuỗi đầu vào>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
1 thành mã Python đã biên dịch. Thao tác biên dịch sẽ tăng>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
9 nếu người dùng nhập biểu thức không hợp lệ>>> eval["x + y", {"x": x, "y": y}] 300
Trong dòng
16, bạn bắt đầu một vòng lặp>>> # Incomplete expression >>> eval["5 + 7 *"] File "", line 1 5 + 7 * ^ SyntaxError: unexpected EOF while parsing
7 để kiểm tra các tên có trong>>> eval["x + y", {"x": x, "y": y}] 300
1 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>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
37>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
Trong dòng
20, bạn thực hiện đánh giá thực tế của biểu thức toán học. Lưu ý rằng bạn chuyển các từ điển tùy chỉnh tới>>> # Incomplete expression >>> eval["5 + 7 *"] File "", line 1 5 + 7 * ^ SyntaxError: unexpected EOF while parsing
3 và>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
4 theo khuyến nghị của thông lệ tốt.>>> # Arithmetic operations >>> code = compile["5 + 4", "", "eval"] >>> eval[code] 9 >>> code = compile["[5 + 7] * 2", "", "eval"] >>> eval[code] 24 >>> import math >>> # Volume of a sphere >>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"] >>> eval[code] 65449.84694978735
05 giữ các hàm và hằng số được định nghĩa trong>>> # Incomplete expression >>> eval["5 + 7 *"] File "", line 1 5 + 7 * ^ SyntaxError: unexpected EOF while parsing
67>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
Ghi chú. Vì ứng dụng này sử dụng các hàm được xác định trong
>>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67, bạn cần cân nhắc rằng một số hàm này sẽ tăng >>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
84 khi bạn gọi chúng với giá trị đầu vào không hợp lệVí dụ:
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
27 sẽ gây ra lỗi vì căn bậc hai của >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
28 không được xác định. Sau này, bạn sẽ thấy cách phát hiện lỗi này trong mã máy khách của mìnhViệc sử dụng các giá trị tùy chỉnh cho thông số
>>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
3 và >>> # Arithmetic operations
>>> code = compile["5 + 4", "", "eval"]
>>> eval[code]
9
>>> code = compile["[5 + 7] * 2", "", "eval"]
>>> eval[code]
24
>>> import math
>>> # Volume of a sphere
>>> code = compile["4 / 3 * math.pi * math.pow[25, 3]", "", "eval"]
>>> eval[code]
65449.84694978735
4, cùng với việc kiểm tra tên trong dòng >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
31, 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7Trình đánh giá biểu thức toán học của bạn sẽ hoàn thành khi bạn viết mã máy khách của nó vào
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
33. 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 trình đọ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 thông báo chào mừng tới người dùng
- Hiển thị lời nhắc sẵn sàng đọc đầu vào của người dùng
- 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
- Đọc biểu thức toán học của người dùng
- Đánh giá biểu thức toán học của người dùng
- In kết quả đánh giá ra màn hình
Kiểm tra việc triển khai sau đây của
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
33>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
2Bên trong
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
33, trước tiên bạn in thông báo >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
36. Sau đó, bạn đọc đầu vào của người dùng trong a để nắm bắt >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
38 và >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
39. Nếu một trong hai trường hợp ngoại lệ này xảy ra, thì bạn chấm dứt ứng dụngNếu người dùng nhập tùy chọn
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
40, thì ứng dụng sẽ hiển thị hướng dẫn >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
41 của bạn. Tương tự như vậy, nếu người dùng nhập vào >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
42 hoặc >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
43, thì ứng dụng sẽ kết thúcCuối cùng, bạn sử dụng
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
08 để đánh giá biểu thức toán học của người dùng, sau đó bạn in kết quả ra màn hình. Điều quan trọng cần lưu ý là một cuộc gọi đến >>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
08 có thể đưa ra các ngoại lệ sau
9. Điều này xảy ra khi người dùng nhập một biểu thức không tuân theo cú pháp Python>>> eval["x + y", {"x": x, "y": y}] 300
37. Đ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] không được phép>>> eval["2 ** 8"] 256 >>> eval["1024 + 1024"] 2048 >>> eval["sum[[8, 16, 32]]"] 56 >>> x = 100 >>> eval["x * 2"] 200
84. Điều này xảy ra khi người dùng cố gắng sử dụng một giá trị không được phép làm đầu vào cho một chức năng nhất định trong>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
67>>> x = 100 >>> eval["if x: print[x]"] File "", line 1 if x: print[x] ^ SyntaxError: invalid syntax
Lưu ý rằng trong
>>> # Incomplete expression
>>> eval["5 + 7 *"]
File "", line 1
5 + 7 *
^
SyntaxError: unexpected EOF while parsing
33, bạn nắm bắt tất cả các ngoại lệ này và in thông báo cho người dùng tương ứng. Điều này sẽ cho phép người dùng xem lại 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 70 dòng mã bằng cách sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python. Để chạy ứng dụng, hãy mở dòng lệnh của hệ thống và gõ lệnh sau>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
3Lệnh này sẽ khởi chạy trình đánh giá biểu thức toán học [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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
4Khi 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
5Nếu bạn nhập một biểu thức toán học hợp lệ, thì ứng dụng sẽ đánh giá nó và in kết quả ra 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
6Trong ví dụ đầu tiên, bạn bỏ lỡ dấu ngoặc đơn đóng, vì vậy bạn nhận được 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 "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
17, điều này không được phép và bạn nhận được thông báo lỗi có giải thích. Cuối cùng, bạn gọi một hàm >>> x = 100
>>> eval["if x: print[x]"]
File "", line 1
if x: print[x]
^
SyntaxError: invalid syntax
67 với giá trị đầu vào không hợp lệ và ứng dụng sẽ tạo một thông báo xác định vấn đề trong đầu vào của bạnVậy là xong rồi—công cụ đánh giá biểu thức toán học của bạn đã sẵn sàng. Vui lòng thêm một số tính năng bổ sung. Một số ý tưởng giúp bạn bắt đầu bao gồm mở rộng từ điển các tên được phép và thêm các thông báo cảnh báo phức tạp hơn. Hãy thử và cho chúng tôi biết trong phần nhận xét nó diễn ra như thế nào
Loại bỏ các quảng cáoPhần kết luận
Bạn có thể sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 của Python để đá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ã. Hàm 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 rắc rối khi tạo bộ đánh giá biểu thức của riêng mình từ đầuTrong hướng dẫn này, bạn đã học cách hoạt động của
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 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
7 của Python để đánh giá động các biểu thức Python cơ bản>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
- Chạy các câu lệnh phức tạp hơn như gọi hàm, tạo đối tượng và truy cập thuộc tính bằng cách sử dụng
7>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
- Giảm thiểu rủi ro bảo mật liên quan đến việc sử dụng
7 của Python>>> eval["pi = 3.1416"] File "", line 1 pi = 3.1416 ^ SyntaxError: invalid syntax
Ngoài ra, bạn đã mã hóa một ứng dụng sử dụng
>>> eval["pi = 3.1416"]
File "", line 1
pi = 3.1416
^
SyntaxError: invalid syntax
7 để đánh giá một cách 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ã của ứng dụng bằng cách nhấp vào liên kết bên dướiTải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu về eval[] của Python trong hướng dẫn này
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Đánh giá các biểu thức một cách linh hoạt với Python eval[]
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Leodanis Pozo Ramos
Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác
» Tìm hiểu thêm về LeodanisMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Bryan
Geir Arne
Joanna
Gia-cốp
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi