• 函数与生成器


    一、函数

    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产生输出以保证函数的独立性;

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

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

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

      聚合性:

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

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

  • 相关阅读:
    企业云盘安全性如何 怎样部署
    Sentinel 控制台部署
    nginx代理静态页面添加二级目录
    java socket
    IDEA
    golang代码生成器
    es 单节点问题
    代码模板
    错误摘要 HTTP 错误 403.14
    安装.Net Framework 4.6.2无法安装的2种情况
  • 原文地址:https://www.cnblogs.com/Jweiqing/p/8849537.html
Copyright © 2020-2023  润新知