Python遞歸列出目錄中文件腳本及其匿名函數

1.遞歸列出目錄裏的文件的腳本舉例

列出目錄中的文件能夠經過下面方法:os.listdir()

In [1]: import os

In [4]: os.listdir('/root')

Out[4]:

['.tcshrc',

'.bash_history',

'.bashrc',

'ENV',

'.cache',

'.config',

'.cshrc',

'.bash_logout',

'python',

'.ssh',

'shell',

'.bash_profile',

'.ipython',

'.viminfo',

'dictionary.txt',

'1.txt']

判斷是否爲目錄:python

In [5]: os.path.isdir('/home')

Out[5]: True

判斷是否爲文件:shell

In [7]: os.path.isfile('/etc/rc.local')

Out[7]: True

拼接文件名字的絕對路徑:vim

In [8]: os.path.join('/etc/','passwd','abc')

Out[8]: '/etc/passwd/abc'

列出目錄下全部文件腳本若是下:bash

#!/usr/bin/env python

# 2018/11/29 15:11

#FengXiaoqing

# listDir.py

import os

import sys

def print_files(path):

    lsdir = os.listdir(path)

    dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))]

    files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]

    if dirs:

        for d in dirs:

            print_files(os.path.join(path,d))

    if files:

        for f in files:

            print os.path.join(path,f)

print_files(sys.argv[1])

2.匿名函數lambda

lambda函數是一種快速定義單選的最小函數,能夠用在任何須要函數的地方。

3*5實現方法:

In [1]: def fun(x,y):

...:     return x * y

...:

In [2]: fun(3,5)

Out[2]: 15

匿名函數定義若是下:ssh

In [3]: lambda x,y:x * y

Out[3]: <function __main__.<lambda>>    #返回的對象

In [4]: r = lambda x,y:x * y

In [6]: r(3,5)

Out[6]: 15

匿名函數優勢:函數

1.使用python寫一些腳本時候,使用lambda能夠省去定義函數的過程,讓代碼更加精簡。

2.對於一些抽象的,不會被別的地方再重複使用的函數,有時候函數起個名字也是個難題,使用lambda不須要層次理論考慮命名的問題。

3.使用lambda在某些時候讓代碼更容易理解。

lambda基礎:ui

lambda語句中,冒號前是參數,能夠有多個,逗號隔開,冒號右邊是返回值。

lambda語句構建的實際上是一個函數對象。

help(reduce)code

Help on built-in function reduce in module __builtin__:

reduce(...)

reduce(function, sequence[, initial]) -> value

Apply a function of two arguments cumulatively to the items of a sequence,

from left to right, so as to reduce the sequence to a single value.

For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates

((((1+2)+3)+4)+5).  If initial is present, it is placed before the items

of the sequence in the calculation, and serves as a default when the

sequence is empty.

(END)

reduce二元計算:對象

In [19]: def add(x,y):

return x + y

....:

In [20]: add(1,3)

Out[20]: 4

求1到100相加的和:遞歸

In [23]: reduce(add,range(1,101))

Out[23]: 5050



In [25]: reduce(lambda x,y:x + y ,range(1,101))

Out[25]: 5050

求階乘:

In [26]: reduce(lambda x,y:x * y ,range(1,6))

Out[26]: 120
相關文章
相關標籤/搜索