Python学习笔记1

来源:互联网 发布:filter 过滤css和js 编辑:程序博客网 时间:2024/06/16 01:30

心得:由于有Java和C的一些基础Py的学习相对容易。但是Py给我相当大的震撼,感觉之前的自己就像一只活在面向对象深井中的青蛙,python让我见识到了函数式编程的辽阔世界,给了我简单到极致的编程体验。当然我不是说python能取代java什么的,不同的语言都有自己存在的方式,它们面向不同应用领域展现着自己的独到的价值。

Python基础

  • list[] tuple() dict{} set(list)
  • 位置参数 def power (***x***)
  • 默认参数 def power(x, ***n=2***)
  • 可变参数 def power(****numbers ***)
  • 关键字参数 def person(name, age, *****kw***)
  • 命名关键字参数 def person(name, age, ****, city, job***)
    • 命名关键字参数限制了关键字参数的名字,如上关键字参数只能接受city和job。
  • 参数组合
    • 顺序只能为:必选参数,默认参数,可变参数,命名关键字参数,关键字参数。
  • 切片 x[:::]
    • 第一个冒号:开始
    • 第二个冒号:结束
    • 第三个冒号:间隔
    • 列表生成式[x * x for x in range(10) if x % 2 == 0]
    • x * x: 要生成的值
    • x :遍历元素
    • in:遍历容器
    • if:遍历条件
  • 判断是否可以被迭代器迭代
    • form collection import Iterable
    • isinstance(***'abc'***, Iterable)
    • 判断'abc'是否可被for迭代
    • 把Iterable换成Iterator可以判断是否可以被nxet()迭代
  • 生成器:列表生成式[]换成()

Python函数式编程

  • 变量可以指向函数,函数名也是变量(有没有想到指针)
  • 高阶函数: 一个函数可以接受一个函数作为参数
  • map:
    • map(f, [])函数接受两个参数,一个是函数,一个是Iterable
    • f作用于list的每一个元素。
  • reduce:
    • reduce(f, [])参数类型和map一样
    • reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。
    • reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
  • filter:
    • filter()也接收一个函数和一个序列。和map()不同的是,filter()
    • 把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
    • list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
  • sorted:
    • sorted([])函数就可以对list进行排序
    • sorted([], key)函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:sorted([36, 5, -12, 9, -21], key=abs)
    • 心得: sorted函数对应于C&C++中的sort()函数,并且参数调用的顺序都是一样的,先序列,后用一个函数制定规则,并且函数的写法完全一致,只是格式从C&C++变成python。
  • 返回函数
    • 返回函数实际上就是返回函数名或者说是返回指向函数的一个变量(是不是又感受到了指针,其实理解指针对理解py极其有帮助,py并不像Java那样几乎完全抹除指针存在的痕迹,py的思想中处处隐含着指针
  • 匿名函数lambda:

    • lambda x: x * x实际上就是
      def f(x):    return x * x
  • 装饰器

    • (这让我想起了AOP,难道不是吗?)

      def log(func):    def wrapper(*args, **kw):        print('call %s():' % func.__name__)        return func(*args, **kw)    return wrapper
    • 上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处:

      @logdef now():    print('2015-3-25')
    • 调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:

      >>> now()call now():2015-3-25
原创粉丝点击