我遇到了一个无法用Python解决的问题。这个问题很难说出来,所以请看下面的例子。
phoneBook = {"Joe":12, "Jason":13, "Johnny":14}
for i in range(0, len(dir(phoneBook))):
if "__" not in dir(phoneBook)[i]:
print(help(phoneBook.dir(phonebook)[i]) + "\n\n")
我想要做的是为每个不包含下划线的dir()条目打印help()方法。 (即,调用dir(phoneBook)返回clear,copy,fromkeys,get,items等...)。我想要help()方法然后打印dir()返回的每个值,如上面的for循环中所示。但是,如果我使用上面显示的语法,我会收到语法错误。这个原则还有其他应用,这是一个我能想到的最好的例子。
提前致谢。
答案 0 :(得分:2)
这是一个工作版本:
phoneBook = {"Joe": 12, "Jason": 13, "Johnny": 14}
for method_name in dir(phoneBook):
if "__" not in method_name:
help(getattr(phoneBook, method_name))
更多详情:
phonebook
而不是phoneBook
。phoneBook.dir
没有任何意义。help
执行打印并返回None
,因此只需help(...)
就足够了,而help(...) + '...'
将失败并且不需要print(help(...))
。dir(phonebook)[i]
出现两次,dir(phonebook)
三次。使用变量!for i in range(...)
,你通常可以直接迭代事物。print('\n\n')
。help(method)
不起作用,因为例如method
是'clear'
那么那将是help('clear')
,因为没有内置函数简称为clear
不给任何东西。换句话说,您需要phoneBook.clear
的帮助,而不仅仅是clear
。要动态获取phoneBook.<method name here>
,请使用getattr(phoneBook, method)
。答案 1 :(得分:1)
phoneBook = {"Joe":12, "Jason":13, "Johnny":14}
for method in dir(phoneBook):
if "__" not in method:
print(help(getattr(phoneBook, method)) + "\n\n")
从标题获取字符串属性getattr(your_object, your_method_str)
但实际上,当您尝试help(getattr(phoneBook, method)) + "\n\n"
时,TypeError
将会help
,因为help(getattr(phoneBook, method_name))
不会返回任何内容。因此,您需要相应地处理它,可能只需将.__doc__
作为@Alex Hall said
<强>更新强>
如果您想使用方法说明的自定义格式,可以使用print(getattr(phoneBook, method).__doc__, end='\n\n')
{{1}}