Определите функцию python, которая принимает аргументы, но также работает без аргументов. - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь обернуть встроенную функцию dir(), чтобы отсортировать результаты. Если я определю и передам аргумент, он будет работать нормально. Однако, если я попытаюсь заставить его показать пространство имен root, он не будет работать, потому что он либо требует аргумента, либо получает пустой объект, для которого вместо него возвращаются атрибуты.

Я попытался переопределить его вместо def dirs(*function): argv, но это возвращает список, а не текущую область.

Есть ли способ обернуть это встроенное с той же функциональностью? Я не знаю C, поэтому встроенный исходный код мне не сильно помог, поиск показывает много результатов для файлов в каталогах, но я не могу найти, как взломать этот.

def dirs(function):
    print '{}'.format(type(function))
    try:
        for i in sorted(dir(function)):
            print '{}'.format(i)
    except:
        for i in sorted(dir()):
            print '{}'.format(i)

Я перепробовал все типы данных, которые мог придумать, но я не могу воспроизвести поведение эталонного поведения ниже.

print '# first for reference, a sorted dir()'
for i in sorted(dir()):
    print '{}'.format(i)
print '# next up: double quoted string'
dirs("")
print '# next up: None'
dirs(None)
print '# next up: empty dictionary'
dirs({})
print '# next up: empty set'
dirs(())
print '# next up: empty list'
dirs([])

Вот пример выходных данных , усеченный для краткости.

# Result:
# first for reference, a sorted dir()
FnOpenPluginInstaller
__allcompletions
[...]
tools_dir
windowContext
# next up: double quoted string
<type 'str'>
__add__
__class__
[...]
upper
zfill
# next up: None
<type 'NoneType'>
__class__
__delattr__
[...]
__str__
__subclasshook__
# next up: empty dictionary
<type 'dict'>
__class__
__cmp__
[...]
viewkeys
viewvalues
# next up: empty set
<type 'tuple'>
__add__
__class__
[...]
count
index
# next up: empty list
<type 'list'>
__add__
__class__
[...]
reverse
sort

1 Ответ

1 голос
/ 12 февраля 2020

Как насчет этого:

def dirs(function=None):
    if function is None:
        dirs_notsorted = dir()
    else:
        dirs_notsorted = dir(function)
    for i in sorted(dirs_notsorted):
            print('{}'.format(i))

 print(dirs())
 print(dirs([]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...