例如,当使用dirnameI 遍历层次结构的多个级别时,通常会执行此操作.
grandparent = os.path.dirname(__file__)
grandparent = os.path.dirname(grandparent)
Run Code Online (Sandbox Code Playgroud)
或者,如果有更多级别.
grandparent = = os.path.dirname(__file__)
for x in xrange(5):
grandparent = os.path.dirname(grandparent)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一个不那么冗长的方法呢?
如
grandparent = y(5, os.path.dirname, __file__)
Run Code Online (Sandbox Code Playgroud)
y我正在寻找的神秘功能在哪里?
如果没有,那么这个函数会被调用么?
自己定义这样的高阶函数怎么样:
def repeat (f, x, n) :
for i in range(n):
x = f(x)
return x
Run Code Online (Sandbox Code Playgroud)
包含f您希望调用的函数、x序列中的第一个输入以及n您希望调用该函数的次数。
然后您可以使用以下命令来调用它:
>>> repeat(lambda x: x**2,2,3)
256
>>> repeat(os.path.dirname,'/home/kommusoft/testfolder/sqldump', 2)
'/home/kommusoft'
Run Code Online (Sandbox Code Playgroud)
然而,如果您打算走到目录的根目录,那么使用大量重复是不安全的:您永远不知道某个用户已经创建了超过 9000 个目录的级联。