अजगर कुछ जगहों पर एक सुंदर और रहस्यमय भाषा है। और यहां तक कि इसे बहुत अच्छी तरह से जानने के बाद, जल्दी या बाद में आप अपने लिए कुछ ऐसा पाएंगे जो आपने पहले इस्तेमाल नहीं किया है। यह पोस्ट भाषा के कुछ विवरणों को दर्शाती है जिन पर कई लोग ध्यान नहीं देते हैं। मुझे तुरंत कहना चाहिए: कई उदाहरण अव्यावहारिक हैं, लेकिन, इसलिए, कम दिलचस्प नहीं है। साथ ही, कई उदाहरण एक अनचाही शैली का प्रदर्शन करते हैं, लेकिन मैं नए मानकों का ढोंग नहीं करता - मैं सिर्फ यह दिखाना चाहता हूं कि इस तरह क्या हो सकता है।
1. एक असीम रूप से नेस्टेड सूची>>> a = [1, 2, 3, 4] >>> a.append(a) >>> a [1, 2, 3, 4, [...]] >>> a[4] [1, 2, 3, 4, [...]] >>> a[4][4][4][4][4][4][4][4][4][4] == a True
शब्दकोशों के साथ भी यही:
>>> a = {} >>> b = {} >>> a['b'] = b >>> b['a'] = a >>> print a {'b': {'a': {...}}}
2. सूची प्रारूपण >>> l = [[1, 2, 3], [4, 5], [6], [7, 8, 9]] >>> sum(l, []) [1, 2, 3, 4, 5, 6, 7, 8, 9]
सूची जनरेटर (
धन्यवाद मैजिक 4x ):
[y for x in data for y in x]
वैकल्पिक लेकिन लंबे विकल्प (
धन्यवाद मोनोलिथेड ):
import itertools data = [[1, 2, 3], [4, 5, 6]] list(itertools.chain.from_iterable(data))
from functools import reduce from operator import add data = [[1, 2, 3], [4, 5, 6]] reduce(add, data)
3. शब्दकोश जनरेटरकई लोग सूची जनरेटर के बारे में जानते हैं, लेकिन शब्दकोश जनरेटर के बारे में क्या?
>>> {a:a**2 for a in range(1, 10)} {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
4. वन-टाइम क्लास फंक्शनमामले में आपको एक फ़ंक्शन की आवश्यकता होती है जिसे केवल एक बार उपयोग किया जाएगा, जिसके बाद एक और फ़ंक्शन का उपयोग किया जाएगा:
class foo: def normal_call(self): print("normal_call") def call(self): print("first_call") self.call = self.normal_call
>>> y = foo() >>> y.call() first_call >>> y.call() normal_call >>> y.call() normal_call
5. वर्ग गुण प्राप्त करना class GetAttr(object): def __getattribute__(self, name): f = lambda: "Hello {}".format(name) return f
>>> g = GetAttr() >>> g.Mark() 'Hello Mark'
6. सेट पर संचालनसेट - एक सेट जिसमें कोई दोहराए जाने वाले तत्व नहीं हैं:
>>> a = set([1,2,3,4]) >>> b = set([3,4,5,6]) >>> a | b
निर्धारित सेट के बिना, ये ऑपरेशन काम नहीं करेंगे। जब तक यह एक सेट जनरेटर नहीं है (
ZyXI के लिए धन्यवाद ):
{ x for x in range(10)}
7. तुलनात्मक संचालक >>> x = 5 >>> 1 < x < 10 True >>> 10 < x < 20 False >>> x < 10 < x*10 < 100 True >>> 10 > x <= 9 True >>> 5 == x > 4 True
8. गतिशील रूप से नई कक्षाएं बनाना >>> NewType = type("NewType", (object,), {"x": "hello"}) >>> n = NewType() >>> nx 'hello'
हमेशा की तरह एक ही विकल्प:
>>> class NewType(object): >>> x = "hello" >>> n = NewType() >>> nx "hello"
9. शब्दकोशों में KeyError अपवाद को दबानाशब्दकोशों में एक
.get () विधि है। सामान्य स्थिति में, यदि आप गैर-मौजूद कुंजी
name_dict ['key'] कहते हैं , तो आपको KeyError अपवाद मिलेगा। हालाँकि, यदि आप
d.get ('कुंजी') विधि के माध्यम से कुंजी कहते हैं, तो कोई अपवाद नहीं होगा, और यदि कोई कुंजी नहीं है, तो शब्दकोश कोई नहीं लौटाएगा। यदि आप लापता कुंजी के बजाय एक चर असाइन करना चाहते हैं, तो आप एक दूसरा पैरामीटर असाइन कर सकते हैं:
d.get ('कुंजी', 0) ।
संख्यात्मक कुंजियों की गणना करते समय इसका सबसे अच्छा उपयोग किया जाता है:
sum[value] = sum.get(value, 0) + 1
10. डिक्शनरी में सूची में जोड़नायदि आपको कई प्रमुख मूल्यों को संग्रहीत करने की आवश्यकता है, तो आप उन्हें एक सूची में संग्रहीत कर सकते हैं:
>>> d = {} >>> a, b = 4, 5 >>> d[a] = list() >>> d {4: []} >>> d[a].append(b) >>> d {4: [5]}
11. हालत से चर का असाइनमेंट x = 1 if (y == 10) else 2
12. चर में मानों को खोलनायदि मान निर्दिष्ट करते समय अधिक चर हैं, तो चर नाम की शुरुआत में तारांकन चिह्न जोड़ें और शेष चर इसे (केवल पायथन 3.x) को सौंपा जाएगा:
>>> first,second,*rest = (1,2,3,4,5,6,7,8) >>> first
>>> first,*rest,last = (1,2,3,4,5,6,7,8) >>> first 1 >>> rest [2, 3, 4, 5, 6, 7] >>> last 8
13. सूची मदों की संख्या >>> l = ["spam", "ham", "eggs"] >>> list(enumerate(l)) >>> [(0, "spam"), (1, "ham"), (2, "eggs")] >>> list(enumerate(l, 1))
14. अपवादों में अन्य का उपयोग करनाAnimeshneG को ठीक करने के लिए धन्यवाद
try: function() except Error:
15. सूची की एक प्रति बनानासामान्य विधि का उपयोग करते हुए प्रतिलिपि बनाते समय, निम्नलिखित होगा:
>>> x = [1, 2, 3] >>> y = x >>> y[2] = 5 >>> y [1, 2, 5] >>> x [1, 2, 5]
सही विकल्प:
>>> x = [1,2,3] >>> y = x[:] >>> y.pop() 3 >>> y [1, 2] >>> x [1, 2, 3]
नेस्टेड सूचियों \ शब्दकोशों की प्रतिलिपि करें (
धन्यवाद डेनिस्बल्यको )
import copy my_dict = {'a': [1, 2, 3], 'b': [4, 5, 6]} my_copy_dict = copy.deepcopy(my_dict)
16. नंबर के लिएएक लूप के माध्यम से आउटपुट करते समय तत्वों की
गणना करने के लिए,
एन्यूमरेट विधि का उपयोग करें
>>> l = ['a', 'b', 'c', 'd', 'e'] >>> for i, value_list in enumerate(l, 1):
17. कार्य दोषडिफ़ॉल्ट रूप से गलत तर्कों के लिए कार्यों को असाइन करने के परिणामस्वरूप कुछ इस तरह हो सकता है:
>>> def foo(x=[]): ... x.append(1) ... print x ... >>> foo() [1] >>> foo() [1, 1]
इसके बजाय, डिफ़ॉल्ट रूप से कोई भी तर्क सेट करें:
>>> def foo(x=None): ... if x is None: ... x = [] ... x.append(1) ... print x >>> foo() [1] >>> foo() [1]
18. शब्दकोशों के लिए __missing__ विधि__Missing__ मेथड एक त्रुटि के बजाय अनुरोधित कुंजी का नाम लौटाकर KeyError को समाप्त करता है।
class MyDict(dict):
19. सज्जाकारसज्जाकार आपको एक फ़ंक्शन को दूसरे के साथ लपेटने की अनुमति देते हैं, इसमें कार्यक्षमता जोड़ते हैं। डेकोरेटर को फ़ंक्शन के ऊपर एक लाइन चिह्नित करने के लिए, आप "@" चिह्न और फ़ंक्शन का नाम लिखते हैं। उदाहरण:
>>> def print_args(function): >>> def wrapper(*args, **kwargs): >>> print ' : ', args, kwargs >>> return function(*args, **kwargs) >>> return wrapper >>> @print_args >>> def write(text): >>> print text >>> write('foo') Arguments: ('foo',) {} foo
केवल प्रलेखन आसान समझा सकता है:
@f1(arg) @f2 def func(): pass
कोड के बराबर
def func(): pass func = f1(arg)(f2(func))
20. चर के बीच मूल्यों का आदान-प्रदान >>> a = 10 >>> b = 5 >>> a, b (10, 5) >>> a, b = b, a >>> a, b (5, 10)
21. प्रथम श्रेणी के कार्य >>> def jim(phrase): ... return 'Jim says, "%s".' % phrase >>> def say_something(person, phrase): ... print person(phrase) >>> say_something(jim, 'hey guys')
उच्च-क्रम के कार्य (
एंड्री_सोलोमैटिन के लिए धन्यवाद ):
22. नकारात्मक दौर >>> round(1234.5678, -2) 1200.0 >>> round(1234.5678, 2) 1234.57
23. ज़ेन पायथन import this
24. स्टाइल सी यानी का उपयोग करना {} इंडेंटेशन के बजाययह बुराई हो सकती है, लेकिन यदि आप क्षेत्रों को इंगित करने के लिए इंडेंटेशन के बजाय कोष्ठक {} का उपयोग करना चाहते हैं:
from __future__ import braces
25. सूची स्लाइस में कदम a = [1,2,3,4,5] >>> a[::2]
-1 का मान
रिवर्स मेथड के बराबर है - सूची को सम्मिलित करता है:
>>> a[::-1]
26. एक ब्राउज़र में एक टैब खोलनाडिफ़ॉल्ट ब्राउज़र में निर्दिष्ट पते के साथ एक टैब खोलता है।
import webbrowser webbrowser.open_new_tab('http://habrahabr.ru/')
27. ज़िप । विलय सूची a = [(1,2), (3,4), (5,6)] zip(*a)
एक शब्दकोश में दो सूचियों को मिलाएं:
>>> t1 = (1, 2, 3) >>> t2 = (4, 5, 6) >>> dict (zip(t1,t2)) {1: 4, 2: 5, 3: 6}
28. सूचियों में स्लाइस और उनके साथ काम करना >>> a = range(10) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a[:5] = [42]
29. एक शब्दकोश कुंजी में कई तत्वों का भंडारणयदि आपको कुंजी में एक से अधिक तत्व असाइन करने की आवश्यकता है, तो उन्हें सूची में संग्रहीत करना बेहतर है:
>>> m = {} >>> m.setdefault('foo', []).append(1) >>> m {'foo': [1]} >>> m.setdefault('foo', []).append(2) >>> m {'foo': [1, 2]}
30. अंतिम और सबसे महत्वपूर्णसब कुछ अज्ञात के लिए,
दस्तावेज़ पढ़ें! एक और बाइक इकट्ठा न करें - आपका कोड अभी भी किसी के द्वारा पढ़ा जा सकता है। कोई भी पुस्तक प्रलेखन की पूर्णता को प्रतिबिंबित नहीं कर सकती है, और अजगर का प्रलेखन उत्कृष्ट है।
युपीडी:31. @ एलेक्स 222 |
टिप्पणी import antigravity
32. टैनेन |
टिप्पणीएक और लूप में उपयोग करना:
>>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print n, 'equals', x, '*', n/x ... break ... else: ...
33. अखंड |
टिप्पणीहम पहला कार्यक्रम लिखते हैं - "हैलो वर्ल्ड!"
import __hello__
34. एंडरसनडुनाई |
टिप्पणीआदेश दिया या छँटाई शब्दकोशों:
>>>
35. एंडरसनडुनाई |
टिप्पणीस्व .__ वर्ग__ (
अधिक ) के माध्यम से कक्षा के भीतर से मक्खी पर किसी वस्तु के वर्ग को बदलना
बिंदु में मामला (
धन्यवाद dmitriko ):
class Worm: def creep(self): print("i am creeping") class Butterfly: def fly(self): print("i am flying") creature = Worm() creature.creep() creature.__class__ = Butterfly creature.fly()
36. skovorodkin |
टिप्पणीतत्वों की संख्या की गिनती (उदाहरण में, एक शब्द में अक्षरों की संख्या):
from collections import Counter Counter('habrahabr')
37. जोर लगानामुखर एक विशेष निर्माण है जो आपको कार्यक्रम के किसी भी स्थान पर मनमाने डेटा के मूल्यों के बारे में मान्यताओं की जांच करने की अनुमति देता है। यह डिज़ाइन परीक्षण / डिबगिंग कोड के लिए उपयोग किया जाता है, उदाहरण के लिए, आप निम्नलिखित निर्देश लिख सकते हैं:
assert x>y
और यदि यह निर्देश गलत है, तो मान लिया जाए कि मान लिया जाए। वास्तव में, यह निर्देश
assert <test>, <data>
यह इस के बराबर है:
if __debug__: if not <test>: raise AssertationError, <data>
पीडीएफ में टिप्पणी पृष्ठ सहेजेंयदि आपके पास Google Chrome है - तो बस प्रिंट करें -> "पीडीएफ में सहेजें" प्रिंटर पर क्लिक करें। अन्य ब्राउज़रों में इसी तरह की सुविधा के लिए, मुझे नहीं पता।
अगर आपके पास क्रोम नहीं हैdoPDF हाइब्रिड मेनू को छोटा करता है, और टिप्पणियाँ छोड़ता है। हाबरा पेज को मेनू के बिना प्रिंट करने के लिए भेजा गया है, इसलिए कोई भी वर्चुअल प्रिंटर उपयुक्त है। नतीजतन, हमारे पास एक पठनीय पीडीएफ फाइल है। बहुत सहज है। डाउनलोड करें, प्रिंटर के बजाय इंस्टॉल करें और प्रिंट करने के लिए भेजें। (तब और धन्यवाद कहें)।