कृपया ध्यान दें: यह eval() के उपयोग के बारे में नहीं है, यह उस पुस्तक की संभावित गुणवत्ता (या इसकी कमी) के बारे में है जिसका उपयोग किया जाता है और सिखाया जाता है। इसलिए पहले से ही पाइथन में eval() के बारे में अनगिनत धागे हैं।पायथन - ज़ेल पुस्तक eval() का उपयोग करता है, क्या यह गलत है?
एसओ के क्रोध और डाउनवॉट्स को आमंत्रित करने के लिए जोखिम, फिर भी मैंने इस सवाल से पूछने का फैसला किया, बस मामले में। कृपया मेरा साथ दें। मैंने इस विशिष्ट प्रश्न के लिए Google और SO स्वयं को आजमाया है (जैसा कि आप देखेंगे) और कुछ भी नहीं मिला। हालांकि, मैं अंधेरा हो सकता हूं।
यह प्रश्न कुख्यात eval() फ़ंक्शन के उपयोग के बारे में है।
एक अपेक्षाकृत अच्छी तरह से ज्ञात (और अच्छी तरह से समीक्षा की है, जैसा कि आप देख सकते हैं) जॉन Zelle द्वारा किताब है: http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ref=pd_sim_b_3
तकनीकी तौर पर, यह एक CS1 पुस्तक जो प्रोग्रामिंग भाषा के रूप में अजगर का उपयोग करता है। काफी उचित है, इस तरह के लेखक के कंधों से कुछ जिम्मेदारी लेती है ("अरे, मैं आपको यहां कुछ व्यापक सिखाता हूं, इन सभी वाक्यविन्यास और सुरक्षा विवरण नहीं"), लेकिन जब मैंने इसे पढ़ना शुरू किया, मैंने देखा, सचमुच बहुत पहला उदाहरण है, जहां एक्स एक पूर्णांक होना चाहिए और इस तरह हम एक पूर्णांक में उपयोगकर्ता इनपुट बदलने की आवश्यकता
x = eval(input("Enter your number: "))
का उपयोग।
मैं पायथन 2.7.4 का उपयोग कर रहा हूं और पुस्तक पाइथन 3 के बारे में है, इसलिए मुझे बहुत शुरुआत से प्रिंट() और इनपुट() और eval() के साथ बहुत सी समस्याएं आईं और कुछ करना पड़ा काम करने के लिए उदाहरण प्राप्त करने के लिए शोध। मेरे शोध के दौरान, मैंने पाइथन (ज्यादातर यहां एसओ पर) में eval() के बारे में अनगिनत राय पढ़ी हैं जो लगभग हमेशा खराब होती है, एक सुरक्षा जोखिम, एक अनावश्यक तकनीकी ओवरहेड और इतने पर। उपयोगकर्ताओं के प्रश्न बहुत अधिक विस्तृत थे (WxPython प्रोजेक्ट करते समय eval() का उपयोग करने के बारे में कोई था), इसलिए मैं अपने मामले और उनके मामलों के बीच कुल समानता के लिए झुकाव नहीं कर सकता, लेकिन फिर भी ...
तो, मैं मानता हूं, मैं पुस्तक में बहुत दूर नहीं हूं, लेकिन मैं इस बिंदु पर पहुंच गया हूं, थोड़ी देर बाद, लेखक ने अपने विवादास्पद प्रकृति के संदर्भ के बिना eval() के उपयोग की व्याख्या की। उन्होंने मूल रूप से कहा कि मैंने अभी क्या कहा है: हमें अंततः एक int होने के लिए x की आवश्यकता है, इसलिए ऐसा करने का एक आसान तरीका यहां है। और ऐसा लगता है कि वह कभी भी इसका इस्तेमाल कर रहा है।
मेरा प्रश्न यह है: यदि, शुरुआत से ही, कोई लेखक ऐसी गलती करता है (या यह कोई गलती नहीं है? मुझे यहां कुछ याद आ रही है), क्या यह सीखने योग्य पुस्तक है? मेरा मानना है कि श्री ज़ेल सीएस का एक महान शिक्षक है, और यह दिखाता है, लेकिन चाहे वह चाहे या नहीं, लोग अब भी अपनी पुस्तक से पाइथन सीखेंगे, साथ ही एल्गोरिदम और प्रोग्रामिंग की कला के अलावा। तो क्या पाइथन को ऐसी किताब से सीखना उचित है जो पाइथन समुदाय में इस तरह के एक सार्वभौमिक मुद्दे पर चुप रहता है? मैं नहीं चाहता कि श्री ज़ेल एक पाइथन हैकर बनें और अपने सभी रहस्यों को उजागर करें, लेकिन इस तरह के छोटे विवरण किसी ऐसे व्यक्ति को बना या तोड़ सकते हैं जो आत्म-शिक्षण/आत्म-शिक्षण है। इस सीखने की सामग्री के संबंध में आपकी सलाह क्या होगी?
पीएस दूसरी तरफ, मुझे शुरुआत से थोड़ा सा शोध और प्रयोग (अनजाने में) करना बहुत अच्छा है :-)
धन्यवाद!
मैंने सोचा था कि eval सिर्फ जावास्क्रिप्ट में बुरा था –
@JasonSperske यह हर जगह बुराई है – jamylak
int() के बजाय eval() को सुझाव देना गलत है। –