الفرق بين المراجعتين ل"Python/dir"
ط (استبدال النص - 'Python/defining-functions' ب'Python/defining_functions') |
|||
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 30: | سطر 30: | ||
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys'] | ['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys'] | ||
− | </syntaxhighlight>لاحظ أنّ هذه الدالة تسرد جميع أنواع الأسماء: المتغيرات [[Python/modules|والوحدات]] و<nowiki/>[[Python/ | + | </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>__getattr__()</code> أو التّابع <code>__getattribute__()</code> بتغيير كيفيّة عرض الدّالة <code>dir()</code> لخاصيّات الكائن. | ||
إن لم يكن التّابع الخاصّ <code>__dir__()</code> موجودًا، فستُحاول الدّالة <code>dir()</code> الحصول على معلومات حول الكائن من الخاصيّة <code>__dict__</code> الخاصّة به إن عُرّفَت، وتحصل على معلومات كذلك من نوع الكائن. | إن لم يكن التّابع الخاصّ <code>__dir__()</code> موجودًا، فستُحاول الدّالة <code>dir()</code> الحصول على معلومات حول الكائن من الخاصيّة <code>__dict__</code> الخاصّة به إن عُرّفَت، وتحصل على معلومات كذلك من نوع الكائن. | ||
− | تختلف آليّة عمل الدّالة حسب نوع الكائن، وذلك لمُحاولة الدّالة توفيرَ | + | تختلف آليّة عمل الدّالة حسب نوع الكائن، وذلك لمُحاولة الدّالة توفيرَ أكبر قدر من المعلومات المُفيدة عوضًا عن عرض المعلومات كلّها: |
− | + | *إن كان الكائن وحدةً، فستحتوي القائمة على أسماء خاصيّات الوحدة. | |
− | * إن كان الكائن وحدةً، فستحتوي القائمة على أسماء خاصيّات الوحدة. | + | *إن كان الكائن نوعًا (type) أو كائن صنف (class object)، فستحتوي القائمة على أسماء خاصيّاته وخاصيّات الأصناف التي ورِثَ منها تعاوديًّا (recursively). |
− | * إن كان الكائن نوعًا (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] في توثيق بايثون الرسمي. | |
− | == مصادر == | ||
− | * [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 Function]] | ||
[[تصنيف:Python Built-in Functions]] | [[تصنيف: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 المستخدمة.
مصادر
- قسم الدالة dir في صفحة Functions في توثيق Python الرسمي.
- صفحة Modules في توثيق بايثون الرسمي.