नमस्ते मैंने अभी कुछ दिन पहले खुद को पायथन पढ़ाना शुरू किया था और अभी मैं वास्तव में "।" के उपयोग के बारे में भ्रमित हो गया हूं। कॉल करते समय विधि/कार्य। जब def एक वर्ग के भीतर बनाया जाता है, तो यह एक "विधि" होगी, जहां आपको इसे "उदाहरण का नाम" टाइप करके कॉल करना होगा। विधि का नाम () यह समझ में आता है क्योंकि पहला तर्क " self" बनाए गए उदाहरण से जुड़ा है।

हालांकि, Numpy का उपयोग करते समय मुझे "फ़ंक्शन" np.random.rand() का सामना करना पड़ा यह कैसे संभव है? इस फ़ंक्शन के पहले से ही दो उद्देश्य हैं (एनपी, यादृच्छिक)। केवल दो तत्वों "पैकेज (वर्ग)" और "मॉड्यूल (डीईएफ़)" का उपयोग करते समय इसे कैसे बनाया जा सकता है। क्या करता है "।" मतलब इस समारोह में? शुक्रिया

-1
Leo Ryuta Unoki 29 मार्च 2018, 12:33

3 जवाब

सबसे बढ़िया उत्तर

पायथन में, जावा की तरह, कक्षाओं को परिभाषित करना संभव है। कक्षाएं एक अवधारणा का प्रतिनिधित्व करती हैं जिसे आप अपने कोड में शामिल करना चाहते हैं। उदाहरण के लिए, कल्पना करें कि आप एक person क्लास बनाते हैं, जहां आप नाम और ऊंचाई को स्टोर करना चाहते हैं। एक बहुत ही सरल कार्यान्वयन हो सकता है:

class person:
    def __init__(self, name, height):
        self.name = name
        self.height = height

    def grow_up(self, cm):
        self.height += cm
        return

इस मामले में, __init__(self, name, height) और grow_up(self, cm) विधियां हैं: उन्हें एक वर्ग के अंदर परिभाषित किया गया है और वे पहले तर्क self के रूप में लेते हैं, अर्थात, स्वयं वर्ग का उदाहरण। कक्षा का एक उदाहरण, इस उदाहरण में, कोई एक व्यक्ति है जिसे आप इस वर्ग से संबद्ध करते हैं। उदाहरण के लिए

a = person("John", 120)

अब, a वर्ग व्यक्ति का एक उदाहरण है और तर्क "John" और 120 को विशेष प्रारंभकर्ता विधि __init__ में पास कर दिया गया है। यदि आप a.height पर कॉल करते हैं तो आपको 120 प्राप्त होंगे। (क्या आपको इसके लिए गेटटर का उपयोग करना चाहिए? शायद हाँ, शायद नहीं, लेकिन यह आपके प्रश्न का विषय नहीं है)

grow_up विधि का उपयोग करना टाइपिंग जितना आसान है

a.grow_up(10)

a.height को फिर से कॉल करने पर अब आपको 130 मिलते हैं।

किसी फ़ंक्शन को किसी वर्ग के अंदर परिभाषित नहीं किया जाता है, इसलिए, इसमें self चर नहीं हो सकता। हालांकि, इसे def कमांड के साथ समान रूप से परिभाषित किया गया है, जो कुछ भ्रम पैदा कर सकता है। शुरुआती लोगों के लिए चीजों को और अधिक अस्पष्ट बनाने के लिए, पायथन मॉड्यूल और पैकेज को परिभाषित करता है। एक मॉड्यूल एक फ़ाइल में संग्रहीत कार्यों का एक संग्रह है, और एक पैकेज एक निर्देशिका है जिसमें एक या अधिक ऐसे मॉड्यूल होते हैं। नेमस्पेस को नेविगेट करने का मानक तरीका क्लास फ़ंक्शंस के समान है: पैकेज, मॉड्यूल और फ़ंक्शंस को अलग करने के लिए एक डॉट (.) का उपयोग करके, सबसे बाहरी से अंतरतम स्तर तक।

0
Gianluca Micchi 29 मार्च 2018, 10:02

पैकेज np, पैकेज random और फ़ंक्शन rand प्रभावी रूप से पायथन ऑब्जेक्ट हैं। वस्तुओं में विशेषताएँ हो सकती हैं और आप उन्हें डॉट नोटेशन के साथ एक्सेस कर सकते हैं और यह श्रृंखला (obj.attr1.attr2...attrN) लंबी हो सकती है।

तो आपके उदाहरण में आप पैकेज np की विशेषता random की विशेषता rand का उपयोग करते हैं, और चूंकि rand एक कॉल करने योग्य वस्तु है, आप इसे rand() के साथ कहते हैं।

0
Ivan Vinogradov 29 मार्च 2018, 09:53

आप जिस rand() फ़ंक्शन का उपयोग करना चाहते हैं, वह numpy पैकेज के random मॉड्यूल का हिस्सा है। पैकेज और नेमस्पेस संरचना में गहराई तक जाने के बिना, यह एक त्वरित उदाहरण है कि यह क्यों मायने रखता है:

यदि आप पैकेज आयात करते हैं, तो आप अपने नामस्थान में अतिरिक्त फ़ंक्शन, कक्षाएं और संरचनाएँ लोड करते हैं। लेकिन हो सकता है कि आप math और numpy का उपयोग करना चाहें, जिनमें दोनों का एक sin()-फ़ंक्शन है:

import numpy as np
import math
a = np.sin()
b = math.sin()

a और b एक ही फ़ंक्शन नहीं हैं, लेकिन एक ही नाम है, इसलिए उन्हें युक्त पैकेज के नाम से कॉल करना उपयोगी है।

वही मानक sum() और np.sum() पर लागू होता है।

यदि आप स्पष्ट रूप से rand() फ़ंक्शन को पूरे नाम से पुकारे बिना उपयोग करना चाहते हैं, तो आप ऐसा कर सकते हैं numpy.random आयात रैंड से

1
Niklas Mertsch 29 मार्च 2018, 09:54