在Python中使用字符串作为函数的参数

时间:2018-03-10 07:12:34

标签: python python-3.x

我遇到了一个无法用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循环中所示。但是,如果我使用上面显示的语法,我会收到语法错误。这个原则还有其他应用,这是一个我能想到的最好的例子。

提前致谢。

2 个答案:

答案 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))

更多详情:

  1. 您的代码没有语法错误。并非每个错误都是语法错误。
  2. 最后你写了phonebook而不是phoneBook
  3. phoneBook.dir没有任何意义。
  4. help执行打印并返回None,因此只需help(...)就足够了,而help(...) + '...'将失败并且不需要print(help(...))
  5. dir(phonebook)[i]出现两次,dir(phonebook)三次。使用变量!
  6. 使用更好的for循环!你很少需要for i in range(...),你通常可以直接迭代事物。
  7. 如果您想在每种方法的帮助后打印空行或其他内容,只需print('\n\n')
  8. help(method)不起作用,因为例如method'clear'那么那将是help('clear'),因为没有内置函数简称为clear不给任何东西。换句话说,您需要phoneBook.clear的帮助,而不仅仅是clear。要动态获取phoneBook.<method name here>,请使用getattr(phoneBook, method)

答案 1 :(得分:1)

你是说像这样的smth?这确实会打印所有非dunder方法。

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}}