পাইথনে প্যারামিটারগুলির জোর করে নামকরণ


111

পাইথনে আপনার ফাংশন সংজ্ঞা থাকতে পারে:

def info(object, spacing=10, collapse=1)

যা নিম্নলিখিত যে কোনও উপায়ে বলা যেতে পারে:

info(odbchelper)                    
info(odbchelper, 12)                
info(odbchelper, collapse=0)        
info(spacing=15, object=odbchelper)

পাইথনের যেকোন অর্ডার যুক্তির অনুমতি দেওয়ার জন্য ধন্যবাদ, যতক্ষণ তারা নাম দেওয়া হয়েছে।

আমাদের যে বৃহত্তর ফাংশনগুলি বাড়ছে আমাদের সমস্যাটি হ'ল, লোকেদের মধ্যে পরামিতি যুক্ত হতে পারে spacingএবং এর collapseঅর্থ হ'ল ভুল মানগুলি প্যারামিটারগুলিতে যেতে পারে যা নাম নয়। এছাড়াও কখনও কখনও এটি ভিতরে প্রবেশ করা দরকার তা সবসময় পরিষ্কার হয় না We আমরা কোনও কোডিং স্ট্যান্ডার্ড নয়, আদর্শভাবে একটি পতাকা বা পাইদেব প্লাগইন - কিছু প্যারামিটারের নামকরণে লোকদের বাধ্য করার উপায় পরেছি?

উপরের 4 টি উদাহরণে, সমস্ত পরামিতিগুলির নাম হিসাবে কেবল শেষগুলি চেকটি পাস করবে।

প্রতিক্রিয়া হ'ল আমরা কেবল এটি নির্দিষ্ট ফাংশনগুলির জন্য চালু করব, তবে কীভাবে এটি বাস্তবায়ন করা যায় - বা এটি এমনকি সম্ভব হলে কোনও প্রশংসা করা হবে any

উত্তর:


214

পাইথন 3 - হ্যাঁ, আপনি *যুক্তি তালিকায় নির্দিষ্ট করতে পারেন ।

ডক্স থেকে :

"*" বা "* সনাক্তকারী" এর পরে প্যারামিটারগুলি কী-ওয়ার্ড-প্যারামিটার এবং কেবল ব্যবহৃত কীওয়ার্ড আর্গুমেন্টই পাস হতে পারে।

>>> def foo(pos, *, forcenamed):
...   print(pos, forcenamed)
... 
>>> foo(pos=10, forcenamed=20)
10 20
>>> foo(10, forcenamed=20)
10 20
>>> foo(10, 20)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() takes exactly 1 positional argument (2 given)

এটির সাথে একত্রিতও হতে পারে **kwargs:

def foo(pos, *, forcenamed, **kwargs):

31

আপনি পাইথন 3-এ নিম্নলিখিত পদ্ধতিতে কোনও ফাংশন সংজ্ঞায়িত করে লোকদের কীওয়ার্ড আর্গুমেন্ট ব্যবহার করতে বাধ্য করতে পারেন।

def foo(*, arg0="default0", arg1="default1", arg2="default2"):
    pass

কোনও নাম ছাড়াই প্রথম যুক্তিটিকে একটি স্থিতিগত যুক্তি দিয়ে আপনি ফাংশনটি কল করে এমন প্রত্যেককে কীওয়ার্ড আর্গুমেন্ট ব্যবহার করতে বাধ্য করেন যা আমার মনে হয় আপনি যা জিজ্ঞাসা করেছিলেন তা। পাইথন 2-তে এটি করার একমাত্র উপায় হ'ল এই জাতীয় ক্রিয়াটি সংজ্ঞায়িত করা

def foo(**kwargs):
    pass

এটি কলারকে কাওয়ার্গস ব্যবহার করতে বাধ্য করবে কিন্তু সমাধানের এত বড় বিষয় নয় যেহেতু আপনার তখন প্রয়োজনীয় যুক্তি মেনে নিতে কেবল একটি চেক রাখতে হবে।


11

সত্য, বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি ফাংশন কল চুক্তির পরামিতি ক্রমের অংশ তৈরি করে, তবে এটি হওয়ার দরকার নেই । কেন হবে? প্রশ্নটি সম্পর্কে আমার বোঝাপড়াটি হ'ল, যদি পাইথন এই ক্ষেত্রে অন্যান্য প্রোগ্রামিং ভাষার চেয়ে আলাদা হয়। পাইথন 2 এর অন্যান্য ভাল উত্তরের পাশাপাশি, দয়া করে নিম্নলিখিতটি বিবেচনা করুন:

__named_only_start = object()

def info(param1,param2,param3,_p=__named_only_start,spacing=10,collapse=1):
    if _p is not __named_only_start:
        raise TypeError("info() takes at most 3 positional arguments")
    return str(param1+param2+param3) +"-"+ str(spacing) +"-"+ str(collapse)

একজন কলকারী একমাত্র উপায় যে যুক্তিগুলি সরবরাহ করতে সক্ষম হবে spacingএবং collapseঅবস্থানগতভাবে (ব্যতিক্রম ব্যতীত) তা হ'ল:

info(arg1, arg2, arg3, module.__named_only_start, 11, 2)

ইতিমধ্যে অন্যান্য মডিউলগুলির সাথে সম্পর্কিত ব্যক্তিগত উপাদানগুলি ব্যবহার না করার কনভেনশনটি পাইথনের খুব মৌলিক। পাইথনের মতোই, পরামিতিগুলির জন্য এই সম্মেলনটি কেবল আধা-প্রয়োগ করা হবে।

অন্যথায়, কলগুলি ফর্মের হওয়া দরকার:

info(arg1, arg2, arg3, spacing=11, collapse=2)

ডাক

info(arg1, arg2, arg3, 11, 2)

প্যারামিটারে 11 মান নির্ধারণ করবে _pএবং ফাংশনের প্রথম নির্দেশে একটি ব্যতিক্রম উত্থাপিত হবে।

বৈশিষ্ট্য:

  • এর আগে প্যারামিটারগুলি _p=__named_only_startঅবস্থানগতভাবে (বা নামে) ভর্তি করা হয়।
  • পরের প্যারামিটারগুলি _p=__named_only_startকেবল নাম দ্বারা সরবরাহ করতে হবে (বিশেষ সেন্ডিনেল অবজেক্ট সম্পর্কে জ্ঞান না __named_only_startপাওয়া এবং ব্যবহার না করা) unless

পেশাদাররা:

  • প্যারামিটারগুলি সংখ্যা এবং অর্থগুলিতে স্পষ্ট হয় (পরে যদি ভাল নামগুলিও বেছে নেওয়া হয় অবশ্যই)।
  • যদি সেন্ডিনেলটি প্রথম প্যারামিটার হিসাবে নির্দিষ্ট করা থাকে, তবে সমস্ত আর্গুমেন্ট নাম দ্বারা নির্দিষ্ট করা দরকার।
  • ফাংশনটি কল করার সময়, __named_only_startসংশ্লিষ্ট অবস্থানে সেন্ডিনেল অবজেক্টটি ব্যবহার করে অবস্থান মোডে স্যুইচ করা সম্ভব ।
  • অন্যান্য বিকল্পের চেয়ে ভাল পারফরম্যান্সের প্রত্যাশা করা যেতে পারে।

কনস:

  • চেকিং রান-টাইমের সময় ঘটে, সংকলন-সময় নয়।
  • অতিরিক্ত প্যারামিটার ব্যবহার (যদিও তর্ক নয়) এবং একটি অতিরিক্ত চেক। নিয়মিত ক্রিয়াকলাপের ক্ষেত্রে ছোট কার্য সম্পাদনের অবক্ষয় respect
  • কার্যকারিতা হ'ল ভাষা দ্বারা সরাসরি সমর্থন ছাড়াই একটি হ্যাক (নীচের নোট দেখুন)।
  • ফাংশনটি কল করার সময়, __named_only_startসঠিক অবস্থানে সেন্ডিনেল বস্তুটি ব্যবহার করে অবস্থান মোডে স্যুইচ করা সম্ভব । হ্যাঁ, এটিকে প্রো হিসাবেও দেখা যেতে পারে।

দয়া করে মনে রাখবেন যে এই উত্তরটি কেবল পাইথন ২ এর জন্য বৈধ Py পাইথন 3 অন্যান্য উত্তরগুলিতে বর্ণিত অনুরূপ, তবে খুব মার্জিত, ভাষা-সমর্থনকারী প্রক্রিয়া প্রয়োগ করে।

আমি খুঁজে পেয়েছি যে আমি যখন নিজের মনটি খুলি এবং এটি সম্পর্কে চিন্তা করি তখন কোনও প্রশ্ন বা অন্যের সিদ্ধান্তকে বোকা, বোবা বা কেবল নির্বোধ বলে মনে হয় না। বিপরীতে: আমি সাধারণত অনেক কিছু শিখি।


"রান-সময় চলাকালীন সময়ে পরীক্ষা করা হয়, সংকলন-সময় নয়।" - আমি মনে করি এটি সমস্ত ফাংশন যুক্তি যাচাইয়ের ক্ষেত্রে সত্য। যতক্ষণ না আপনি ফাংশন আমন্ত্রণের রেখাটি কার্যকর করেন, আপনি সর্বদা জানেন না কোন ফাংশনটি কার্যকর করা হচ্ছে। এছাড়াও, +1 - এটি চালাক।
এরিক

@ এরিক: এটি ঠিক যে আমি স্থির চেক পছন্দ করতাম। তবে আপনি ঠিক বলেছেন: পাইথন মোটেই হত না। কোনও সিদ্ধান্তক বিন্দু না হলেও পাইথন 3 এর "*" কনস্ট্রাক্টটিও গতিশীলভাবে পরীক্ষা করা হয়। আপনার মন্তব্যের জন্য ধন্যবাদ.
মারিও রসি

এছাড়াও, আপনি যদি মডিউলটির পরিবর্তনশীল নাম _named_only_startরাখেন তবে এটি কোনও বাহ্যিক মডিউল থেকে রেফারেন্স করা অসম্ভব হয়ে ওঠে, যা একটি প্রো এবং শঙ্কা গ্রহণ করে। (মডিউল স্কোপে একক শীর্ষস্থানীয় আন্ডারস্কোরগুলি ব্যক্তিগত, আইআইআরসি)
এরিক

সেন্ডিনেলের নামকরণের বিষয়ে, আমরা একটি __named_only_startএবং একটি named_only_start(কোনও প্রাথমিক আন্ডারস্কোর) উভয়ই রাখতে পারি , দ্বিতীয়টি নামক মোডটি "প্রস্তাবিত" বলে নির্দেশিত করতে পারে তবে "সক্রিয়ভাবে প্রচারিত" হওয়ার স্তরে নয় (যেহেতু একটি জনসাধারণের এবং অন্যটি নয়)। _namesআন্ডারস্কোর দিয়ে শুরু করার "বেসরকারীতা" সম্পর্কে , এটি ভাষা দ্বারা খুব দৃ .়ভাবে প্রয়োগ করা হয় না: নির্দিষ্ট (অ-*) আমদানি বা যোগ্য নাম ব্যবহার করে সহজেই এটি নিষ্ক্রিয় করা যায়। এ কারণেই বেশ কয়েকটি পাইথন ডকুমেন্ট "বেসরকারী" এর পরিবর্তে "নন-পাবলিক" শব্দটি ব্যবহার করতে পছন্দ করে।
মারিও রসি

6

পাইথন 2 এবং পাইথন 3 উভয় ক্ষেত্রে কাজ করে এমনভাবে আপনি এটি করতে পারেন , "বোগাস" প্রথম কীওয়ার্ড আর্গুমেন্ট তৈরি করে একটি ডিফল্ট মান যা "প্রাকৃতিকভাবে" ঘটে না। এই কীওয়ার্ড আর্গুমেন্টটির আগে মূল্য ছাড়াই এক বা একাধিক তর্ক যুক্ত করা যেতে পারে:

_dummy = object()

def info(object, _kw=_dummy, spacing=10, collapse=1):
    if _kw is not _dummy:
        raise TypeError("info() takes 1 positional argument but at least 2 were given")

এটি অনুমতি দেবে:

info(odbchelper)        
info(odbchelper, collapse=0)        
info(spacing=15, object=odbchelper)

কিন্তু না:

info(odbchelper, 12)                

আপনি যদি ফাংশনটি এতে পরিবর্তন করেন:

def info(_kw=_dummy, spacing=10, collapse=1):

তারপরে সমস্ত যুক্তিগুলির কীওয়ার্ড থাকতে info(odbchelper)হবে এবং আর কাজ করবে না।

এটি আপনাকে শেষ কীওয়ার্ড যুক্তিটি _kwশেষ প্রবেশের পরে রাখার জন্য বাধ্য না করে যেকোন স্থানে অতিরিক্ত অবস্থানের অনুমতি দেবে । এটি প্রায়শই অর্থপূর্ণ হয়, উদাহরণস্বরূপ যুক্তিযুক্তভাবে জিনিসকে গোষ্ঠীভুক্ত করা বা বর্ণানুক্রমিকভাবে কীওয়ার্ডগুলি সাজানো রক্ষণাবেক্ষণ এবং বিকাশে সহায়তা করতে পারে।

সুতরাং def(**kwargs)আপনার স্মার্ট সম্পাদকটিতে স্বাক্ষর তথ্যটি ব্যবহার এবং হারাতে ফিরে যাওয়ার দরকার নেই । আপনার সামাজিক চুক্তিটি হ'ল কিছু তথ্য জোর করে (তাদের মধ্যে কিছু) কীওয়ার্ডের প্রয়োজন হয়, এগুলি যে ক্রমে উপস্থাপিত হয় তা অপ্রাসঙ্গিক হয়ে পড়ে।


2

হালনাগাদ:

আমি বুঝতে পারি যে ব্যবহার করা **kwargsসমস্যার সমাধান করবে না। যদি আপনার প্রোগ্রামাররা তাদের ইচ্ছামত ফাংশন আর্গুমেন্টগুলি পরিবর্তন করে, উদাহরণস্বরূপ, কেউ এটিতে ফাংশনটি পরিবর্তন করতে পারে:

def info(foo, **kwargs):

এবং পুরানো কোডটি আবার ভেঙে যাবে (কারণ এখন প্রতিটি ফাংশন কলকে প্রথম যুক্তিটি অন্তর্ভুক্ত করতে হবে)।

এটি সত্যিই ব্রায়ান যা বলে তাতে নেমে আসে।


(...) লোকেরা spacingএবং collapse(...) এর মধ্যে পরামিতি যুক্ত করতে পারে

সাধারণভাবে, ফাংশন পরিবর্তন করার সময়, নতুন যুক্তি সর্বদা শেষ হওয়া উচিত। অন্যথায় এটি কোডটি ভঙ্গ করে। সুস্পষ্ট হওয়া উচিত।
কেউ যদি ফাংশন পরিবর্তন করে যাতে কোডটি ভেঙে যায়, এই পরিবর্তনটি প্রত্যাখ্যান করতে হবে।
(ব্রায়ান যেমন বলেছেন, এটি চুক্তির মতো)

(...) কখনও কখনও এটি alwaysোকা উচিত কী তা সবসময় পরিষ্কার হয় না।

ফাংশনের স্বাক্ষর দিকে তাকিয়ে (অর্থাত def info(object, spacing=10, collapse=1)) এক অবিলম্বে দেখা উচিত যে প্রতি যুক্তি আছে যা না ডিফল্ট মান, বাধ্যতামূলক। যুক্তিটি
কীসের জন্য, তা ডকাস্ট্রিংয়ে যাওয়া উচিত।


পুরানো উত্তর (সম্পূর্ণতার জন্য রাখা) :

এটি সম্ভবত একটি ভাল সমাধান নয়:

আপনি এইভাবে কার্যগুলি সংজ্ঞায়িত করতে পারেন:

def info(**kwargs):
    ''' Some docstring here describing possible and mandatory arguments. '''
    spacing = kwargs.get('spacing', 15)
    obj = kwargs.get('object', None)
    if not obj:
       raise ValueError('object is needed')

kwargsএকটি অভিধান যা কোনও কীওয়ার্ড আর্গুমেন্ট ধারণ করে। বাধ্যতামূলক যুক্তি উপস্থিত রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন এবং যদি না থাকে তবে একটি ব্যতিক্রম বাড়াতে পারেন।

নেতিবাচক দিকটি হ'ল এটি আর সুস্পষ্ট নাও হতে পারে, যা যুক্তিগুলি সম্ভব, তবে একটি সঠিক ডক্ট্রিং দিয়ে, এটি ঠিক করা উচিত।


3
আমি আপনার পুরানো উত্তর ভাল পছন্দ করেছেন। আপনি কেবলমাত্র ফাংশনে ** কাওয়ারগুলি গ্রহণ করছেন কেন তা নিয়ে একটি মন্তব্য করুন। সর্বোপরি, যে কেউ সোর্স কোডে যে কোনও কিছু পরিবর্তন করতে পারে - আপনার সিদ্ধান্তের পিছনে উদ্দেশ্য এবং উদ্দেশ্য বর্ণনা করার জন্য আপনার ডকুমেন্টেশন প্রয়োজন।
ব্র্যান্ডন

এই উত্তরের কোন সত্যিকারের উত্তর নেই!
ফিল

2

পাইথন 3 কীওয়ার্ড-কেবল আর্গুমেন্টগুলি ( *) পাইথন 2.x দিয়ে সিমুলেটেড করা যায়**kwargs

নিম্নলিখিত পাইথন 3 কোডটি বিবেচনা করুন:

def f(pos_arg, *, no_default, has_default='default'):
    print(pos_arg, no_default, has_default)

এবং এর আচরণ:

>>> f(1, 2, 3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes 1 positional argument but 3 were given
>>> f(1, no_default='hi')
1 hi default
>>> f(1, no_default='hi', has_default='hello')
1 hi hello
>>> f(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() missing 1 required keyword-only argument: 'no_default'
>>> f(1, no_default=1, wat='wat')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() got an unexpected keyword argument 'wat'

এটি নিম্নলিখিতটি ব্যবহার করে অনুকরণ করা যায়, নোট করুন যে "প্রয়োজনীয় নামযুক্ত যুক্তি" ক্ষেত্রে আমি স্যুইচ TypeErrorকরার স্বাধীনতা নিয়েছি KeyError, একই ব্যতিক্রম প্রকারটি তৈরি করা খুব বেশি কাজ হবে না

def f(pos_arg, **kwargs):
    no_default = kwargs.pop('no_default')
    has_default = kwargs.pop('has_default', 'default')
    if kwargs:
        raise TypeError('unexpected keyword argument(s) {}'.format(', '.join(sorted(kwargs))))

    print(pos_arg, no_default, has_default)

এবং আচরণ:

>>> f(1, 2, 3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 1 argument (3 given)
>>> f(1, no_default='hi')
(1, 'hi', 'default')
>>> f(1, no_default='hi', has_default='hello')
(1, 'hi', 'hello')
>>> f(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
KeyError: 'no_default'
>>> f(1, no_default=1, wat='wat')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in f
TypeError: unexpected keyword argument(s) wat

রেসিপিটি পাইথন 3.x-তেও সমানভাবে কাজ করে তবে আপনি যদি পাইথন 3.x হন তবে এড়ানো উচিত


আহ, তাই kwargs.pop('foo')কি পাইথন 2 ইডিয়ম? আমার কোডিংয়ের স্টাইলটি আপডেট করতে হবে। আমি আজও পাইথন 3 in
নীল

0

আপনি **argsকেবলমাত্র গ্রহণ হিসাবে আপনার ফাংশন ঘোষণা করতে পারেন । এটি কীওয়ার্ড আর্গুমেন্টকে বাধ্যতামূলক করবে তবে কেবলমাত্র বৈধ নামগুলিই পাস হয়েছে তা নিশ্চিত করার জন্য আপনার কিছু অতিরিক্ত কাজ হবে।

def foo(**args):
   print args

foo(1,2) # Raises TypeError: foo() takes exactly 0 arguments (2 given)
foo(hello = 1, goodbye = 2) # Works fine.

1
আপনাকে কেবল কীওয়ার্ড চেকগুলিই যুক্ত করতে হবে না, তবে এমন একটি গ্রাহক সম্পর্কে চিন্তা করুন যা জানেন যে তাদের স্বাক্ষর সহ কোনও পদ্ধতিতে কল করতে হবে foo(**kwargs)। আমি কি মধ্যে পাস? foo(killme=True, when="rightnowplease")
ডাগরুম

এটা সত্যিই নির্ভর করে। বিবেচনা করুন dict
নওফাল ইব্রাহিম

0

অন্যান্য উত্তর হিসাবে যেমন ফাংশন স্বাক্ষর পরিবর্তন একটি খারাপ ধারণা। হয় শেষ পর্যন্ত নতুন প্যারামিটার যুক্ত করুন, বা যুক্তি সন্নিবেশ করা থাকলে প্রতিটি কলার ঠিক করুন।

আপনি যদি এখনও এটি করতে চান তবে একটি ফাংশন ডেকোরেটর এবং ইন্সপেক্ট.গেটরগস্পেক ফাংশনটি ব্যবহার করুন। এটি এরকম কিছু ব্যবহার করা হবে:

@require_named_args
def info(object, spacing=10, collapse=1):
    ....

বাস্তবায়ন require_named_argsপাঠকের জন্য অনুশীলন হিসাবে ছেড়ে যায়।

আমি বিরক্ত করব না। প্রতিটি সময় ফাংশনটি বলার সময় এটি ধীর হবে এবং আপনি কোডটি আরও যত্ন সহকারে লেখার থেকে আরও ভাল ফলাফল পাবেন।


-1

আপনি **অপারেটরটি ব্যবহার করতে পারেন :

def info(**kwargs):

এইভাবে লোকেরা নামযুক্ত পরামিতিগুলি ব্যবহার করতে বাধ্য হয়।


2
এবং আপনার কোডটি না পড়ে কীভাবে আপনার পদ্ধতিটি কল করবেন তার কোনও ধারণা নেই, আপনার গ্রাহকের উপর জ্ঞানীয় বোঝা বৃদ্ধি :(
ডাগরুম

উল্লিখিত কারণে এটি সত্যই খারাপ অভ্যাস এবং এড়ানো উচিত।
ডেভিড এস

-1
def cheeseshop(kind, *arguments, **keywords):

পাইথনে যদি * টি আরগস ব্যবহার করে তার অর্থ আপনি এই প্যারামিটারটির জন্য এন-নম্বর আর্গুমেন্ট পাস করতে পারেন - যা অ্যাক্সেসের জন্য ফাংশনের ভিতরে একটি তালিকা আসবে

এবং যদি ** কিলোওয়াট ব্যবহার করে তার মানে এর কীওয়ার্ড আর্গুমেন্টগুলি, যা ডিক হিসাবে অ্যাক্সেস হতে পারে - আপনি কে-ডাব্লু আর্গের এন-নম্বরটি পাস করতে পারেন, এবং যদি আপনি এই ব্যবহারকারীর সীমাবদ্ধ করতে চান তবে অবশ্যই ক্রম এবং যুক্তিগুলি প্রবেশ করতে হবে তবে ব্যবহার করবেন না * এবং ** - (বড় স্থাপত্যগুলির জন্য জেনেরিক সমাধান সরবরাহের এটি অজগর উপায় ...)

আপনি যদি ডিফল্ট মান সহ আপনার ফাংশনটি সীমাবদ্ধ রাখতে চান তবে আপনি এটির ভিতরে চেক করতে পারেন

def info(object, spacing, collapse)
  spacing = spacing or 10
  collapse = collapse or 1

ব্যবধান 0 হওয়ার ইচ্ছা থাকলে কী হয়? (উত্তর, আপনি 10 পাবেন) এই উত্তরটি একই হিসাবে অন্যান্য সমস্ত ** কাওয়ার্গসের উত্তর হিসাবে ঠিক ভুল।
ফিল

-2

কোনও প্রোগ্রামার প্রথমে অন্য দু'জনের মধ্যে একটি পরামিতি যুক্ত করবে কেন আমি তা পাই না।

যদি আপনি চান তবে নামের সাথে ফাংশনটির প্যারামিটার ব্যবহার করা উচিত (উদাঃ) info(spacing=15, object=odbchelper) ) সেগুলি কী অর্ডারে সংজ্ঞায়িত হয়েছে তা বিবেচনা করা উচিত না, তাই আপনি নতুন প্যারামিটারগুলি শেষে রেখে দিতে পারেন।

আপনি যদি অর্ডারটি বিষয়টি বিবেচনা করতে চান তবে আপনি যদি এটি পরিবর্তন করেন তবে কিছুই কাজ করার আশা করতে পারবেন না!


2
এটি প্রশ্নের উত্তর দেয় না। এটি একটি ভাল ধারণা অপ্রাসঙ্গিক কিনা - কেউ যে কোনওভাবে এটি করতে পারে।
গ্রীম পেরো

1
গ্রামীণ যেমন উল্লেখ করেছেন, যেভাবেই কেউ এটি করবে। এছাড়াও, আপনি যদি অন্যদের দ্বারা ব্যবহারের জন্য কোনও লাইব্রেরি লিখছেন, বাধ্য হয়ে (কেবলমাত্র অজগর 3) কীওয়ার্ডটি পাস করার সময় কেবলমাত্র যুক্তিগুলি যুক্তিগুলি অতিরিক্ত স্বচ্ছলতা দেয় যখন আপনাকে আপনার এপিআই রিফেক্টর করতে হয়।
s0undt3ch
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.