Tất cả những gì bạn cần biết về Eval trong Python



Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về Eval trong Python, nhược điểm và cách sử dụng của nó với các ví dụ.

Ở mọi nơi bạn nhìn xung quanh mình, bạn sẽ tìm thấy một ứng dụng đã được xây dựng đặc biệt để đáp ứng nhu cầu của bạn. Mặc dù có nhiều ngôn ngữ lập trình có thể được sử dụng để phát triển các ứng dụng này, nhưng hầu hết chúng đều được xây dựng bằng . Python cùng với các tính năng tuyệt vời và tính linh hoạt tăng lên của nó mang đến những dịch vụ độc đáo, vừa mạnh mẽ vừa cực kỳ hữu ích mọi lúc. Trong bài viết Đánh giá trong Python này, chúng tôi sẽ thảo luận về những điểm sau:

Eval trong Python là gì?

Hàm eval trong Python là một trong những tùy chọn thú vị nhất hiện có. Một số gọi nó là một cuộc tấn công và một số gọi nó là một lối tắt, nhưng bạn có thể sử dụng nó theo cách nào đó, để chạy một chương trình Python trong mã Python. Khá tuyệt phải không?





Khi bạn sử dụng hàm eval, về cơ bản bạn đang thúc giục trình thông dịch chạy được đặt trong dấu ngoặc của hàm eval.

PythonLogo- Đánh giá bằng PythonCú pháp để sử dụng hàm eval trong Python là:



eval (biểu thức, hình cầu = Không có, địa phương = Không có)

Trong cú pháp trên,

  1. Biểu hiện: Nó là chuỗi hoặc đoạn mã được phân tích cú pháp và đánh giá như một biểu thức Python trong chính chương trình Python.



  2. Toàn cầu: Nó là từ điển được sử dụng để định nghĩa tất cả các phương thức toàn cục có sẵn để thực thi biểu thức được đề cập ở trên. Đây là một thực thể tùy chọn và việc sử dụng nó tùy thuộc vào nhu cầu của bạn.

  3. Người dân địa phương: Tương tự như toàn cầu, đây là một từ điển khác được sử dụng để chỉ định các phương thức cục bộ có sẵn cũng như các biến.

    trừu tượng trong c ++ là gì

Để hiểu rõ hơn việc sử dụng chức năng này, hãy xem ví dụ bên dưới.

từ nhập toán học * def secret_ functions (): return 'Khóa bí mật là 1234' def function_creator (): # biểu thức được đánh giá expr = raw_input ('Nhập hàm (theo x):') # biến được sử dụng trong biểu thức x = int (raw_input ('Nhập giá trị của x:')) # đánh giá biểu thức y = eval (expr) # in kết quả được đánh giá print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

Trong ví dụ trên, function_creator là một hàm sẽ đánh giá các biểu thức toán học được tạo bởi người dùng khi chương trình được thực thi.

Đầu ra:

Nhập hàm (theo x): x * (x + 1) * (x + 2)

Nhập giá trị của x: 3

y = 60

Phân tích

Bây giờ bạn đã xem đoạn mã được chia sẻ ở trên, hãy cùng chúng tôi phân tích kỹ hơn một chút.

  1. Hàm trên sẽ nhận bất kỳ biến nào trong biểu thức x làm đầu vào của nó.

  2. Sau khi thực thi, người dùng sẽ được nhắc nhập giá trị cho x, chỉ sau đó kết quả chương trình mới được tạo.

  3. Cuối cùng, chương trình Python sẽ thực thi hàm eval bằng cách phân tích cú phápexprnhư một lập luận.

Hạn chế của Eval

Tương tự như các hàm tích hợp sẵn khác của Python, eval cũng đi kèm với một số nhược điểm có thể tạo ra sự cố nếu không được tính đến.

Nếu bạn nhìn vào ví dụ trên, một trong những lỗ hổng chính của hàm, function_creator là nó có thể hiển thị bất kỳ giá trị ẩn nào trong chương trình và cũng gọi một hàm có hại vì eval theo mặc định sẽ thực thi bất kỳ thứ gì nằm trong dấu ngoặc đơn của nó.

Để hiểu thêm điều này, hãy xem ví dụ dưới đây.

Đầu vào từ người dùng

Nhập hàm (theo x): secret_ functions ()

Nhập giá trị của x: 0

Đầu ra:

y = Khóa bí mật là 1234

Một tình huống nguy hiểm khác đi kèm với việc sử dụng hàm eval là nhập mô-đun hệ điều hành. Khi bạn đã nhập mô-đun hệ điều hành, nó cho phép Python đọc và ghi bất kỳ tệp nào có trên hệ thống gốc của bạn mà không cần xác thực từ người dùng. Trong trường hợp này, nếu bạn gõ nhầm mộtdòng mã, tất cả các tệp gốc của bạn có thể bị xóa.

Giải pháp cho tất cả những hạn chế này nằm ở việc hạn chế khả năng của hàm eval.

Làm cho Đánh giá an toàn bằng Python

Đánh giá theo mặc định đi kèm với tùy chọn phân tích cú pháp bất kỳ chức năng nào mà nó có quyền truy cập hoặc bất kỳ chức năng nào đã được xác định. Hãy ghi nhớ điều này trong khi viết mã của bạn, sẽ hạn chế khả năng của eval ở một mức độ đáng kể, do đó đảm bảo rằng bạn không có gì sai.

Để hiểu thêm về khái niệm này, hãy xem ví dụ bên dưới.

từ nhập toán học * def secret_ functions (): return 'Khóa bí mật là 1234' def function_creator (): # biểu thức được đánh giá expr = raw_input ('Nhập hàm (theo x):') # biến được sử dụng trong biểu thức x = int (raw_input ('Nhập giá trị của x:')) # chuyển biến x vào từ điển an toàn safe_dict ['x'] = x # đánh giá biểu thức y = eval (expr, {'__builtins __': None}, safe_dict) # in kết quả được đánh giá print ('y = {}'. format (y)) if __name__ == '__main__': # danh sách các phương pháp an toàn safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' độ ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' pseud ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # tạo từ điển các phương pháp an toàn safe_dict = dict ([(k, local (). get (k, None)) cho k trong safe_list]) function_creator ()

Đầu vào từ người dùng

làm thế nào để chấm dứt một chương trình trong java

Nhập hàm (theo x): secret_ functions ()

Nhập giá trị của x: 0

Đầu ra:

NameError: tên 'secret_ Chức năng' không được xác định

Như bạn có thể thấy bằng cách hạn chế quyền truy cập của eval, khả năng xuất hiện sai có thể chứng minh là có hại đã bị loại bỏ.

Công dụng của Eval

Như đã giải thích trong các phần trên, do một số lý do bảo mật mà eval không được sử dụng phổ biến. Tuy nhiên, vẫn có những trường hợp sử dụng cụ thể mà việc sử dụng eval được chứng minh là hữu ích. Một số quan trọng nhất trong số này là.

  1. Nếu bạn muốn người dùng nhập các tập lệnh của riêng họ để sửa đổi đầu ra của chương trình, thì việc sử dụng hàm eval sẽ tỏ ra hữu ích.

  2. Trong khi viết biểu thức để giải các truy vấn toán học, bạn có thể sử dụng eval vì nó dễ hơn nhiều so với viết trình phân tích cú pháp biểu thức.

Bây giờ bạn đã biết tất cả về eval, chúng tôi hy vọng bạn sẽ tận dụng nó trong lập trình hàng ngày của mình đồng thời lưu ý những ưu điểm cũng như nhược điểm.

Với điều này, chúng ta sẽ kết thúc bài viết Đánh giá trong Python này. Để có được kiến ​​thức chuyên sâu về Python cùng với các ứng dụng khác nhau của nó, bạn có thể để được đào tạo trực tuyến trực tiếp với hỗ trợ 24/7 và quyền truy cập trọn đời.

Có một câu hỏi cho chúng tôi? Đề cập đến chúng trong phần nhận xét của 'Đánh giá bằng Python' và chúng tôi sẽ liên hệ lại với bạn.