পাইথন ফাংশনের জন্য অন্তর্নির্মিত উত্স কোডটি সন্ধান করছেন?


142

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

উত্তর:


135

পাইথন ওপেন সোর্স হওয়ায় আপনি সোর্স কোডটি পড়তে পারেন ।

কোনও মডিউল বা ফাংশন কোন ফাইলটি আপনার প্রয়োগ করা হয় তা অনুসন্ধান করতে আপনি সাধারণত __file__বৈশিষ্ট্যটি মুদ্রণ করতে পারেন । বিকল্পভাবে, আপনি inspectমডিউলটি ব্যবহার করতে পারেন , এর ডকুমেন্টেশনে সোর্স কোডটি পুনরুদ্ধার করা বিভাগটি দেখুন inspect

অন্তর্নির্মিত ক্লাস এবং পদ্ধতিগুলির জন্য এটি এতটা সহজ নয় inspect.getfileএবং inspect.getsourceঅবজেক্টটি অন্তর্নির্মিত বলে উল্লেখ করে কোনও ধরণের ত্রুটি ফিরে আসবে। তবে Objectsপাইথন উত্স ট্রাঙ্কের উপ-ডিরেক্টরিতে অনেকগুলি অন্তর্নির্মিত ধরণের সন্ধান পাওয়া যায় । উদাহরণস্বরূপ, দেখুন এখানে গনা বর্গ বাস্তবায়ন জন্য অথবা এখানে বাস্তবায়নের listপ্রকার।


আপনি একটি উদাহরণ দিতে পারেন enumerate?
বেনিয়ামিন

ওপি অনুসরণ করে, "সাজানো" এর উত্স কোড সম্পর্কে কীভাবে? অবশ্যই, ইন্সপেক্ট.জেটসোর্সফাইলে (সাজানো) কাজ করে না।
কোয়েটজলকোটল

2
জন্য সোর্স কোড @Quetzalcoatl sorted()হয় /Python/bltinmodule.c যদিও এটা ঠিক কল list.sort()তাই বাস্তব উৎস রয়েছে /Objects/listobject.c
বরিস

35

@ ক্রিসের উত্তর পরিপূরক করার জন্য এখানে একটি কুকবুক উত্তর দেওয়া হয়েছে , সিপিথন গিটহাব এ চলে গেছে এবং মার্কুরিয়াল সংগ্রহস্থল আর আপডেট হবে না:

  1. প্রয়োজনে গিট ইনস্টল করুন।
  2. git clone https://github.com/python/cpython.git

  3. কোড cpython-> নামক একটি উপ-ডিরেক্টরিতে চেকআউট করবেcd cpython

  4. ধরা যাক আমরা এর সংজ্ঞা খুঁজছি print()...
  5. egrep --color=always -R 'print' | less -R
  6. আহা! দেখুন Python/bltinmodule.c->builtin_print()

উপভোগ করুন।


21

এখানে চিত্র বর্ণনা লিখুন

নীচের উত্সটি খুঁজতে আমাকে কিছুটা খনন করতে Built-in Functionsহয়েছিল কারণ অনুসন্ধানে হাজার হাজার ফলাফল পাওয়া যাবে। (শুভকামনা এটির উত্সটি কোথায় তা খুঁজে বের করার জন্য যে কোনওটির জন্য অনুসন্ধান করুন)

যাইহোক, bltinmodule.cফাংশন দিয়ে শুরু করে সমস্ত ফাংশন সংজ্ঞায়িত হয়builtin_{functionname}

অন্তর্নির্মিত উত্স: https://github.com/python/cpython/blob/master/Python/bltinmodule.c

অন্তর্নির্মিত প্রকারের জন্য: https://github.com/python/cpython/tree/master/Objects


1
একটি তালিকা একটি অবজেক্ট / প্রকার, বিল্টিন ফাংশন নয়। আপনি এর জন্য বাস্তবায়ন বিশদটি listobject.c github.com/python/cpython/tree/master/Objects
उपयोगकर्ता 1767754

19

IPython : শেল এই সহজ করে তোলে function?আপনি ডকুমেন্টেশন দেব। function??কোডও দেখায় তবে এটি কেবল খাঁটি অজগর ফাংশনগুলির জন্যই কাজ করে।

তারপরে আপনি সর্বদা (সি) পাইথনের উত্স কোডটি ডাউনলোড করতে পারেন ।

আপনি যদি মূল কার্যকারিতার অজগর বাস্তবায়নে আগ্রহী হন তবে পাইপাই উত্সটি দেখুন a


1
পিপিপি বেশিরভাগ অন্তর্নির্মিত স্টাফের জন্য আরপিথন ব্যবহার করে যা সি থেকে প্রায় নিম্ন স্তরের থেকে পাইথনের মতো প্রায় উচ্চ স্তরের হতে পারে। সাধারণত এটি মাঝখানে হয়। উভয় ক্ষেত্রেই এটি স্ট্যাটিকালি টাইপ করা থাকে, সুতরাং এটি সত্যই পাইথন নয়।


8

2 পদ্ধতি,

  1. আপনি স্নিপেট ব্যবহার করে ব্যবহার পরীক্ষা করতে পারেন help()
  2. আপনি এই মডিউল ব্যবহার করে লুকানো কোড চেক করতে পারেন inspect

1) পরিদর্শন:

আপনি যে কোডটি চান সেটি অন্বেষণ করতে ইনপ্যাক্ট মডিউলটি ব্যবহার করুন ... দ্রষ্টব্য: আপনি কেবলমাত্র আমদানি করা মডিউলগুলি (ওরফে) প্যাকেজের জন্য কোড অন্বেষণ করতে পারবেন

যেমন:

  >>> import randint  
  >>> from inspect import getsource
  >>> getsource(randint) # here i am going to explore code for package called `randint`

2) সহায়তা ():

help()বিল্টিন ফাংশনগুলির পাশাপাশি এর কোড সম্পর্কে সহায়তা পেতে আপনি কেবল কমান্ডটি ব্যবহার করতে পারেন ।

যেমন: আপনি যদি স্ট্র (() এর কোড দেখতে চান তবে সহজভাবে টাইপ করুন - help(str)

এটি এভাবে ফিরে আসবে,

>>> help(str)
Help on class str in module __builtin__:

class str(basestring)
 |  str(object='') -> string
 |
 |  Return a nice string representation of the object.
 |  If the argument is a string, the return value is the same object.
 |
 |  Method resolution order:
 |      str
 |      basestring
 |      object
 |
 |  Methods defined here:
 |
 |  __add__(...)
 |      x.__add__(y) <==> x+y
 |
 |  __contains__(...)
 |      x.__contains__(y) <==> y in x
 |
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |
 |  __format__(...)
 |      S.__format__(format_spec) -> string
 |
 |      Return a formatted version of S as described by format_spec.
 |
 |  __ge__(...)
 |      x.__ge__(y) <==> x>=y
 |
 |  __getattribute__(...)
-- More  --

4
ওপি বিশেষত কোডটি দেখতে চায়, সহায়তা দেয় কেবল ডকুমেন্টেশন।
0xc0de

6

বেশ অজানা সংস্থানটি পাইথন বিকাশকারী গাইড

একটি (কিছুটা) সাম্প্রতিক জিএইচ ইস্যুতে , আপনি যে প্রশ্নটি জিজ্ঞাসা করছেন সে বিষয়ে সম্বোধনের জন্য একটি নতুন অধ্যায় যুক্ত করা হয়েছে: সিপিথন উত্স কোড বিন্যাস । যদি কিছু পরিবর্তন হয় তবে সেই সংস্থানটিও আপডেট হবে get


1

@ জিম দ্বারা উল্লিখিত হিসাবে, ফাইল সংগঠনটি এখানে বর্ণিত হয়েছে । সহজে আবিষ্কারের জন্য পুনরুত্পাদন:

পাইথন মডিউলগুলির জন্য, সাধারণ বিন্যাসটি হ'ল:

Lib/<module>.py
Modules/_<module>.c (if theres also a C accelerator module)
Lib/test/test_<module>.py
Doc/library/<module>.rst

কেবল এক্সটেনশান-মডিউলগুলির জন্য, সাধারণ লেআউটটি হ'ল:

Modules/<module>module.c
Lib/test/test_<module>.py
Doc/library/<module>.rst

অন্তর্নির্মিত ধরণের জন্য, সাধারণ লেআউটটি হ'ল:

Objects/<builtin>object.c
Lib/test/test_<builtin>.py
Doc/library/stdtypes.rst

বিল্টিন ফাংশনগুলির জন্য, সাধারণ লেআউটটি হ'ল:

Python/bltinmodule.c
Lib/test/test_builtin.py
Doc/library/functions.rst

কিছু ব্যতিক্রম:

builtin type int is at Objects/longobject.c
builtin type str is at Objects/unicodeobject.c
builtin module sys is at Python/sysmodule.c
builtin module marshal is at Python/marshal.c
Windows-only module winreg is at PC/winreg.c
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.