Computer >> Máy Tính >  >> Lập trình >> Python

phương thức eval trong Python?

Phương thức eval () trong Python được sử dụng để phân tích cú pháp một chuỗi biểu thức dưới dạng biểu thức python và sau đó chạy biểu thức python trong chương trình.

Cú pháp

Cú pháp chung của phương thức eval () python là,

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

ở đâu:

  • biểu thức :tham số chuỗi bắt buộc, đây là chuỗi biểu thức đang được phân tích cú pháp và thực thi dưới dạng biểu thức python.

  • hình cầu :Tham số tùy chọn là một từ điển được sử dụng để chỉ định các biểu thức có sẵn để thực thi. Nếu không được đề cập rõ ràng, các phương thức tích hợp sẵn tiêu chuẩn có sẵn như ‘__builtins__’:Không có phần tử nào.

  • người dân địa phương :Tham số tùy chọn, được sử dụng để chỉ định các biến cục bộ và phương thức có sẵn cho hàm eval ().

Bây giờ để hiểu rõ hơn về phương thức eval (), hãy hiểu nó qua các ví dụ khác nhau.

Phương thức eval () đơn giản

 str1 ='Hello'print (eval (' str1 =="Hello" ')) print (eval (' str1 + ", Python" ')) 

Đầu ra

 TrueHello, Python 

Phương thức eval () trong Python với đầu vào của người dùng

 from math import * for l in range (1,3):func =input ("Nhập Hàm Math để Đánh giá:\ n") try:print (eval (func)) ngoại trừ Exception as ex:print (ex) breakprint ('Xong') 

Đầu ra

 Nhập Hàm Toán học để Đánh giá:abs (-42) 42 Nhập Hàm Toán học để Đánh giá:max (12, 3, 4, 2, 17) 17 Đã hết 

Các hình cầu và địa phương trong Python eval ()

Trước khi hiểu những hàm nào chúng ta cần chuyển cho các phương thức eval (), hãy lấy danh sách tất cả các hàm và biến có trong phạm vi toàn cục và cục bộ.

 from math import * def square_root (n):return sqrt (n) # In bảng ký hiệu toàn cục hiện tại dưới dạng bản in từ điển ('Danh sách các ký hiệu Toàn cục:\ n', Gloals ()) # In bảng ký hiệu cục bộ hiện tại dưới dạng Dictionaryprint ('\ nDanh sách các ký hiệu địa phương:\ n', local ()) # in danh sách các tên trong scopeprint địa phương hiện tại ('\ nDanh sách các tên trong phạm vi địa phương hiện tại:\ n', dir ()) 

Đầu ra

 Danh sách các ký hiệu Toàn cục:{'__ name__':'__main __', '__ doc__':Không có, '__ package__':Không có, '__ loader__':, '__ spec__':Không có, '__annotations__ ':{},' __ builtins__ ':,' __ file__ ':' C:/Python/Python361/eval_example1.py ',' acos ':, 'acosh':, 'asin':, 'asinh':, 'atan':, 'atan2 ':,' atanh ':,' ceil ':,' copysign ':,' cos ':, 'cosh':, 'độ':, 'erf':, 'erfc':<được xây dựng -in function erfc>, 'exp':
, 'expm1':, 'fabs':, 'factorial':, 'floor':, 'fmod':, 'frexp':
, 'fsum':, 'gamma':, 'gcd':, 'pseud':, 'isclose':, 'isfinite':, 'isinf':, 'isnan':, 'ldexp':
, 'lgamma':, 'log':, 'log1p':
, 'log10 ':,' log2 ':,' modf ':,' pow ':,' radians ':, 'sin':, 'sinh':, 'sqrt':, 'tan':<được xây dựng -in function tan>, 'tanh':, 'trunc':, 'pi':3,141592653589793, 'e':2.718281828459045, 'tau':6.283185307179586, 'inf ':inf,' nan ':nan,' square_root ':} Danh sách các ký hiệu cục bộ:{' __ name__ ':' __main__ ',' __doc__ ' :Không, '__ package__':Không, '__ loader__':, '__ spec__':Không, '__annotations__':{}, '__ builtins__': , '__ file__':'C:/Python/Python361/eval_example1.py', 'acos':, 'acosh':, 'asin':, 'asinh':, 'atan':, 'atan2':, 'atanh':, 'ceil':, 'copysign':, 'cos':, 'cosh':, 'Degree':, 'erf':, 'erfc':, 'exp':
, 'expm1 ':,' fabs ':,' giai thừa ':,' floor ':,' fmod ':, 'frexp':
, 'fsum':, 'gamma':, 'gcd':, 'cạnh tranh':, 'isclose':, 'isfinite':, 'isinf':, 'isnan':, 'ldexp':
, 'lgamma':, 'log':, 'log1p':
, 'log10':, 'log2':, 'modf ':,' pow ':,' radians ':,' sin ':,' sinh ':, 'sqrt':, 'tan':, 'tanh':, 'trunc':<được xây dựng -in function trunc>, 'pi':3,141592653589793, 'e':2.718281828459045, 'tau':6.283185307179586, 'inf':inf, 'nan':nan, 'square_root':} Danh sách tên trong phạm vi cục bộ hiện tại:['__ chú thích __', '__ nội trang __', '__ doc __', '__ tệp __', '__ trình tải __', '__ tên__', ' __package __ ',' __ spec __ ',' acos ',' acosh ',' asin ',' asinh ',' atan ',' atan2 ',' atanh ',' ceil ',' copysign ',' cos ',' cosh ' , 'độ', 'e', ​​'erf', 'erfc', 'exp', 'expm1', 'fabs', 'giai thừa', 'sàn', 'fmod', 'frexp', 'fsum', ' gamma ',' gcd ',' pseud ',' inf ',' isclose ',' isfinite ',' isinf ',' isnan ',' ldexp ',' lgamma ',' log ',' log10 ',' log1p ' , 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'square_root', 'tan', 'tanh', ' tau ',' trunc '] 

Dưới đây chúng ta có thể thấy, chúng ta có thể chỉ định giá trị toàn cầu làm từ điển trống trong hàm eval:

>>> print (eval ('dir ()', {})) ['__ builtins__'] 

Hãy xem một ví dụ khác trong đó chúng tôi chỉ cho phép truy cập vào một số phương pháp từ mô-đun toán học.

 from math import * for l in range (1, 4):func =input ("Nhập Hàm Toán học để Đánh giá. \ n Các Hàm được Cho phép là:abs (x) và pow (x, y):\ n") hãy thử :print (eval (func, {'tuyệt đối':abs, 'pow':pow})) ngoại trừ Exception as ex:print (ex) breakprint ('Done') 

Đầu ra

 Nhập Hàm Toán học để Đánh giá Các Hàm Được phép là:abs (x) và pow (x, y):abs (-74) 74 Nhập Hàm Toán học để Đánh giá Các Hàm Được phép là:abs (x) và pow (x, y ):pow (2,7) 128.0 Nhập hàm toán học để đánh giá. Các hàm được phép là:abs (x) và pow (x, y):sqrt (47) name 'sqrt' không được xác định