स्थिति तर्क बनाम कीवर्ड तर्क


81

के आधार पर इस

एक स्थिति तर्क एक ऐसा नाम है जिसका अनुसरण समान चिह्न (=) और डिफ़ॉल्ट मान से नहीं किया जाता है।

एक कीवर्ड तर्क का एक समान संकेत और एक अभिव्यक्ति का अनुसरण किया जाता है जो इसका डिफ़ॉल्ट मान देता है।

def rectangleArea(width, height):
    return width * height

print rectangleArea(width=1, height=2)

प्रश्न > मुझे लगता है कि दोनों widthऔर heightस्थितीय तर्क हैं। तो फिर हम इसे कीवर्ड तर्क सिंटैक्स के साथ भी क्यों कह सकते हैं?


1
"हम इसे कीवर्ड वास्तविक तर्क सिंटैक्स के साथ भी क्यों कह सकते हैं?" क्योंकि जिस तरह से भाषा काम करती है।
— S.Lott

जवाबों:


152

वह पाठ जो आप उद्धृत करते हैं, फ़ंक्शन की परिभाषा के लिए है और फ़ंक्शन के कॉल से कोई लेना-देना नहीं है। उस फ़ंक्शन के कॉल में , आप "नामित तर्क" सुविधा का उपयोग कर रहे हैं। वह लिंक जो आप प्रदान करते हैं वह बहुत अच्छी गुणवत्ता वाला नहीं है, लेखक दो अलग-अलग चीजों के बीच भ्रमित होते हैं।

पायथन संदर्भ केवल एक फ़ंक्शन ( अनुभाग5.3.4 Calls देखें ) के लिए कॉल के संबंध में स्थितीय और कीवर्ड तर्कों को संदर्भित करता है ।

जब वे अनुभाग7.6 Function definitions में एक फ़ंक्शन की परिभाषा के बारे में बात करते हैं , तो यह पूरी तरह से अलग शब्द "डिफ़ॉल्ट पैरामीटर मान" है।

मुझे उन लोगों पर संदेह है जो उस कोर्स-वेयर को एक साथ रखते हैं, वे पायथन से पूरी तरह परिचित नहीं थे :-)


उदाहरण के अनुसार, निम्नलिखित परिभाषा और कॉल को देखें:

def fn (a, b, c = 1):          # a/b required, c optional.
    return a * b + c

print fn (1, 2)                # returns 3, positional and default.
print fn (1, 2, 3)             # returns 5, positional.
print fn (c = 5, b = 2, a = 2) # returns 9, named.
print fn (b = 2, a = 2)        # returns 5, named and default.
print fn (5, c = 2, b = 1)     # returns 7, positional and named.
print fn (8, b = 0)            # returns 1, positional, named and default.

=परिवर्तनों का अर्थ , यह निर्भर करता है कि यह परिभाषा में है या कॉल में।

परिभाषा में, यह तर्क को वैकल्पिक करता है और डिफ़ॉल्ट मान सेट करता है।

कॉल में, यह आपको यह निर्दिष्ट करने की अनुमति देता है कि आपको कौन से तर्क चाहिए, जो भी आप चाहते हैं।


36

चूँकि अजगर 3.8 ने केवल स्थैतिक तर्क प्रस्तुत किए थे, इसलिए इस पोस्ट को अपडेट की आवश्यकता है

स्थिति संबंधी तर्क, कीवर्ड तर्क, आवश्यक तर्क और वैकल्पिक तर्क अक्सर भ्रमित होते हैं। स्थिति संबंधी तर्क समान तर्क के रूप में आवश्यक नहीं हैं । और कीवर्ड तर्क वैकल्पिक तर्क के रूप में समान नहीं हैं ।

स्थिति संबंधी तर्क वे तर्क हैं जिन्हें फ़ंक्शन परिभाषा में अपनी स्थिति से बुलाया जा सकता है।

कीवर्ड तर्क वे तर्क होते हैं जिन्हें उनके नाम से पुकारा जा सकता है।

आवश्यक तर्क वे तर्क हैं जो फ़ंक्शन को पास किए जाने चाहिए।

वैकल्पिक तर्क वे तर्क हैं जिन्हें फ़ंक्शन में पारित नहीं किया जा सकता है। अजगर में वैकल्पिक तर्क वे तर्क होते हैं जिनका डिफ़ॉल्ट मान होता है ।

स्थितिगत तर्क जो वैकल्पिक है (अजगर 3.8)

def f(a=2, /):
    pass


f()  # Allowed, argument is optional
f(1)  # Allowed, it's a positional argument
f(a=1)  # Error, positional only argument

स्थिति संबंधी तर्क की आवश्यकता है (अजगर 3.8)

def f(a, /):
    pass


f()  # Error, argument required
f(1)  # Allowed, it's a positional argument
f(a=1)  # Error, positional only argument

कीवर्ड तर्क जो वैकल्पिक है

def f(*, a=1):
    pass


f()  # Allowed
f(1)  # Error, keyword only arguments
f(a=1)  # Allowed, it's a keyword argument

कीवर्ड तर्क जो आवश्यक है

def f(*, a)
    pass


f()  # Error, argument required
f(1)  # Error, keyword only arguments
f(a=1)  # Allowed, it's a keyword argument

स्थिति और कीवर्ड तर्क वैकल्पिक है

def f(a=1)
    pass


f()  # Allowed, argument is optional
f(1)  # Allowed, it's a positional argument
f(a=1)  # Allowed, it's a keyword argument

# In fact this function is the same as
def f(*, a=1, /):
    pass

स्थिति और कीवर्ड तर्क की आवश्यकता है

def f(a):
    pass


f()  # Error, argument required
f(1)  # Allowed, it's a positional argument
f(a=1)  # Allowed, it's a keyword argument

# In fact this function is the same as
def f(*, a, /):
    pass

निष्कर्ष, एक तर्क वैकल्पिक हो सकता है या एक ही समय में दोनों की आवश्यकता नहीं है । यह एक ही समय में स्थितीय, कीवर्ड या दोनों भी हो सकता है ।

पायथन 3.8 ने केवल परिधीय मापदंडों को पेश किया ।

def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument):
    pass

क्या आपके अंतिम दो उदाहरणों के f(/,a,*)बजाय आपका मतलब था f(*, a, /)?
— जगरबेर48

21

एक कीवर्ड तर्क एक डिफ़ॉल्ट मान के साथ सिर्फ एक स्थितिगत तर्क है। आपको उन सभी तर्कों को निर्दिष्ट करना होगा जिनका डिफ़ॉल्ट मान नहीं है। दूसरे शब्दों में, कीवर्ड तर्क केवल "वैकल्पिक" हैं क्योंकि वे विशेष रूप से आपूर्ति नहीं किए जाने पर उनके डिफ़ॉल्ट मान पर सेट होंगे।


ठीक है जो समझ में आता है, लेकिन क्या आप इस पर अधिक विस्तार कर सकते हैं कि इसे "कीवर्ड" तर्क क्यों कहा जाता है? मुझे पता है कि "स्थिति" तर्क का मतलब है कि जब आप फ़ंक्शन को कॉल करते हैं तो उनकी स्थिति मायने रखती है।
— NoName

3

स्थिति संबंधी तर्कों को क्रम में मूल्यों का उपयोग करके या प्रत्येक का नामकरण करके कहा जा सकता है। उदाहरण के लिए, निम्नलिखित तीनों एक ही तरीके से काम करेंगे:

def rectangleArea(width, height):
    return width * height

print(rectangleArea(1, 2))
print(rectangleArea(width=1, height=2))
print(rectangleArea(height=2, width=1))

मुझे नहीं लगता कि यह सही है। यहां पाइथन की आधिकारिक शब्दावली के अनुसार , स्थितीय तर्क एक तर्क है जो एक कीवर्ड तर्क नहीं है। कीवर्ड तर्क की परिभाषा name=एक फ़ंक्शन कॉल में एक पहचानकर्ता (जैसे ) से पहले दिए गए तर्क है या पूर्वकाल में एक शब्दकोश में एक मूल्य के रूप में पारित किया गया है **। ये दो परिभाषाएँ आपके उदाहरण के विपरीत हैं।
— राफेल

1

स्थैतिक तर्क: तर्क सही स्थितिगत क्रम में एक कार्य के लिए पारित कर दिया। नीचे कार्यक्रम एक फ़ंक्शन की स्थिति संबंधी तर्कों को समझते हैं

#positional arguments example
def combine(str1, str2):
#To join str1 and str2 with str3
    str3 = str1 + str2
    print(str3)

#call combine() and pass 2 strings
combine("Well", "come")   #positional arguments 

मान लीजिए, हमने 'पहले', 'अच्छी तरह से' दूसरे स्थान पर उत्तीर्ण किया, तो परिणाम कॉमवेल होगा। इसके अलावा, फ़ंक्शन को कॉल करें 3 स्ट्रिंग्स त्रुटि हो जाती है।


0

किसी फ़ंक्शन के कीवर्ड तर्क को समझें।

कीवर्ड तर्क वे तर्क हैं जो अपने नाम से मापदंडों की पहचान करते हैं।

#keyword arguments example: 
def employee(name, Id):
    print("Employee Name: ", name)
    print("Employee Id  : ", Id)
#call employee() and pass 2 arguments
employee(name = "inban", Id = "pay001")
employee(Id = "pay002", name = "karthik") #we can change the order args.

0

यहां मापदंडों और तर्कों को परिभाषित करने से मदद मिल सकती है।

  1. पैरामीटर: फ़ंक्शन / विधि परिभाषा में एक नामित इकाई जो एक तर्क निर्दिष्ट करती है।
  2. तर्क: एक फ़ंक्शन को दिया गया मान।

उदाहरण के लिए,

def my_function(parameter_1, parameter_2):
    pass

my_function(argument_1, argument_2)

अब जब आप स्थिति संबंधी तर्क कहते हैं, तो आप तर्कों के बारे में बात कर रहे हैं , इसलिए फ़ंक्शन की परिभाषा से कोई लेना-देना नहीं है। widthऔर heightआपके उदाहरण में स्थितीय पैरामीटर या कीवर्ड पैरामीटर (तथाकथित स्थितीय-या-कीवर्ड पैरामीटर) हैं।

आप फ़ंक्शन को कॉल / मान कैसे दे रहे हैं यह निर्धारित करता है कि क्या वे स्थितीय तर्क या कीवर्ड तर्क हैं ।

rectangleArea(1, 2) # positional arguments
rectangleArea(width=1, height=2) # keyword arguments

बहुत से लोगों को पता नहीं है कि आप /पैरामीटर सूची ( यहां से उदाहरण ) का उपयोग करके एक स्थिति-केवल पैरामीटर निर्दिष्ट कर सकते हैं ।

def func(positional_only1, positional_only2, /, positional_or_keyword): ...

इसी तरह, आप *वर्ण का उपयोग करके कीवर्ड-केवल पैरामीटर भी कर सकते हैं ।

def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...

अंत में, हमारे पास क्रमशः var-positional और var-keyword (aka * args और ** kwargs) हैं। मतलब, आपके पास फ़ंक्शन के लिए पास किए गए स्थितीय तर्क या कीवर्ड तर्क के मनमाने अनुक्रम हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.