函数与生成器

一、函数

1.1、函数的关键字

def      定义函数

return      返回值

pass      占位

exit(1)      直接退出并返回1

1.2、高阶函数

高阶函数都是可以通过代码逻辑实现,但是自己写的函数的复杂程度或者算法不一定有人家内置的好

①、map高阶函数:

def f(x):
  return x*x

print(map(f, [1, 2, 3, 4]))
print(list((map(f, [1, 2, 3, 4]))))
for i in map(f, [1, 2, 3, 4]):
  print(i)

 

仿照map:

def testMap(fun, iter):
  l = list()
  for i in iter:
    l.append(fun(i))
  return l

print(testMap(f, [1, 2, 3, 4]))

②、filter()函数用于过滤序列,和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素,例子:

filter(lamdba x: x%2 ==1, [1, 2, 3, 4, 5])

③、reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

def add(x, y):
  return x+y

reduce(add, [1, 2, 3, 4, 5])
# 1, 2 = 3
# 3, 3 = 6
# 6, 4 = 10
# 10, 5 = 15

④、sorted排序
参数:sorted(iterable, key, reverse)
iterable 一个可迭代的对象、 key 对什么进行排序、 reverse bool类型,如果为true为反序, 默认为false、 返回值是一个list

print(sorted([1, 4, 342, 3, 45, 76, 435, 34], reverse=True))

对字典的key或者val进行排序:

m = dict(a=1, c=10, b=20, d=15)
print(m)
print(sorted(m.items()))
print(sorted(m.items(), key=lambda x: x[0]))
print(dict(sorted(m.items(), key=lambda x: x[1])))
# print(sorted(m.items(), key = lambda d:d[1], reverse = True))

1.3、列表生成式(执行效率高且经常用):

[exp for val in collection if condition]

 

a2 = [x for x in range(1, 10) if x%2==0]

print(a2)

例子(九宫格):

def jgg():
number = list()
for i in range(1, 10):
number.append(i)
for A in [x for x in range(1, 10)]:
for B in [x for x in range(1, 10) if x != A]:
for C in [x for x in range(1, 10) if x != A and x != B]:
for D in [x for x in range(1, 10) if x != A and x != B and x!= C]:
print("A = {0} B = {1} C = {2} D = {3}".format(A, B, C, D))

1.4、生成器:

方法一:
(exp for val in collection if condition)
 
a1 = (x for x in range(1, 10) if x%2==0)
print(a1)
for i in a1:
print(i)
print(next(a1)) #python3 是直接调用next方法,python2中是使用a1.next()


方法二:
def test():
a = 1
for i in range(1, 10):
yield i
# return i
a += 1
# return i

# yield 可以理解成return,但是比return多一些角色
# yiele 每次都返回,但是下一次取值时,从上一次yield的下一行开始
m = test()
print(m)

1.5、示例(把1.xtx的内容按照uid排序):

import codecs

with codecs.open("1.txt", "r") as l:
result = sorted(l.readlines(), key=lambda item: int(item.split(":")[2]))
for i in result:
print(i)

 1.6、函数的设计规范

  耦合性:

    ①、通过参数接收输入,以及通过return产生输出以保证函数的独立性;

    ②、尽量减少使用全局变量进行函数间的通信;

    ③、不要在函数中修改可变类型的参数;

    ④、避免直接改变定义在另外一个模块中的变量;

  聚合性:

    ①、每个函数都应该有一个单一的、统一的目标;

    ②、每个函数的功能都应该相对简单;

 

posted @ 2018-04-15 21:18  一条咸鱼的梦想  阅读(140)  评论(0编辑  收藏  举报