পাইথন ফাংশন যুক্তি হিসাবে?


116

পাইথন ফাংশন কি অন্য ফাংশনের যুক্তি হতে পারে?

বলুন,

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass

সুতরাং এটি মূলত দুটি প্রশ্ন:

  1. এটি কি আদৌ অনুমোদিত?
  2. এবং যদি এটি হয় তবে আমি অন্যান্য ফাংশনের ভিতরে ফাংশনটি কীভাবে ব্যবহার করব? আমার কি এক্সিকিউটিভ (), ইভাল () বা এর মতো কিছু ব্যবহার করা দরকার? তাদের সাথে কখনও গোলযোগ করার দরকার নেই।

বিটিডাব্লু, এক্সট্রাআর্গস হ'ল অন্যফাঁসের যুক্তিগুলির তালিকা / টুপল।


সংশ্লিষ্ট: stackoverflow.com/questions/47502068/...
alseether

উত্তর:


138

পাইথন ফাংশন কি অন্য ফাংশনের যুক্তি হতে পারে?

হ্যাঁ.

def myfunc(anotherfunc, extraArgs):
    anotherfunc(*extraArgs)

আরও নির্দিষ্ট হতে ... বিভিন্ন যুক্তি সহ ...

>>> def x(a,b):
...     print "param 1 %s param 2 %s"%(a,b)
...
>>> def y(z,t):
...     z(*t)
...
>>> y(x,("hello","manuel"))
param 1 hello param 2 manuel
>>>

এক্সট্রাআর্গগুলিও কি কোনও ফাংশন হতে পারে? যদি তাই হয় কিভাবে আপনি এটি কল?
আয়সেননৌসি

@ সেকাই হ্যাঁ, অতিরিক্তআর্গগুলিও একটি ফাংশন হতে পারে।
ম্যানুয়েল সালভাদোরস

3
এই নথি কোথায়?
4dc0

32

এখানে আরও একটি উপায় ব্যবহার করে *args(এবং using চ্ছিকভাবেও) **kwargs:

def a(x, y):
  print x, y

def b(other, function, *args, **kwargs):
  function(*args, **kwargs)
  print other

b('world', a, 'hello', 'dude')

আউটপুট

hello dude
world

লক্ষ্য করুন function, *args, **kwargsআছে, যাতে হতে হবে এবং ফাংশন ফাংশন কলিং গত আর্গুমেন্ট হতে আছে।


3
* Args & ** kwargs আরো infos পাওয়া যাবে এখানে pythontips.com/2013/08/04/args-and-kwargs-in-python-explained
Pipo

16

পাইথনে কাজগুলি প্রথম শ্রেণীর অবজেক্ট। তবে আপনার ফাংশন সংজ্ঞাটি কিছুটা বন্ধ

def myfunc(anotherfunc, extraArgs, extraKwArgs):
  return anotherfunc(*extraArgs, **extraKwArgs)

4

অবশ্যই, এজন্য পাইথন নিম্নলিখিত পদ্ধতিগুলি প্রয়োগ করে যেখানে প্রথম প্যারামিটারটি একটি ফাংশন:

  • মানচিত্র (ফাংশন, পুনরাবৃত্ত, ...) - পুনরাবৃত্তিযোগ্য প্রতিটি আইটেমের জন্য ফাংশন প্রয়োগ করুন এবং ফলাফলের একটি তালিকা ফেরত দিন।
  • ফিল্টার (ফাংশন, পুনরাবৃত্ত) - পুনরাবৃত্তিযোগ্য সেই উপাদানগুলির একটি তালিকা তৈরি করুন যার জন্য ফাংশনটি সত্য হয়।
  • হ্রাস (ফাংশন, পুনরাবৃত্ত [[আরম্ভকারী]]) - পুনরাবৃত্তীয় আইটেমগুলিতে বাম থেকে ডানদিকে দুটি যুক্তির ক্রিয়াকলাপ প্রয়োগ করুন, যাতে একক মানকে পুনরাবৃত্তিযোগ্য হ্রাস করতে পারে।
  • lambdas

2
  1. হ্যাঁ, এটি অনুমোদিত।
  2. আপনি অন্য কারও মতো ফাংশনটি ব্যবহার করুন: anotherfunc(*extraArgs)

2
  1. হ্যাঁ. আপনার ইনপুট আর্গুমেন্ট / গুলি মধ্যে ফাংশন কল অন্তর্ভুক্ত করে আপনি একবারে দুটি (বা আরও) ফাংশন কল করতে পারেন।

উদাহরণ স্বরূপ:

def anotherfunc(inputarg1, inputarg2):
    pass
def myfunc(func = anotherfunc):
    print func

আপনি যখন মাইফাঙ্ক ডাকেন, আপনি এটি করুন:

myfunc(anotherfunc(inputarg1, inputarg2))

এটি অন্যফাঁসের রিটার্ন মান প্রিন্ট করবে।

আশাকরি এটা সাহায্য করবে!


2

ফাংশনের ভিতরে ফাংশন: আমরা প্যারামিটার হিসাবে ফাংশনটিও ব্যবহার করতে পারি ..

অন্য কথায়, আমরা বলতে পারি যে কোনও ফাংশনের আউটপুটও কোনও সামগ্রীর জন্য একটি রেফারেন্স, নীচে দেখুন অভ্যন্তরীণ ফাংশনটির আউটপুট কীভাবে নীচের মতো বাইরের ফাংশনকে রেফারেন্স করছে ..

def out_func(a):

  def in_func(b):
       print(a + b + b + 3)
  return in_func

obj = out_func(1)
print(obj(5))

ফলাফল হবে .. 14

আশাকরি এটা সাহায্য করবে.


1
def x(a):
    print(a)
    return a

def y(a):
    return a

y(x(1))

2
আপনার উত্তরে কিছু ব্যাখ্যা যোগ করার বিষয়ে দয়া করে বিবেচনা করুন।
এইচএমডি

আপনি এখানে রিটার্ন মান পরিবর্তে একটি যুক্তি হিসাবে ফাংশনটি পাস করছেন না।
বব ববস্টার

1
def x(a):
    print(a)
    return a

def y(func_to_run, a):
    return func_to_run(a)

y(x, 1)

আমি মনে করি এটি আরও সঠিক নমুনা হবে। এখন আমি কী আশ্চর্য তা হল যদি কোনও ফাংশনে যুক্তি জমা দেওয়ার মধ্যে ফাংশনটি কোড করার কোনও উপায় থাকে। আমি বিশ্বাস করি সি ++ তে আছে তবে পাইথনে আমি নিশ্চিত নই।


1

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

def decorator(func):
      def insideFunction():
        print("This is inside function before execution")
        func()
      return insideFunction

def func():
    print("I am argument function")

func_obj = decorator(func) 
func_obj()

আউটপুট

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