Hướng dẫn how do you run a string in python? - làm thế nào để bạn chạy một chuỗi trong python?

Tránh exec và eval

Sử dụng exec và eval trong Python rất cau mày.

Có những lựa chọn thay thế tốt hơn

Từ câu trả lời hàng đầu (nhấn mạnh của tôi):

Đối với các câu lệnh, sử dụng exec.

Khi bạn cần giá trị của một biểu thức, hãy sử dụng eval.

Tuy nhiên, bước đầu tiên là tự hỏi liệu bạn có thực sự cần không. Việc thực thi mã thường là vị trí của phương sách cuối cùng: nó chậm, xấu và nguy hiểm nếu nó có thể chứa mã nhập vào người dùng. Bạn nên luôn luôn nhìn vào các lựa chọn thay thế trước, chẳng hạn như các hàm bậc cao hơn, để xem liệu những điều này có thể đáp ứng tốt hơn nhu cầu của bạn không.Executing code should generally be the position of last resort: It's slow, ugly and dangerous if it can contain user-entered code. You should always look at alternatives first, such as higher order functions, to see if these can better meet your needs.

Từ các lựa chọn thay thế đến Exec/Eval?

Đặt và nhận các giá trị của các biến có tên trong chuỗi

[Trong khi eval] sẽ hoạt động, thường không nên sử dụng các tên biến có nghĩa là chính chương trình.

Thay vào đó, tốt hơn sử dụng một dict.

Nó không thành ngữ

Từ http://lucumr.pocoo.org/2011/2/1/exec-in-python/ (nhấn mạnh của tôi)

Python không phải là PHP

Đừng cố gắng phá vỡ các thành ngữ Python vì một số ngôn ngữ khác làm điều đó khác nhau. Các không gian tên nằm trong Python vì một lý do và chỉ vì nó cung cấp cho bạn công cụ exec, điều đó không có nghĩa là bạn nên sử dụng công cụ đó.just because it gives you the tool exec it does not mean you should use that tool.

Nó nguy hiểm

Từ http://nedbatchelder.com/blog/201206/eval_reallly_is_dangero.html (nhấn mạnh của tôi)

Vì vậy, Eval không an toàn, ngay cả khi bạn loại bỏ tất cả các toàn cầu và các công trình xây dựng!

Vấn đề với tất cả những nỗ lực để bảo vệ Eval () là chúng là danh sách đen. Họ loại bỏ rõ ràng những thứ có thể nguy hiểm. Đó là một trận thua vì nếu chỉ còn một mục trong danh sách, bạn có thể tấn công hệ thống.attempts to protect eval() is that they are blacklists. They explicitly remove things that could be dangerous. That is a losing battle because if there's just one item left off the list, you can attack the system.

Vì vậy, có thể đánh giá được làm an toàn? Khó nói. Tại thời điểm này, dự đoán tốt nhất của tôi là bạn không thể gây hại nếu bạn không thể sử dụng bất kỳ dấu gạch dưới kép nào, vì vậy có lẽ nếu bạn loại trừ bất kỳ chuỗi nào có dấu gạch dưới kép, bạn an toàn. Có lẽ...

Thật khó để đọc và hiểu

Từ http://stupidpythonideas.blogspot.it/2013/05/why-evalexec-is-bad.html (nhấn mạnh của tôi):

Đầu tiên, exec làm cho con người khó đọc mã của bạn khó khăn hơn. Để tìm ra những gì đang xảy ra, tôi không phải đọc mã của bạn, tôi phải đọc mã của bạn, tìm ra chuỗi nào nó sẽ tạo ra, sau đó đọc mã ảo đó. Vì vậy, nếu bạn đang làm việc trong một nhóm hoặc xuất bản phần mềm nguồn mở hoặc yêu cầu trợ giúp ở một nơi nào đó như StackoverFlow, bạn sẽ khiến người khác khó giúp bạn hơn. Và nếu có bất kỳ cơ hội nào bạn sẽ gỡ lỗi hoặc mở rộng mã này 6 tháng kể từ bây giờ, bạn sẽ làm cho nó khó khăn hơn cho bản thân trực tiếp hơn.exec makes it harder to human beings to read your code. In order to figure out what's happening, I don't just have to read your code, I have to read your code, figure out what string it's going to generate, then read that virtual code. So, if you're working on a team, or publishing open source software, or asking for help somewhere like StackOverflow, you're making it harder for other people to help you. And if there's any chance that you're going to be debugging or expanding on this code 6 months from now, you're making it harder for yourself directly.

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc
    Examples: 
     

    Input:
    code = """ a = 6+5
               print(a)"""
    Output:
    11
    Explanation:
    Mind it that "code" is a variable and
    not python code. It contains another code, 
    which we need to execute.
    
    Input:
    code = """ def factorial(num):
                   for i in range(1,num+1):
                       fact = fact*i
                   return fact
               print(factorial(5))"""
    Output:
    120
    Explanation:
    On executing the program containing the 
    variable in Python we must get the result 
    after executing the content of the variable.

    Bàn luậnexec() function to solve the code contained inside a variable. exec() function is used for the dynamic execution of Python code. It can take a block of code containing Python statements like loops, class, function/method definitions and even try/except block. This function doesn’t return anything. The code below solves the problem and explains the exec() function. 
     

    Python3

    Đưa ra một vài dòng mã bên trong một biến chuỗi và thực thi mã bên trong chuỗi. & Nbsp; ví dụ: & nbsp; & nbsp;

    120
    3
    120
    4
    120
    5

    120
    3exec
    120
    8

    120
    9

    Output:  
     

    120

    Ở đây chúng tôi sử dụng hàm EXEC () để giải mã có bên trong một biến. Hàm exec () được sử dụng để thực hiện động của mã python. Nó có thể lấy một khối mã chứa các câu lệnh Python như vòng lặp, lớp, định nghĩa chức năng/phương thức và thậm chí thử/ngoại trừ khối. Chức năng này không trả lại bất cứ điều gì. Mã bên dưới giải quyết vấn đề và giải thích hàm Exec (). & NBSP; & nbsp;Chinmoy Lenka. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to . See your article appearing on the GeeksforGeeks main page and help other Geeks.
    Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
     

    Lệnh chuỗi trong Python là gì?

    Một chuỗi là một chuỗi các ký tự được đặt trong các dấu ngoặc kép. Trong trang tham chiếu này, bạn sẽ tìm thấy tất cả các phương thức mà một đối tượng chuỗi có thể gọi. Ví dụ: bạn có thể sử dụng phương thức tham gia () để kết hợp hai chuỗi.a sequence of characters enclosed in quotation marks. In this reference page, you will find all the methods that a string object can call. For example, you can use the join() method to concatenate two strings.

    Làm cách nào để chạy một phần cụ thể của mã trong Python?

    Chạy mã nguồn từ Trình chỉnh sửa trong Bảng điều khiển..
    Mở tệp trong trình chỉnh sửa và chọn một đoạn mã sẽ được thực thi ..
    Từ menu ngữ cảnh của lựa chọn, chọn Thực hiện lựa chọn trong Bảng điều khiển hoặc nhấn Alt+Shift+E: Lưu ý.....
    Xem thực thi lựa chọn mã:.

    Một chuỗi trong ví dụ Python là gì?

    Các chuỗi là các mảng giống như nhiều ngôn ngữ lập trình phổ biến khác, các chuỗi trong Python là các mảng của các byte đại diện cho các ký tự Unicode.Tuy nhiên, Python không có kiểu dữ liệu ký tự, một ký tự duy nhất chỉ đơn giản là một chuỗi có chiều dài 1. Giá đỡ vuông có thể được sử dụng để truy cập các phần tử của chuỗi.arrays of bytes representing unicode characters. However, Python does not have a character data type, a single character is simply a string with a length of 1. Square brackets can be used to access elements of the string.

    Làm thế nào để bạn chạy một chức năng trong Python?

    Để sử dụng các hàm trong Python, bạn viết tên hàm (hoặc biến trỏ đến đối tượng hàm) theo sau là dấu ngoặc đơn (để gọi hàm).Nếu hàm đó chấp nhận các đối số (như hầu hết các hàm), thì bạn sẽ chuyển các đối số bên trong dấu ngoặc đơn khi bạn gọi hàm.write the function name (or the variable that points to the function object) followed by parentheses (to call the function). If that function accepts arguments (as most functions do), then you'll pass the arguments inside the parentheses as you call the function.