我使用import命令包含一个python文件commands.py
该文件如下:
import datetime def what_time_is_it(): today = datetime.date.today() return(str(today)) def list_commands(): all_commands = ('list_commands', 'what time is it') return(all_commands)
我想主脚本列出commands.py中的函数,所以我用dir(commands)
它来输出:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'datetime', 'list_commands', 'what_time_is_it']
然后我尝试使用正则表达式删除包含'__'的项目,如下所示:
commands_list = dir(commands) for com in commands_list: if re.match('__.+__', com): commands_list.remove(com) else: pass
这不起作用.如果我尝试在没有for循环或正则表达式的情况下执行此操作,它声称该条目(我刚刚从print(list)复制和粘贴的条目不在列表中.
作为次要问题,我可以让dir只列出函数,而不是'datetime'吗?
在迭代时不能修改列表,而是使用列表推导:
commands_list = dir(commands) commands_list = [com for com in commands_list if not re.match('__.+__', com)]
作为第二个问题,您可以使用callable
检查变量是否可调用.