函数

  匿名函数

    lambda通常和其他函数联合使用,不该独立存在。

    可以返回多个值:

      f=lambda x,y,z:(x+1,y+1,z+1)

      print(f(1,2,3))

      输出

        (2,3,4)

 

  编程的方法(不同流派):  

    面向过程:基本编程单位是函数(大过程拆分成小的部分)

    函数式 :编程语言定义的函数+数学意义的函数(精简但不易读)

    面向对象

 

  函数式编程

    不可变(不用变量保存状态,不修改变量);函数即变量;尾调用(在函数的最后一步调用另外一个函数,最后一行不一定是函数的最后一步,'return 函数名(参数)+数字'不算尾调用,实际分为两步:res=函数名(参数)然后是res+数字)。函数式编程实现简单,但易读性差。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def foo(n):
    print(n)
def bar(name):
    print('My name is %s'%name)
foo(bar('alex'))

输出

My name is alex
None

    函数的返回值可以是函数(本身或者任意函数) 

    return 函数名() 代表的是return这个函数的返回值

 

    高阶函数:满足函数接收的参数是一个函数名或者返回值中包含函数的函数。

    尾递归调用优化,省着保存之前的状态。

  map函数

   普通程序写法

1 # 终极版本
2 def map_test(func, array):
3     ret = []
4     for i in array:
5         res = func(i)
6         ret.append(res)
7     return ret
8 print(map_test(lambda x: x + 1, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

输出

[2, 3, 4, 5, 6, 7, 8, 9, 10]

 

  使用map函数:(Python2中生成的直接就是列表;map的处理方法不一定非是lambda函数,如果逻辑复杂,使用自定义函数;map的可迭代参数不一定是列表,可迭代的都可以)

    num_1=[1, 2, 3, 4, 5, 6, 7, 8, 9]

    res=map(lambda x:x+1,num_1)  #生成的是迭代器,只能迭代一次。处理方法+可迭代对象。

    print(list(res))

 

  filter函数

  filter留下满足函数的参数。

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 move_people=['x_sb','y','z_sb','w']
4 ret=filter(lambda n:not n.endswith('sb'),move_people)
5 print(list(ret))

输出

['y', 'w']

  reduce函数

from functools import reduce

reduce(lambda x,y:x*y,num_l,1)  #函数、对象、初始值

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 from functools import reduce
4 s='abcdefg'
5 print(reduce(lambda x,y:x+'_'+y,s))

输出

a_b_c_d_e_f_g

 

  map/filer/reduce总结

  map:处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样。

  filter:遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来。

  reduce

  

  内置函数

  abs()取绝对值

  all()括号内只能有一个参数,可以是可迭代对象字符串、列表、元组、字典、集合(如果有值则判断转换为布尔值后是否全为真,如果为空输出也是True)

  any()括号内只能有一个参数,参数只要有为真就返回True

  bin()10->2进制

  hex()10->16进制

  oct()10->8进制

  bool()

  bytes()字符串转换为字节,编码  #转化为二进制 bytes('你好',encoding='utf-8')  #字符串在内存上编码是Unicode  #用什么编码就用什么解码bytes('你好',encoding='utf-8').decode('utf-8')  #如果不写,python3默认utf-8解码

  chr()  例如:chr(97)   即'a'  ord()是反过来

  dir()某个对象下有哪些方法(只有名字)  比如dict 

  divmod()分页功能  divmod(10,3)总共10条记录,一页显示3条

  enumerate()

  eval()把字符串中的数据结构提取出来 dic_str='{'name':'alex'}'  d=eval(dic_str)  print(d['name'])  输出'alex'  另外,可以把字符串中的表达式进行运算

   hash()进行哈希运算的,可哈希的数据类型即不可变数据类型,对应的哈希值固定且哈希值不可反推。不管传入参数长度多长,转化为哈希值长度都固定。用于查看看数据有没有被篡改。

  help()

  isinstance()  例如print(isinstance(1,int))  输出True

  globals()显示全局变量

  locals()显示局部变量

  max()  ;  min()

  

  

  

 

   

posted on 2018-09-18 10:41  阿缘要努力变强  阅读(169)  评论(0编辑  收藏  举报