在Python中,您可以dir
在任何对象上使用该函数来获取其实例函数名称的列表:
>>> dir('abc')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__','__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
我想知道这是否可以在程序中比调用几个冗长命名的函数有用的高尔夫技巧。在这种情况下,我可以创建一个函数选择函数F
:
F=lambda o,i:eval('o.'+dir(o)[i])
现在假设我有一个字符串s
,我想将首字母大写的结果存储在变量中c
。然后而不是c=s.capitalize(),
我可以注意到它capitalize
在上面列表中的位置33并执行以下操作:
s='abc'
c=G(s,33)()
分配'Abc'
给c
。
我的问题是,这在大多数情况下是否可行。尤其是,
- 我是否总可以指望按ASCII值按字典顺序排序的列表?
- 次要版本之间的可用列表是否有很多更改?
- 实现之间是否存在差异?
另外,有人在PPCG上使用过此功能吗?
我已经看到使用JavaScript和C#完成类似的操作。
—
彼得·泰勒
您还可以使用内建做到这一点:
—
grc 2014年
dir(__builtins__)
。这是一个替代函数:F=lambda o,i:getattr(o,dir(o)[i])
。
还要注意,根据您打算使用的功能,可以像这样
—
FryAmTheEggman 2014年
()
在末尾添加F
:F=lambda o,i:eval('o.'+dir(o)[i])()
然后c=F('abc',33)
将'Abc'分配给c
。