পূর্বে গৃহীত উত্তর হয়েছে অবচিত হিসাবে Python 3.0। ব্যবহার inspect.getargspecনা করে আপনার এখন Signatureক্লাসটি বেছে নেওয়া উচিত যা এটি ছাড়িয়ে গেছে।
ফাংশন জন্য একটি স্বাক্ষর তৈরি করা হচ্ছে মাধ্যমে সহজ signatureফাংশন :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
এখন, আপনি এটির মাধ্যমে এটির পরামিতিগুলি দ্রুত দেখতে strপারেন:
str(sig) # returns: '(self, arg1, kwarg1=None)'
অথবা আপনি প্যারামিটার অবজেক্টগুলির মাধ্যমে বিশিষ্ট নামগুলির ম্যাপিংও পেতে পারেন sig.parameters।
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
উপরন্তু, আপনি কল করতে পারেন lenউপর sig.parametersএছাড়াও আর্গুমেন্ট এই ফাংশন প্রয়োজন সংখ্যা দেখতে:
print(len(params)) # 3
paramsম্যাপিংয়ের প্রতিটি প্রবেশই আসলে এমন একটি Parameterঅবজেক্ট যা আপনার জীবনকে আরও সহজ করে তোলে এমন আরও বৈশিষ্ট্য রয়েছে। উদাহরণস্বরূপ, একটি পরামিতি দখল করা এবং এর ডিফল্ট মানটি এখন সহজেই এর সাথে সঞ্চালিত হয়:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
একইভাবে অন্তর্ভুক্ত বস্তু বাকি জন্য parameters।
পাইথন 2.xব্যবহারকারীদের ক্ষেত্রে, অবহেলিত inspect.getargspec না হলেও ভাষা শীঘ্রই :-) হয়ে উঠবে। Signatureক্লাসে উপলব্ধ নয় 2.xসিরিজ এবং হবে না। সুতরাং আপনার এখনও কাজ করা প্রয়োজন inspect.getargspec।
পাইথন 2 এবং 3 এর মধ্যে রূপান্তরের জন্য, যদি আপনি কোড আছে ইন্টারফেস উপর নির্ভর getargspecপাইথন 2 এবং সুইচিং signatureমধ্যে 3খুব কঠিন, আপনাকে মূল্যবান বিকল্প আছে ব্যবহারের inspect.getfullargspec। এটি getargspecকোনও ক্রিয়াকলাপের আর্গুমেন্টগুলি ধরার জন্য একই ধরণের ইন্টারফেসের প্রস্তাব দেয় (একটি একক কলযোগ্য আর্গুমেন্ট) এবং কিছু অতিরিক্ত ক্ষেত্রেও পরিচালনা getargspecকরে না যা:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
সঙ্গে getargspec, getfullargspecএকটি ফেরৎ NamedTupleযা আর্গুমেন্ট উপস্থিত রয়েছে।
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectস্ট্যান্ডার্ড লাইব্রেরি মডিউলটির কোনও যৌক্তিকতা থাকবে না ।