পাইথন একটি ফাংশন সংজ্ঞা মুদ্রণ করতে পারেন?


112

জাভাস্ক্রিপ্টে, কেউ কোনও ফাংশনের সংজ্ঞা মুদ্রণ করতে পারে। পাইথনে এটি সম্পাদনের কোনও উপায় আছে কি?

(কেবল ইন্টারেক্টিভ মোডে ঘুরে বেড়াচ্ছি, এবং আমি খোলা ছাড়াই একটি মডিউলটি পড়তে চেয়েছিলাম () আমি কৌতূহলী ছিলাম)।


ফাংশনের জন্য আপনার কাছে উত্স রয়েছে। তাতে কী দোষ?
এস .লট

1
এবং ইন্টারেক্টিভ মোড থেকে আপনি ফাংশনের জন্য ডকাস্ট্রিং প্রদর্শন করতে সহায়তা (ফাংশন) ব্যবহার করতে পারেন।
monkut

এই প্রশ্নের একটি নকল আছে: stackoverflow.com/questions/427453/…
অ্যান্ডারসন গ্রিন

উত্তর:


157

আপনি যদি ফাংশনটি আমদানি করে থাকেন তবে আপনি ব্যবহার করতে পারেন inspect.getsource:

>>> import re
>>> import inspect
>>> print inspect.getsource(re.compile)
def compile(pattern, flags=0):
    "Compile a regular expression pattern, returning a pattern object."
    return _compile(pattern, flags)

এটি ইন্টারেক্টিভ প্রম্পটে কাজ করবে তবে দৃশ্যত কেবলমাত্র আমদানি করা বস্তুগুলিতে (ইন্টারেক্টিভ প্রম্পটের অভ্যন্তরে সংজ্ঞায়িত বস্তু নয়)। এবং অবশ্যই এটি তখনই কাজ করবে যদি পাইথন উত্স কোডটি খুঁজে পেতে পারে (সুতরাং অন্তর্নির্মিত অবজেক্টস, সি লিবস, .পিসিপি ফাইল ইত্যাদিতে নয়)


রানটাইম সময়ে তৈরি করা ফাংশনগুলি (ইন্টারেক্টিভ প্রম্পট সহ) কোনও ফাইল বা লিনেনবার নেই, যা বোঝায়
জন লা রুই

আমি যা খুঁজছিলাম তা মনে হয়। ধন্যবাদ!
এডি ওয়েকার

9
বর্তমান ইন্টারেক্টিভ পাইথন ইন্টারপ্রেটারে আমি আগে কোনও ফাংশন সংজ্ঞাটি মুদ্রণের বিষয়ে কী করব? এটা কি সম্ভব?
GL2014

@ জিএল ২০১৪: হ্যাঁ, আমার উত্তর দেখুন।
মাইক ম্যাকার্নস

আমি নিশ্চিত করতে পারে এই উত্তর এবং inspect.getsource () শুরু করে পাইথন 3.6.9 (উবুন্টু) এ ইন্টারেক্টিভ (ipython3) কাজ সংজ্ঞায়িত funciton।
Gnudiff

97

আপনি যদি আইপ্যাথন ব্যবহার করছেন , আপনি function_name?সাহায্য পেতে ব্যবহার করতে পারেন, এবং function_name??যদি পারেন তবে উত্সটি মুদ্রণ করে ফেলবেন


2
কখনও কখনও আপনি কল করতে অন্য লাইনে ফাংশন পৃথক প্রয়োজন? উদাহরণস্বরূপ Model.function ?? কাজ করে না তবে f = Model.function; চ ?? কাজ করে
থিচেক

12

এটি কীভাবে করবেন তা আমি এইভাবে অনুভব করেছি:

    import inspect as i
    import sys
    sys.stdout.write(i.getsource(MyFunction))

এটি নতুন রেখার অক্ষরগুলি বের করে এবং ফাংশনটি সুন্দরভাবে মুদ্রণ করে


1
সেখানে ভাঙা উদাহরণ, এটি i.getsource (MyFunction) হওয়া উচিত।
svth

10

যদিও আমি সাধারণত সম্মত হই যে inspectএটি একটি উত্তরের উত্তর, আমি দ্বিমত করব যে আপনি দোভাষীতে সংজ্ঞায়িত অবজেক্টের উত্স কোডটি পেতে পারবেন না। আপনি যদি এটি dill.source.getsourceথেকে ব্যবহার করেন তবে আপনি dillকার্যকারিতা এবং ল্যাম্বডাসের উত্স পেতে পারেন, এমনকি যদি সেগুলি ইন্টারেক্টিভভাবে সংজ্ঞায়িত করা হয়। এটি সীমাবদ্ধ বা আনবাউন্ড শ্রেণি পদ্ধতি এবং কারিগুলিতে সংজ্ঞায়িত ফাংশনগুলির জন্য কোডও পেতে পারে ... তবে, আপনি এনকোলেজিং অবজেক্টের কোড ছাড়াই সেই কোডটি সংকলন করতে সক্ষম নন।

>>> from dill.source import getsource
>>> 
>>> def add(x,y):
...   return x+y
... 
>>> squared = lambda x:x**2
>>> 
>>> print getsource(add)
def add(x,y):
  return x+y

>>> print getsource(squared)
squared = lambda x:x**2

>>> 
>>> class Foo(object):
...   def bar(self, x):
...     return x*x+x
... 
>>> f = Foo()
>>> 
>>> print getsource(f.bar)
def bar(self, x):
    return x*x+x

>>> 

1
কখনও কখনও এটি সরাসরি সাথে কাজ করে না: গেটসোর্স (আমার_ফানশন) , তবে তারপরে আমি এটি গেসোর্স (my_function.func_code)
আফলাটাস


-6

আপনি __ ডক__ কীওয়ার্ডটি ব্যবহার করতে পারেন:

#print the class description
print string.__doc__
#print function description
print open.__doc__

1
এটাই বর্ণনা, সংজ্ঞা নয়।
ট্রিপটিচ

অনেকগুলি বিল্টিনের জন্য (একটি নিয়ম হিসাবে সি মডিউলগুলিতে সংজ্ঞায়িত ফাংশন), এতে ফাংশনের স্বাক্ষরও অন্তর্ভুক্ত থাকে তবে সাধারণভাবে নয়।
u0b34a0f6ae

1
ইন্টারেক্টিভ শেলটিতে থাকাকালীন "সহায়তা (অবজেক্ট)" এটিকে আরও নাব্যযোগ্য উপায়ে প্রদর্শন করবে।
টি।

@ কেজার একটি ফাংশন স্বাক্ষর কোনও সংজ্ঞা নয়। কি __doc__ আসলে ফেরৎ যাই হোক না কেন ডক স্ট্রিং কোড করা (ট্রিপল উদ্ধৃত পংক্তি) এর লেখক। বেশিও না কমও না.
ট্রিপটিচ

আমি মনে করি সংজ্ঞাটি এখানে অস্পষ্ট। আমার কাছে এটি ডাস্ট্রিং বা কোড পাঠ্য বা উভয় বা এমনকি কোড অবজেক্টের কোনও অংশ হতে পারে
জন লা রুই

-6

আপনি ফাংশনটিতে ব্যবহার করতে পারেন __doc__, hog()উদাহরণ হিসাবে ফাংশন নিতে পারেন: আপনি এর ব্যবহার দেখতে পারেন hog():

from skimage.feature import hog

print hog.__doc__

আউটপুটটি হবে:

Extract Histogram of Oriented Gradients (HOG) for a given image.
Compute a Histogram of Oriented Gradients (HOG) by

    1. (optional) global image normalisation
    2. computing the gradient image in x and y
    3. computing gradient histograms
    4. normalising across blocks
    5. flattening into a feature vector

Parameters
----------
image : (M, N) ndarray
    Input image (greyscale).
orientations : int
    Number of orientation bins.
pixels_per_cell : 2 tuple (int, int)
    Size (in pixels) of a cell.
cells_per_block  : 2 tuple (int,int)
    Number of cells in each block.
visualise : bool, optional
    Also return an image of the HOG.
transform_sqrt : bool, optional
    Apply power law compression to normalise the image before
    processing. DO NOT use this if the image contains negative
    values. Also see `notes` section below.
feature_vector : bool, optional
    Return the data as a feature vector by calling .ravel() on the result
    just before returning.
normalise : bool, deprecated
    The parameter is deprecated. Use `transform_sqrt` for power law
    compression. `normalise` has been deprecated.

Returns
-------
newarr : ndarray
    HOG for the image as a 1D (flattened) array.
hog_image : ndarray (if visualise=True)
    A visualisation of the HOG image.

References
----------
* http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients

* Dalal, N and Triggs, B, Histograms of Oriented Gradients for
  Human Detection, IEEE Computer Society Conference on Computer
  Vision and Pattern Recognition 2005 San Diego, CA, USA

Notes
-----
Power law compression, also known as Gamma correction, is used to reduce
the effects of shadowing and illumination variations. The compression makes
the dark regions lighter. When the kwarg `transform_sqrt` is set to
``True``, the function computes the square root of each color channel
and then applies the hog algorithm to the image.

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