2009-02-19 11 views
15

बिल्ड स्क्रिप्ट को कार्यान्वित करते समय मैं पाइथन सीखने की प्रक्रिया में हूं। और इस पल के लिए सबकुछ ठीक काम कर रहा है जिसमें लिपियों को वह करने की ज़रूरत होती है जो उन्हें करने की ज़रूरत होती है। लेकिन मुझे लगता है कि मुझे कुछ याद आ रही है, जैसे "द पायथन वे"। मुझे पता है कि निर्माण स्क्रिप्ट और गोंद स्क्रिप्ट वास्तव में सबसे रोमांचक विकास कार्य नहीं हैं और शायद ही कभी पाइथन की सच्ची शक्ति को प्रकट करने के लिए उम्मीदवार बनें लेकिन मुझे अभी भी मेरा दिमाग उड़ाने का मौका मिलेगा। मैं ज्यादातर सी # में विकसित करता हूं और मुझे लगता है कि मेरा पायथन कोड संरचना और स्टाइल में बहुत सी सी # कोड में बहुत समान दिखता है। दूसरे शब्दों में मुझे लगता है कि मैं सी # में सोच रहा हूं लेकिन पायथन में लिख रहा हूं।पायथन: क्या मुझे कुछ याद आ रही है?

क्या मुझे वास्तव में कुछ याद आ रहा है?

(नोट: मुझे पता है यह इतना एक प्रोग्रामिंग सवाल नहीं है और यह काफी व्यापक है और वहाँ नहीं हो सकता है एक निश्चित जवाब तो गुमनामी में नीचे मुझे आधुनिक यदि आप करने के लिए है।)

+0

अपने नोट के अनुसार, इस बेहतर एक समुदाय विकी चर्चा के लिए उपयुक्त हो सकता है ... –

उत्तर

35

मैं आपको सलाह दूंगा कि आप Generators, Iterators, itertools और List Comprehensions से ऊपर पढ़ लें।

ये कुछ भी पाइथोनिक के खंभे हैं। और बाकी सब कुछ के लिए, PEP-8 है।

इन अवधारणाओं पर पढ़ें और जहां भी उपयुक्त हो उनका उपयोग करने का प्रयास करें। शुभकामनाएं!

पुनश्च: import this के लिए मत भूलना;)

परिशिष्ट:

  • पढ़ें Code Like a Pythonista: Idiomatic Python (David Grant से)
  • : मैं भी इस सूत्र यहाँ में अन्य लोगों द्वारा दिए गए कुछ उत्कृष्ट सुझाव कुल होगा
  • Project Euler से समस्याओं को सुलझाने (Nick Fortescue से) एक बहुत अच्छा विचार
  • हैजेनरेटर और डेविड Beazley (André से) द्वारा Iterators पर
  • जानें Scons के बारे में (से सम्मानित S.Lott)
+0

जनरेटर और सूची की समझ का संयोजन शानदार लग रहा है। मुझे लगता है कि मैं उनमें से अधिक का उपयोग करूँगा। धन्यवाद। :) –

+1

itertools चीजें वास्तव में सुंदर ढंग से करने के लिए एक महान मॉड्यूल है। इसके बारे में अक्सर भूल गया। –

+3

मत भूलना, जनरेटर, इटरेटर्स, इटारटोल, सूची समझ, या यहां तक ​​कि पीईपीएस के अस्तित्व से पहले अजगर पहले से ही एक बहुत ही उपयोगी भाषा थी! –

16

नहीं - यह है अन्य सी-जैसी भाषाओं से पाइथन में जाने वाले लोगों के लिए आम है। मेरा मानना ​​है कि आप जो खोज रहे हैं वह आपके कोड को "Pythonic" बनाने का तरीका है। अच्छी खबर यह है कि जितना अधिक पायथन आप लिखेंगे उतना पाइथोनिक आपका कोड बन जाएगा। यह "मैं इसे और अधिक सरल तरीके से कैसे कर सकता हूं" का एक प्राकृतिक अतिप्रवाह है।

The Zen of Python पर देखने के लिए एक और अच्छी जगह है। पाइथन विकास के प्रति ये दृष्टिकोण आपको भी इसी संबंध में मदद करेंगे।

+0

धन्यवाद। यह मुझे अब के लिए शूट करने के बारे में एक बेहतर विचार दिया है। –

+0

"पायथनिक" लिंक टूटा हुआ है! – alexpinho98

3

एंड्रयू हरे और Baishampayan घोष का उत्तर देने के लिए जोड़ने के लिए ...

जानने के लिए किसी भी भाषा के मुहावरे को उस मुहावरे में लिखे गए कोड को शामिल करना चाहिए। मैं अभी भी पाइथन मुहावरे सीख रहा हूं, लेकिन मैं इसके माध्यम से अन्य भाषाओं के साथ रहा हूं। मैं सूची समझ के बारे में पढ़ सकता हूं, लेकिन लाइटबुल केवल तब ही आता है जब आप ऐसी चीजों को उपयोग में देखते हैं और कहते हैं, "वाह! यह कमाल है! कोड की दो पंक्तियां और यह क्रिस्टल स्पष्ट है!" तो कुछ पाइथोनिक कोड ढूंढें जो आपको दिलचस्प लगता है और इसे पढ़ना शुरू कर देता है और इसे समझता है। अगर आप किसी कामकाजी कार्यक्रम के संदर्भ में सबकुछ देखते हैं तो ज्ञान आपके सिर में बेहतर रहेगा।

5

हाल ही में मैं/सीखने किया गया है अजगर में the Project Euler समस्याओं को सुलझाने के आधार पर अपने अजगर में सुधार। यह वास्तव में अच्छी तरह से मेरे लिए काम किया है क्योंकि:

  1. यह मजेदार और प्रतिस्पर्धी है, इसलिए मैं
  2. जा रहा यह मुझे मजबूर करता प्रदर्शन प्राप्त करने के एक बहुत प्राकृतिक तरीके में अजगर डाटा संरचनाओं का उपयोग करने के रखने के लिए प्रेरित कर रहा हूँ मुझे ज़रूरत है, इसलिए मुझे सूचियों, सेटों, तारों, पुनरावृत्ति इत्यादि के बारे में बहुत कुछ सिखाया गया है।
  3. अधिकांश समस्याओं को हल करने के लिए कोड के एक पृष्ठ से कम की आवश्यकता है, इसलिए आपके पास पॉलिशिंग या फिर से लिखने के बारे में सोचने के लिए और अधिक समय है सुरुचिपूर्ण तरीका
  4. पाइथन बड़े पूर्णांक वाले वास्तव में आसानी से copes, और इसलिए यह
  5. का उपयोग करने के लिए सही भाषा की तरह लगता है

मैं पूरी तरह इस सलाह देते हैं।

+0

मैंने पाइथन में कुछ परियोजना यूलर समस्याओं को भी बहुत कुछ सीखा है। विशेष रूप से पाइथन के कार्यात्मक प्रोग्रामिंग पहलुओं का निर्माण बिल्टिन और itertools मॉड्यूल का उपयोग कर। –

1

जबकि पटकथा और सुराग स्क्रिप्ट [इस प्रकार से] कर रहे हैं वास्तव में सबसे रोमांचक विकास कार्य, वे पूरी तरह से अजगर की असली शक्ति खुलासा करने के लिए एक उम्मीदवार हैं नहीं का निर्माण।

सबसे पहले, विभिन्न मेकअप जैसे उपकरणों को पहले से ही अजगर में लिखा देखो।

इस तालाब में बड़ी मछली SCons है: http://www.scons.org/। इसके बारे में जानें। अजगर उपकरण है कि पहले से ही कुछ या आप की कोशिश कर रहे हैं क्या सब करने लगता है:

विकल्प http://farmdev.com/thoughts/46/the-python-make-tool/

"मैं अभी भी अवसर की तरह मेरे मन उड़ा की है, चाहते हैं" गूगल के साथ शुरू के बारे में इस ब्लॉग पोस्ट की वार्ता कर। कोड कम, डाउनलोड और अधिक पढ़ें।

+0

[फैब्रिक] (http: // fabfile) एक और पाइथोनिक डिज़ाइन के साथ एक और मेक-प्रेरित टूल (निर्माण के बजाय दूरस्थ निष्पादन पर केंद्रित है) है। –

5

आप अजगर पढ़ने क्या आप नहीं लिखा है?

यहाँ पायथन 2.6.1 वितरण कि .pyc और .pyo फ़ाइलों को हटा देता से एक स्क्रिप्ट है।

#!/usr/local/bin/python 
"""Recursively zap all .pyc and .pyo files""" 
import os 
import sys 

# set doit true to actually delete files 
# set doit false to just print what would be deleted 
doit = 1 

def main(): 
    if not sys.argv[1:]: 
     if os.name == 'mac': 
      import EasyDialogs 
      dir = EasyDialogs.AskFolder(message='Directory to zap pyc files in') 
      if not dir: 
       sys.exit(0) 
      zappyc(dir) 
     else: 
      print 'Usage: zappyc dir ...' 
      sys.exit(1) 
    for dir in sys.argv[1:]: 
     zappyc(dir) 

def zappyc(dir): 
    os.path.walk(dir, walker, None) 

def walker(dummy, top, names): 
    for name in names: 
     if name[-4:] in ('.pyc', '.pyo'): 
      path = os.path.join(top, name) 
      print 'Zapping', path 
      if doit: 
       os.unlink(path) 

if __name__ == '__main__': 
    main() 

उसमें कितने पायथन मुहावरे मिल सकते हैं?

+1

चार। बेशक, मैं कुछ विरोधी मुहावरों को भी खोजता हूं। ;-) –

6

आप निश्चित रूप से, इस बात पर एक नज़र डालें जब आप अजगर के साथ सिस्टम प्रोग्रामिंग कर रही शुरू कर देना चाहिए: http://www.dabeaz.com/generators/

+0

ओह वाह, यह जेनरेटर कुछ ठंडा सामान है! –

0

मैं एक व्यक्तिगत अजगर गुरु खोजने सुझाव है। उन्हें अपने कुछ कोड दिखाएं और उन्हें मूर्खतापूर्ण पायथन में समीक्षा/पुनः लिखें। इस प्रकार आप प्रबुद्ध हो जाएगा।

0

TLHOLADAY गूंज के लिए, मानक पुस्तकालय पढ़ें। यही वह जगह है जहां "पायथनिक" सामान है। तुम वहाँ एक अच्छा लग रहा है नहीं मिल रहे हैं, तो sqlachemy या Django या अपनी पसंद के परियोजना के लिए स्रोत पढ़ें।

2

कुछ पायथन कोड लिखें और इसे समीक्षा और प्रतिक्रिया के लिए SO पर पोस्ट करें चाहे वह पाइथोनिक हो।

4

इस तरह सोचें:

  • आप थोड़ा काम के लिए बहुत ज्यादा लिख ​​रहे हैं, तो कुछ गलत है, इस pythonic नहीं है।

अधिकांश पायथन कोड जो आप लिखेंगे, वह बहुत ही सरल और सीधा है। आम तौर पर आपको किसी भी चीज़ के लिए ज्यादा काम की ज़रूरत नहीं है। यदि आप बहुत अधिक लिख रहे हैं, तो रोकें और सोचें कि क्या कोई बेहतर तरीका है। (और इस तरह मैंने पाइथन में कई चीजें सीखी हैं!)

1

अन्य लोगों द्वारा उल्लिखित जेनरेटर, इटरेटर, सूची समझ आदि जैसे सामानों के अलावा, मैं कुछ और अवधारणाओं का सुझाव देना चाहता हूं जो मुझे निश्चित रूप से मूल्य जोड़ता है कोई चीज 'पायथनिक' तरीके से करने का प्रयास कर रहा है। ये सजावटी और मेटा वर्ग हैं।

सजावट के लिए, this स्टैक ओवरफ्लो उत्तर की अत्यधिक अनुशंसा की जाती है और मेटा क्लासेस के लिए आप this से जा सकते हैं।

+0

चेतावनी दी जानी चाहिए कि कई लोग मेटाक्लास को अधिक इंजीनियर मानते हैं, और आजकल (2.6+) कक्षा सजावटी अधिकांश मेटाक्लास उपयोग मामलों के लिए अधिक पायथनिक समाधान प्रदान करते हैं। हालांकि, यह समझना बहुत अच्छा है कि 'वर्ग' कथन बस अपने शरीर को एक नए नामस्थान में निष्पादित करता है और परिणाम को 'प्रकार (आधार, आधार, content_dict)' से गुजरता है - यह "नामस्थान एक महान विचार है" का हिस्सा है। –

2

अच्छी तरह से डिज़ाइन किए गए पायथनिक एपीआई/ढांचे का अध्ययन करें। मानक लाइब्रेरी के बाहर सबसे अच्छे रहते हैं। ध्यान दें कि वे आपको नहीं करते हैं। मेरे पसंदीदा:

  • py.test unittest की तुलना में अधिक pythonic (जो JUnit पर आधारित था) है। unittest.TestCase से विरासत में प्राप्त कक्षा के बजाय बस test_foo() फ़ंक्शन लिखें। self.assertEqual(x, y) के बजाय बस assert x == y करें। कई और उपहार ...

    • डॉक्टेस्ट भी सबसे ज्यादा पाइथोनिक है। कुछ व्यावहारिक परेशानियों के कारण इसे छोड़ देते हैं, लेकिन विचार शानदार है।

    • यदि आप परीक्षण में गहराई से हैं, mock मॉड्यूल की क्रिया -> प्रतिस्पर्धात्मक दृष्टिकोण प्रतिस्पर्धी पुस्तकालयों के रिकॉर्ड से अधिक पाइथोनिक है -> प्रतिमान प्रतिलिपि।

  • requests साफ एपीआई मैंने कभी देखा है, जिस तरह से से httplib + urllib + urllib2 बेहतर से एक है।

  • JSON और YAML अधिक पायथनिक than XML हैं।

    • JSON-RPC XMLRPC या कंपकंपी सोप की तुलना में अधिक pythonic है।

    • ElementTree डोम से कहीं अधिक पायथनिक एपीआई है। .text वाले टैग के लिए अनुकूलन करके या बच्चे इसे XML < -> डेटा संरचनाओं प्रतिबाधा विसंगति को कम कर देते हैं (लेकिन .tail हैक के माध्यम से मिश्रित सामग्री को राउंड-ट्रिप कर सकते हैं)।

  • Scapy भेजने और नेटवर्क पैकेट चीर-फाड़ के लिए एक आश्चर्यजनक संक्षिप्त रूपरेखा है।

  • मेरा मानना ​​है कि Storm सबसे pythonic वस्तु संबंधपरक मानचित्रण वहाँ बाहर है। अस्वीकरण: मुझे ओआरएम के साथ लगभग कोई अनुभव नहीं है।

  • heapq एक खूबसूरती से कार्यान्वित मॉड्यूल है। बस कोड पढ़ें।

  • itertools बहुत शक्तिशाली है। दस्तावेज में सभी उदाहरण पढ़ें।
    विचार अलग-अलग हो पर का उपयोग कर, चाहे वह बड़े पैमाने पर pythonic है या एक अजीब बोली :-)

पढ़ें "क्या अजगर में नया क्या है", आप उपयोग कर रहे कम से कम पिछले संस्करण के लिए। कुछ पीईपी पढ़ें। को समझें क्यों परिवर्तन एक सुधार हैं।

अंत में, सुनिश्चित करें कि आप इंटरैक्टिव अजगर के सबसे बनाने के बनाते हैं। एपीआई सीखने का सबसे अच्छा तरीका उनको आज़माकर देखना है कि क्या होता है! dreampie IPython की जाँच,, bpython (नोटबुक सहित!) - मल्टी-लाइन संपादन, पूरा होने और आसान मदद() का उपयोग कर सकते सुविधाओं अत्यावश्यक है।

0

import this

आप अजगर की ज़ेन के बगल में अपने कोड डाल दिया और इसके बारे में अच्छा तुम वहाँ आधे रास्ते हैं महसूस कर सकते हैं। विडंबना का एक छोटा सा: इसके अलावा this.py मॉड्यूल की जाँच करें।

दूसरे आधे की तरह सामान के बारे में सीख रहा है: नियमित अभिव्यक्ति, सूची comprehensions, जनरेटर, मेटा वर्गों, तर्क खोल, सज्जाकार, सूची कदम, 'के साथ 'कथन, सशर्त असाइनमेंट, शक्तिशाली निर्मित इंस जैसे एन्यूमेरेट(), नक्शा(), जिप(), को कम(), किसी भी() और पॉव(), और कई अन्य (अधिक के लिए Hidden features of Python जांच)

जिस तरह से आप अन्य पढ़ सकते हैं साथ लोगों का कोड और इसे संशोधित करें।

Finnaly: "pythonic" लिंक के लिए जानें के बारे में finally और import antigravity

संबंधित मुद्दे