** কোয়ার্গসের উদ্দেশ্য এবং ব্যবহার কী?


763

**kwargsপাইথন ব্যবহার কি ?

আমি জানি আপনি objects.filterএকটি টেবিলে একটি করতে পারেন এবং একটি **kwargsযুক্তিতে পাস করতে পারেন ।  

আমি কি সময় ডেল্টা নির্দিষ্টকরণের জন্য এটি করতে পারি timedelta(hours = time1)?

এটি ঠিক কীভাবে কাজ করে? এটি কি 'আনপ্যাকিং' হিসাবে ক্লাস হয়? পছন্দ a,b=1,2?


27
আপনি যদি এই প্রশ্নটিতে আমার মতো ঝাঁপিয়ে পড়েন তবে

3
এখানে একটি উল্লেখযোগ্য সংক্ষিপ্ত ব্যাখ্যা : "* একটি টিপলে সমস্ত অবস্থানগত আর্গুমেন্ট সংগ্রহ করে", "** অভিধানে সমস্ত কীওয়ার্ড আর্গুমেন্ট সংগ্রহ করে"। মূল শব্দটি সংগ্রহ করা
osa

24
জাস্ট এফআইআই: এর kwargsঅর্থ দাঁড়ায় KeyWord ARGumentS, অর্থাত্ কী যুক্তিযুক্ত যুক্তিগুলি
রিচার্ড ডি উইট

উত্তর:


868

আপনি **kwargsআপনার ক্রিয়াকলাপগুলিকে কীওয়ার্ড আর্গুমেন্টের একটি নির্বিচার সংখ্যক নিতে দিতে ব্যবহার করতে পারেন ("কাওয়ার্গস" এর অর্থ "কীওয়ার্ড আর্গুমেন্ট"):

>>> def print_keyword_args(**kwargs):
...     # kwargs is a dict of the keyword args passed to the function
...     for key, value in kwargs.iteritems():
...         print "%s = %s" % (key, value)
... 
>>> print_keyword_args(first_name="John", last_name="Doe")
first_name = John
last_name = Doe

**kwargsকীওয়ার্ড আর্গুমেন্টের অভিধান তৈরি করে এটি আপনার ফাংশনে প্রেরণ করে ফাংশনগুলিতে কল করার সময় আপনি সিনট্যাক্সটিও ব্যবহার করতে পারেন :

>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith

পাইথন টিউটোরিয়াল কিভাবে এটি কাজ করে, কিছু চমৎকার উদাহরণ সহ একটি ভাল ব্যাখ্যা রয়েছে।

<- আপডেট ->

পাইথন 3 ব্যবহার করার জন্য, ইটারাইটেম () এর পরিবর্তে আইটেমগুলি ব্যবহার করুন ()


1
@ yashas123 না; যদি আপনি শূন্য কিছু থেকে লুপ করেন তবে কিছুই ঘটে না, তাই পরবর্তী কোড যাই হোক না কেন তা সাধারণত চলে।
জেজি

330

অভিধানগুলি আনপ্যাক করা হচ্ছে

** অভিধানগুলি আনপ্যাক করে।

এই

func(a=1, b=2, c=3)

হিসাবে একই

args = {'a': 1, 'b': 2, 'c':3}
func(**args)

আপনার যদি প্যারামিটারগুলি তৈরি করতে হয় তবে এটি দরকারী:

args = {'name': person.name}
if hasattr(person, "address"):
    args["address"] = person.address
func(**args)  # either expanded to func(name=person.name) or
              #                    func(name=person.name, address=person.address)

একটি ফাংশন প্যাকিং প্যারামিটার

def setstyle(**styles):
    for key, value in styles.iteritems():      # styles is a regular dictionary
        setattr(someobject, key, value)

এটি আপনাকে এই জাতীয় ফাংশনটি ব্যবহার করতে দেয়:

setstyle(color="red", bold=False)

13
কোয়ার্গ কি ঠিক একটি ভেরিয়েবলের নাম? সুতরাং আমি ডিএফ ফানক (** আরগস) ব্যবহার করতে পারি: এবং এটি কি কাজ করবে?
শ্রীরাম

11
@ শ্রীরাম: ঠিক আছে। নক্ষত্রগুলি গুরুত্বপূর্ণ। কোয়ার্গস কেবলমাত্র নাম দেয় এটির চেয়ে ভাল কিছু না হলে gives (সাধারণত আছে))
জর্জি স্কলি

54
@ শ্রীরাম: পঠনযোগ্যতার জন্য আপনি কাওয়ার্গগুলিতে লেগে থাকতে হবে - অন্যান্য প্রোগ্রামাররা এটির প্রশংসা করবে।
jhndodo

12
** do unpack dictionaries.>> মন ফুঁকছে / অবশ্যই! + 1 বিট ব্যাখ্যা করার জন্য।
মার্ক

13
দ্রষ্টব্য: পাইথন 3 এ নতুন .iteritems()নামকরণ করা হয়েছে.items()
fnkr

67

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

একটি অভিধানে কী, মান জোড়া থাকতে পারে। এবং সেগুলি হচ্ছে কাওয়ারগুলি। ঠিক আছে, এইভাবে।

কি জন্য এত সহজ নয়।

উদাহরণস্বরূপ (খুব অনুমানমূলক) আপনার একটি ইন্টারফেস রয়েছে যা কাজটি করতে কেবল অন্য রুটিনগুলিকে কল করে:

def myDo(what, where, why):
   if what == 'swim':
      doSwim(where, why)
   elif what == 'walk':
      doWalk(where, why)
   ...

এখন আপনি একটি নতুন পদ্ধতি "ড্রাইভ" পান:

elif what == 'drive':
   doDrive(where, why, vehicle)

তবে এক মিনিট অপেক্ষা করুন, সেখানে একটি নতুন প্যারামিটার "যানবাহন" রয়েছে - আপনি এটি আগে জানতেন না। এখন আপনাকে অবশ্যই এটি মাইডো-ফাংশনের স্বাক্ষরে যুক্ত করতে হবে।

এখানে আপনি খেলোয়াড়গুলিতে কাওয়ারগুলি ফেলে দিতে পারেন - আপনি স্বাক্ষরে কেবল কাওয়ার্গগুলি যুক্ত করেছেন:

def myDo(what, where, why, **kwargs):
   if what == 'drive':
      doDrive(where, why, **kwargs)
   elif what == 'swim':
      doSwim(where, why, **kwargs)

এইভাবে আপনাকে যখন আপনার ডাকা রুটিনগুলির কিছু পরিবর্তিত হতে পারে তখনই আপনাকে আপনার ইন্টারফেস ফাংশনের স্বাক্ষরটি পরিবর্তন করার দরকার হয় না।

এটি কেবল একটি দুর্দান্ত উদাহরণ যা আপনি কোয়ার্গসকে সহায়ক বলে মনে করতে পারেন।


46

লম্বা ডিসকোর্সের চেয়ে ভাল একটি নমুনা মাঝে মাঝে ভাল হয় তার ভিত্তিতে আমি সমস্ত পাইথন ভেরিয়েবল আর্গুমেন্ট পাসিং সুবিধা (উভয় অবস্থানগত এবং নাম যুক্তি) ব্যবহার করে দুটি ফাংশন লিখব। এটি নিজের দ্বারা এটি কী করে তা সহজেই দেখতে পারা উচিত:

def f(a = 0, *args, **kwargs):
    print("Received by f(a, *args, **kwargs)")
    print("=> f(a=%s, args=%s, kwargs=%s" % (a, args, kwargs))
    print("Calling g(10, 11, 12, *args, d = 13, e = 14, **kwargs)")
    g(10, 11, 12, *args, d = 13, e = 14, **kwargs)

def g(f, g = 0, *args, **kwargs):
    print("Received by g(f, g = 0, *args, **kwargs)")
    print("=> g(f=%s, g=%s, args=%s, kwargs=%s)" % (f, g, args, kwargs))

print("Calling f(1, 2, 3, 4, b = 5, c = 6)")
f(1, 2, 3, 4, b = 5, c = 6)

এবং এখানে ফলাফল:

Calling f(1, 2, 3, 4, b = 5, c = 6)
Received by f(a, *args, **kwargs) 
=> f(a=1, args=(2, 3, 4), kwargs={'c': 6, 'b': 5}
Calling g(10, 11, 12, *args, d = 13, e = 14, **kwargs)
Received by g(f, g = 0, *args, **kwargs)
=> g(f=10, g=11, args=(12, 2, 3, 4), kwargs={'c': 6, 'b': 5, 'e': 14, 'd': 13})

28

মোটিফ: *argsএবং **kwargsএকটি ফাংশন কলে পাস করার প্রয়োজন আর্গুমেন্টগুলির জন্য একটি স্থানধারক হিসাবে কাজ করে

ব্যবহার করে *argsএবং **kwargsএকটি ফাংশন কল করতে

def args_kwargs_test(arg1, arg2, arg3):
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3

এখন আমরা *argsউপরের সংজ্ঞায়িত ফাংশনটি কল করতে ব্যবহার করব

#args can either be a "list" or "tuple"
>>> args = ("two", 3, 5)  
>>> args_kwargs_test(*args)

ফলাফল:

আরগ 1: দুটি
আরগ 2: 3
আরগ 3 : 5


এখন, **kwargsএকই ফাংশনটি কল করতে ব্যবহার করছি

#keyword argument "kwargs" has to be a dictionary
>>> kwargs = {"arg3":3, "arg2":'two', "arg1":5}
>>> args_kwargs_test(**kwargs)

ফলাফল:

আরগ 1: 5
আরগ 2 : দুটি
আরগ 3: 3

বটমলাইন: *argsকোনও বুদ্ধি নেই, এটি কেবল পাসপোর্টগুলিকে পরামিতিগুলিতে বিভক্ত করে (বাম থেকে ডান ক্রমে) যখন **kwargsযথাযথ মান @ প্রয়োজনীয় স্থানে রেখে বুদ্ধি করে আচরণ করে


24
  • kwargsমধ্যে **kwargsকেবল পরিবর্তনশীল নাম। আপনি খুব ভাল থাকতে পারে**anyVariableName
  • kwargsএর অর্থ "কীওয়ার্ড আর্গুমেন্ট"। তবে আমি অনুভব করি যে তাদের আরও ভাল নাম দেওয়া উচিত "যুক্তিযুক্ত আর্গুমেন্ট" হিসাবে ডাকা উচিত, কারণ এগুলি কেবল নামগুলির সাথে পাশ করা যুক্তি (আমি "কীওয়ার্ড" শব্দের "কীওয়ার্ড আর্গুমেন্ট" শব্দটির কোনও তাত্পর্য খুঁজে পাই না I আমার ধারণা "মূলশব্দ") এর অর্থ সাধারণত প্রোগ্রামিং ভাষার দ্বারা সংরক্ষিত শব্দ এবং সুতরাং প্রোগ্রামারটি পরিবর্তনশীল নামের জন্য ব্যবহার না করে k কোয়ার্গসের ক্ষেত্রে এখানে তেমন কোনও ঘটনা ঘটছে না)) সুতরাং আমরা নাম প্রদান param1এবং param2অনুসরণ দুই প্যারামিটার মান ফাংশন প্রেরণ হিসাবে: func(param1="val1",param2="val2"), পরিবর্তে শুধুমাত্র মান ক্ষণস্থায়ী: func(val1,val2)। সুতরাং, আমি অনুভব করি যে তাদের যথাযথভাবে "নামযুক্ত আর্গুমেন্টের নির্বিচার সংখ্যা" বলা উচিত কারণ আমরা এই প্যারামিটারগুলির যে কোনও সংখ্যা নির্দিষ্ট করতে পারি (যা,funcfunc(**kwargs)

তাই বলা হচ্ছে যে আমাকে প্রথমে "নামযুক্ত যুক্তিগুলি" এবং তারপরে "নামযুক্ত তর্কগুলির স্বেচ্ছাসেবী" ব্যাখ্যা করুক kwargs

নাম যুক্তি

  • নামযুক্ত আরগগুলি অবস্থানগত আরোগ্যগুলি অনুসরণ করা উচিত
  • নামযুক্ত আরোগুলি ক্রম গুরুত্বপূর্ণ নয়
  • উদাহরণ

    def function1(param1,param2="arg2",param3="arg3"):
        print("\n"+str(param1)+" "+str(param2)+" "+str(param3)+"\n")
    
    function1(1)                      #1 arg2 arg3   #1 positional arg
    function1(param1=1)               #1 arg2 arg3   #1 named arg
    function1(1,param2=2)             #1 2 arg3      #1 positional arg, 1 named arg
    function1(param1=1,param2=2)      #1 2 arg3      #2 named args       
    function1(param2=2, param1=1)     #1 2 arg3      #2 named args out of order
    function1(1, param3=3, param2=2)  #1 2 3         #
    
    #function1()                      #invalid: required argument missing
    #function1(param2=2,1)            #invalid: SyntaxError: non-keyword arg after keyword arg
    #function1(1,param1=11)           #invalid: TypeError: function1() got multiple values for argument 'param1'
    #function1(param4=4)              #invalid: TypeError: function1() got an unexpected keyword argument 'param4'
    

নামযুক্ত আর্গুমেন্টের নির্বিচারে সংখ্যা kwargs

  • ফাংশন পরামিতিগুলির ক্রম:
    1. অবস্থানগত পরামিতি
    2. আনুষ্ঠানিক প্যারামিতি আর্গুমেন্টের স্বেচ্ছাসেবী সংখ্যার ক্যাপচার (* এর সাথে পূর্বনির্ধারিত)
    3. নামকৃত আনুষ্ঠানিক পরামিতি
    4. আনুষ্ঠানিক পরামিতি নামকরণের প্যারামিটারগুলির নির্বিচারে সংখ্যক ক্যাপচার করছে (** সহ পূর্ববর্তী)
  • উদাহরণ

    def function2(param1, *tupleParams, param2, param3, **dictionaryParams):
        print("param1: "+ param1)
        print("param2: "+ param2)
        print("param3: "+ param3)
        print("custom tuple params","-"*10)
        for p in tupleParams:
            print(str(p) + ",")
        print("custom named params","-"*10)
        for k,v in dictionaryParams.items():
            print(str(k)+":"+str(v))
    
    function2("arg1",
              "custom param1",
              "custom param2",
              "custom param3",
              param3="arg3",
              param2="arg2", 
              customNamedParam1 = "val1",
              customNamedParam2 = "val2"
              )
    
    # Output
    #
    #param1: arg1
    #param2: arg2
    #param3: arg3
    #custom tuple params ----------
    #custom param1,
    #custom param2,
    #custom param3,
    #custom named params ----------
    #customNamedParam2:val2
    #customNamedParam1:val1
    

কাস্টম আরোগুলির জন্য টিপল এবং ডিক ভেরিয়েবলগুলি পাস করা

এটি শেষ করতে, আমি এও নোট করি যে আমরা পাস করতে পারি

  • টিপল ভেরিয়েবল এবং হিসাবে "আনুষ্ঠানিক সংখ্যক আর্গুমেন্টের ক্যাপচারিং ফর্মাল প্যারামিটার"
  • ডিক ভেরিয়েবল হিসাবে "আনুষ্ঠানিক প্যারামিটার নামকরণের প্যারামিটারগুলির ক্যাপচার করে"

সুতরাং নীচের মত একই উপরের কল করা যেতে পারে:

tupleCustomArgs = ("custom param1", "custom param2", "custom param3")
dictCustomNamedArgs = {"customNamedParam1":"val1", "customNamedParam2":"val2"}

function2("arg1",
      *tupleCustomArgs,    #note *
      param3="arg3",
      param2="arg2", 
      **dictCustomNamedArgs     #note **
      )

শেষ পর্যন্ত নোট করুন *এবং **ফাংশন কলগুলিতে উপরে। আমরা যদি এগুলি বাদ দিই তবে আমরা খারাপ ফলাফল পেতে পারি।

ছেড়ে যাওয়া হচ্ছে *tuple args মধ্যে:

function2("arg1",
      tupleCustomArgs,   #omitting *
      param3="arg3",
      param2="arg2", 
      **dictCustomNamedArgs
      )

কপি করে প্রিন্ট

param1: arg1
param2: arg2
param3: arg3
custom tuple params ----------
('custom param1', 'custom param2', 'custom param3'),
custom named params ----------
customNamedParam2:val2
customNamedParam1:val1

উপরে টুপলে ('custom param1', 'custom param2', 'custom param3')যেমন প্রিন্ট করা হয়।

ছাড়ানো dictআরগস:

function2("arg1",
      *tupleCustomArgs,   
      param3="arg3",
      param2="arg2", 
      dictCustomNamedArgs   #omitting **
      )

দেয়

dictCustomNamedArgs
         ^
SyntaxError: non-keyword arg after keyword arg

3
আমি ভাবতে পারি যে keywordপরিভাষাটি এমন সত্য থেকে আসে যেখানে আপনি একটি ডিকটিতে যাচ্ছেন যা কী-মূল্যের জোড়ার একটি ডাটাবেস।
ক্রোবার

আপনার কী "কী" শব্দটির অর্থ "কী" -মূল্য জোড়া? এছাড়াও এটি সাধারণত ডাটাবেস বলা হয় না, কিন্তু অভিধান। তবে এখনও "কীওয়ার্ড" শব্দের ব্যবহারের কোনও তাত্পর্য খুঁজে পাইনি।
মহেশশা৯৯

9

অতিরিক্ত হিসাবে, কাওয়ার্গস ফাংশনগুলিতে কল করার সময় আপনি বিভিন্ন ধরণের ব্যবহারের মিশ্রণ করতে পারেন:

def test(**kwargs):
    print kwargs['a']
    print kwargs['b']
    print kwargs['c']


args = { 'b': 2, 'c': 3}

test( a=1, **args )

এই আউটপুট দেয়:

1
2
3

মনে রাখবেন যে ** কাওয়ারগুলি সর্বশেষ যুক্তি হতে হবে


5

কোয়ার্গস হ'ল ডাইনারি (ফানকের জন্য), বা অভিধান হিসাবে নাম যুক্তি (ফানক থেকে) হিসাবে আর্গুমেন্ট পাস করার জন্য একটি সিনট্যাকটিক চিনি


5

এখানে একটি সাধারণ ফাংশন যা ব্যবহারের ব্যাখ্যা দেয়:

def print_wrap(arg1, *args, **kwargs):
    print(arg1)
    print(args)
    print(kwargs)
    print(arg1, *args, **kwargs)

যে আর্গুমেন্টগুলি না ফাংশন সংজ্ঞা নির্দিষ্ট বসাতে হবে argsতালিকা, বা kwargsতালিকা, তারা শব্দ আর্গুমেন্ট বা না কিনা উপর ভিত্তি করে:

>>> print_wrap('one', 'two', 'three', end='blah', sep='--')
one
('two', 'three')
{'end': 'blah', 'sep': '--'}
one--two--threeblah

আপনি যদি কোনও কীওয়ার্ড যুক্তি যুক্ত করেন যা কোনও ফাংশনে কখনই পাস হয় না, একটি ত্রুটি উত্থাপিত হবে:

>>> print_wrap('blah', dead_arg='anything')
TypeError: 'dead_arg' is an invalid keyword argument for this function

1

এখানে একটি উদাহরণ যা আমি আশা করি সহায়ক হবে:

#! /usr/bin/env python
#
def g( **kwargs) :
  print ( "In g ready to print kwargs" )
  print kwargs
  print ( "in g, calling f")
  f ( **kwargs )
  print ( "In g, after returning from f")

def f( **kwargs ) :
  print ( "in f, printing kwargs")
  print ( kwargs )
  print ( "In f, after printing kwargs")


g( a="red", b=5, c="Nassau")

g( q="purple", w="W", c="Charlie", d=[4, 3, 6] )

আপনি যখন প্রোগ্রামটি চালান, আপনি পাবেন:

$ python kwargs_demo.py 
In g ready to print kwargs
{'a': 'red', 'c': 'Nassau', 'b': 5}
in g, calling f
in f, printing kwargs
{'a': 'red', 'c': 'Nassau', 'b': 5}
In f, after printing kwargs
In g, after returning from f
In g ready to print kwargs
{'q': 'purple', 'c': 'Charlie', 'd': [4, 3, 6], 'w': 'W'}
in g, calling f
in f, printing kwargs
{'q': 'purple', 'c': 'Charlie', 'd': [4, 3, 6], 'w': 'W'}
In f, after printing kwargs
In g, after returning from f

এখানে তুলে নেওয়া কীটি হ'ল কলটিতে নামযুক্ত আর্গুমেন্টগুলির পরিবর্তনশীল সংখ্যাটি ফাংশনটির একটি অভিধানে অনুবাদ করে।


0

পাইথন আনপ্যাকিং সম্পর্কে বোঝার এটি সহজ উদাহরণ ,

>>> def f(*args, **kwargs):
...    print 'args', args, 'kwargs', kwargs

eg1:

>>>f(1, 2)
>>> args (1,2) kwargs {} #args return parameter without reference as a tuple
>>>f(a = 1, b = 2)
>>> args () kwargs {'a': 1, 'b': 2} #args is empty tuple and kwargs return parameter with reference as a dictionary

0

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

জাভা উদাহরণ: https://beginnersbook.com/2013/05/ কনস্ট্রাক্টর- ওভারলোডিং /

অজগর উদাহরণ:

class Robot():
    # name is an arg and color is a kwarg
    def __init__(self,name, color='red'):
        self.name = name
        self.color = color

red_robot = Robot('Bob')
blue_robot = Robot('Bob', color='blue')

print("I am a {color} robot named {name}.".format(color=red_robot.color, name=red_robot.name))
print("I am a {color} robot named {name}.".format(color=blue_robot.color, name=blue_robot.name))

>>> I am a red robot named Bob.
>>> I am a blue robot named Bob.

এটি সম্পর্কে চিন্তা করার অন্য একটি উপায়।


0

কীওয়ার্ড আর্গুমেন্টগুলি প্রায়শই পাইথনের কাওয়ারগুলিতে সংক্ষিপ্ত করা হয় । ইন কম্পিউটার প্রোগ্রামিং ,

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

প্যারামিটার নাম, ** কোয়ার্গসের আগে দুটি তারকাচিহ্নের ব্যবহার তখনই হয় যখন কেউ কী কী কীওয়ার্ড আর্গুমেন্টটি ফাংশনে পাস করবে তা জানে না। যখন কেসটি হয়, তখন এটিকে সালিসি / ওয়াইল্ডকার্ড কীওয়ার্ড আর্গুমেন্ট বলে।

এর একটি উদাহরণ জ্যাঙ্গোর রিসিভার ফাংশন

def my_callback(sender, **kwargs):
    print("Request finished!")

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

এটি ভুল হবে - বাস্তবে, জাজানো যদি আপনি এটি করেন তবে একটি ত্রুটি ফেলবে। এটি কারণ যে কোনও মুহূর্তে যুক্তিগুলি সিগন্যালে যুক্ত হতে পারে এবং আপনার রিসিভার অবশ্যই সেই নতুন যুক্তিগুলি পরিচালনা করতে সক্ষম হবে।

মনে রাখবেন এটিকে কাওয়ার্গস বলতে হবে না , তবে এর ** হওয়া দরকার (নাম কোয়ার্গস একটি সম্মেলন)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.