ระหว่างการพัฒนาแอปพลิเคชัน จะมีสถานการณ์มากมายที่เราต้องทำงานกับสตริงและแปลงมันเป็นโครงสร้างข้อมูลที่เปลี่ยนแปลงได้ เช่น ลิสต์ (list)
ตัวอย่างโค้ด
1. ใช้ไลบรารี ast (ปลอดภัยกว่า eval)
import ast
# เริ่มต้นสตริง
str1 = "'Python', 'for', 'fun'"
str2 = "'vishesh', 'ved'"
str3 = "'Programmer'"
# เริ่มต้นลิสต์
result_list = []
# ขยายเป็นลิสต์เดียว
for x in (str1, str2, str3):
result_list.extend(ast.literal_eval(x))
# แสดงผลลัพธ์
print(result_list)
2. ใช้ eval() (ควรใช้ด้วยความระมัดระวัง)
# ใช้ eval
str1 = "['python', 'for', 'fun']"
str2 = "['vishesh', 'ved']"
str3 = "['programmer']"
out = [str1, str2, str3]
out = eval('+'.join(out))
print(out)
คำเตือน
ast.literal_eval() ปลอดภัยกว่า eval() เพราะมันประเมินเฉพาะ literal structures ของ Python เท่านั้น (สตริง, ตัวเลข, ทูเพิล, ลิสต์, ดิกชันนารี, บูลีน, None) และไม่รันโค้ดที่อาจเป็นอันตราย
สรุป
- ใช้
ast.literal_eval()สำหรับการแปลงสตริงที่เป็นการแทนค่าของโครงสร้างข้อมูล Python - หลีกเลี่ยง
eval()ในโค้ดที่ทำงานกับข้อมูลจากภายนอก - วิธีอื่นๆ เช่น
split()หรือjson.loads()อาจเหมาะสมกว่าขึ้นอยู่กับรูปแบบข้อมูล