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']

    

判断是否为目录:

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

    Out[5]: True


判断是否为文件:

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

    Out[7]: True


拼接文件名字的绝对路径:

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

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


列出目录下所有文件脚本如果下:

    #!/usr/bin/env python

    # @Time     :2018-01-05 15:11

    # @Author   :FengXiaoqing

    # @file     :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


匿名函数定义如果下:

    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基础:

    lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。

    lambda语句构建的其实是一个函数对象。


help(reduce)

    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


习题

    1. 从终端接收若干个数字,要求使用filter()函数,将输入的不是数字的值剔除掉(用户输入的内容有随机性,当我们要接收一个数字的时候,他可能会输入一个字符串过来,要求当用户输入的不是数字,就剔除掉)


    2. 从终端接收若干个以空格隔开的字符串,然后去除所有的26个字符之外的字符后,打印到屏幕上

    要求:使用map()函数,map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。


    3.从终端接收若干个以空格隔开的字符串

    (1).以空格隔开的字符串为用户想要输入的一个值

    (2).用户在输入时不小心按出来了字母键

    示例如下

    "afda111 dafd222 3dfad33 4ss4dd4"

    这个字符串,其实是用户想要求 111 222 333 444 的和

    要求:把每个值中的字母去掉,并计算出所有值的和

提示:使用reduce函数,结合前两题使用过的方法,可以很简单的算出