الفرق بين المراجعتين لصفحة: «Python/dir»

من موسوعة حسوب
ط تعديل عنوان الصفحة
ط استبدال النص - 'Python/defining-functions' ب'Python/defining_functions'
 
(8 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>dir()‎</code> في بايثون}}</noinclude>
<noinclude>{{DISPLAYTITLE:الدالة <code>dir()‎</code> في بايثون}}</noinclude>
تستخدم الدالة الداخلية <code>dir()‎</code> لمعرفة الأسماء التي تعرّفها الوحدة، وتعيد هذه الداة [[Python/list|قائمة]] مرتّبة من [[Python/str|السلاسل النصية]]:<syntaxhighlight lang="python3">
تستخدم الدالة الداخلية <code>dir()‎</code> لمعرفة الأسماء التي تعرّفها الوحدة، وتعيد هذه الدالة [[Python/list|قائمة]] مرتّبة من [[Python/str|السلاسل النصية]]:<syntaxhighlight lang="python3">
>>> import fibo, sys
>>> import fibo, sys
>>> dir(fibo)
>>> dir(fibo)
سطر 30: سطر 30:
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']


</syntaxhighlight>لاحظ أنّ هذه الدالة تسرد جميع أنواع الأسماء: المتغيرات [[Python/modules|والوحدات]] و<nowiki/>[[Python/defining-functions|الدوال]] وغيرها، ولكنّها لا تسرد أسماء الدوال والمتغيرات الداخلية، وللحصول على قائمة بها يجب استخدام الدالة تمرير [[Python/standard-modules|الوحدة القياسية]] <code>builtins</code> كوسيط للدالة <code>dir()‎</code>:<syntaxhighlight lang="python3">
</syntaxhighlight>لاحظ أنّ هذه الدالة تسرد جميع أنواع الأسماء: المتغيرات [[Python/modules|والوحدات]] و<nowiki/>[[Python/defining_functions|الدوال]] وغيرها، ولكنّها لا تسرد أسماء الدوال والمتغيرات الداخلية، وللحصول على قائمة بها يجب تمرير [[Python/standard_modules|الوحدة القياسية]] <code>builtins</code> كوسيط للدالة <code>dir()‎</code>:<syntaxhighlight lang="python3">
>>> import builtins
>>> import builtins
>>> dir(builtins)   
>>> dir(builtins)   
سطر 63: سطر 63:
  'zip']
  'zip']
</syntaxhighlight>
</syntaxhighlight>
==ملاحظات==
إن كان الكائن المُمرّر إلى الدّالة يحتوي على تابعٍ باسم <code>‎_‎_‎dir‎_‎_()‎</code>، فسيُستدعى التّابع، والذي يجب عليه أن يُعيد قائمة خاصيّات الكائن. يسمح هذا للكائنات التي تُعرّف التّابع <code>‎_‎_‎getattr‎_‎_()‎</code> أو التّابع <code>‎_‎_‎getattribute‎_‎_()‎</code> بتغيير كيفيّة عرض الدّالة <code>‎dir‎()‎</code> لخاصيّات الكائن.


== مصادر ==
إن لم يكن التّابع الخاصّ <code>‎_‎_‎dir‎_‎_()‎</code> موجودًا، فستُحاول الدّالة <code>‎dir‎()‎</code> الحصول على معلومات حول الكائن من الخاصيّة <code>‎_‎_‎dict‎_‎_‎</code> الخاصّة به إن عُرّفَت، وتحصل على معلومات كذلك من نوع الكائن.
* صفحة [https://docs.python.org/3/tutorial/modules.html#the-dir-function Modules] في توثيق بايثون الرسمي.
 
تختلف آليّة عمل الدّالة حسب نوع الكائن، وذلك لمُحاولة الدّالة توفيرَ أكبر قدر من المعلومات المُفيدة عوضًا عن عرض المعلومات كلّها:
*إن كان الكائن وحدةً، فستحتوي القائمة على أسماء خاصيّات الوحدة.
*إن كان الكائن نوعًا (type) أو كائن صنف (class object)، فستحتوي القائمة على أسماء خاصيّاته وخاصيّات الأصناف التي ورِثَ منها تعاوديًّا (recursively).
*في غير ما سبق من حالات، ستحتوي القائمة على أسماء خاصيّات الكائن، وأسماء خاصيّات صنفه،  وأسماء خاصيّات الأصناف التي ورث منها صنفُه تعاوديًّا.
ولأنّ الدّالة تُستخدم أساسًا كأداة لاستكشاف معلومات حول الكائنات في سطر الأوامر التّفاعليّ، فإنّها تُحاول توفيرَ أكثر معلومات مُفيدة عوضًا عن عرضها كلّها، وقد تتغيّر المعلومات التّي تعرضها باختلاف نسخ Python المستخدمة.
==مصادر==
*[https://docs.python.org/3/library/functions.html#dir قسم الدالة dir في صفحة Functions في توثيق Python الرسمي].
*صفحة [https://docs.python.org/3/tutorial/modules.html#the-dir-function Modules] في توثيق بايثون الرسمي.
[[تصنيف:Python]]
[[تصنيف:Python]]
[[تصنيف:Python Function]]
[[تصنيف:Python Built-in Functions]]
[[تصنيف:Python Modules]]
[[تصنيف:Python Modules]]

المراجعة الحالية بتاريخ 14:30، 29 مايو 2018

تستخدم الدالة الداخلية dir()‎ لمعرفة الأسماء التي تعرّفها الوحدة، وتعيد هذه الدالة قائمة مرتّبة من السلاسل النصية:

>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys)  
['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
 '__package__', '__stderr__', '__stdin__', '__stdout__',
 '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
 '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
 'call_tracing', 'callstats', 'copyright', 'displayhook',
 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
 'thread_info', 'version', 'version_info', 'warnoptions']

في حال عدم تمرير أي وسائط فإنّ الدالة dir()‎ تسرد الأسماء المعرّفة في الوقت الحاضر:

>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir()
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']

لاحظ أنّ هذه الدالة تسرد جميع أنواع الأسماء: المتغيرات والوحدات والدوال وغيرها، ولكنّها لا تسرد أسماء الدوال والمتغيرات الداخلية، وللحصول على قائمة بها يجب تمرير الوحدة القياسية builtins كوسيط للدالة dir()‎:

>>> import builtins
>>> dir(builtins)  
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',
 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',
 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError',
 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning',
 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',
 'FileExistsError', 'FileNotFoundError', 'FloatingPointError',
 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError',
 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented',
 'NotImplementedError', 'OSError', 'OverflowError',
 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError',
 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning',
 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError',
 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError',
 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',
 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',
 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__',
 '__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs',
 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable',
 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits',
 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit',
 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',
 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',
 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview',
 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property',
 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars',
 'zip']

ملاحظات

إن كان الكائن المُمرّر إلى الدّالة يحتوي على تابعٍ باسم ‎_‎_‎dir‎_‎_()‎، فسيُستدعى التّابع، والذي يجب عليه أن يُعيد قائمة خاصيّات الكائن. يسمح هذا للكائنات التي تُعرّف التّابع ‎_‎_‎getattr‎_‎_()‎ أو التّابع ‎_‎_‎getattribute‎_‎_()‎ بتغيير كيفيّة عرض الدّالة ‎dir‎()‎ لخاصيّات الكائن.

إن لم يكن التّابع الخاصّ ‎_‎_‎dir‎_‎_()‎ موجودًا، فستُحاول الدّالة ‎dir‎()‎ الحصول على معلومات حول الكائن من الخاصيّة ‎_‎_‎dict‎_‎_‎ الخاصّة به إن عُرّفَت، وتحصل على معلومات كذلك من نوع الكائن.

تختلف آليّة عمل الدّالة حسب نوع الكائن، وذلك لمُحاولة الدّالة توفيرَ أكبر قدر من المعلومات المُفيدة عوضًا عن عرض المعلومات كلّها:

  • إن كان الكائن وحدةً، فستحتوي القائمة على أسماء خاصيّات الوحدة.
  • إن كان الكائن نوعًا (type) أو كائن صنف (class object)، فستحتوي القائمة على أسماء خاصيّاته وخاصيّات الأصناف التي ورِثَ منها تعاوديًّا (recursively).
  • في غير ما سبق من حالات، ستحتوي القائمة على أسماء خاصيّات الكائن، وأسماء خاصيّات صنفه، وأسماء خاصيّات الأصناف التي ورث منها صنفُه تعاوديًّا.

ولأنّ الدّالة تُستخدم أساسًا كأداة لاستكشاف معلومات حول الكائنات في سطر الأوامر التّفاعليّ، فإنّها تُحاول توفيرَ أكثر معلومات مُفيدة عوضًا عن عرضها كلّها، وقد تتغيّر المعلومات التّي تعرضها باختلاف نسخ Python المستخدمة.

مصادر