zoukankan      html  css  js  c++  java
  • python学习之路 第五天

    1、装饰器:

        #!/usr/bin/env python3

        user_status = False #用户登录了就把这个改成True

        def login(auth_type): #把要执行的模块从这里传进来

            def auth(func):

                def inner(*args,**kwargs):#再定义一层函数

                    if auth_type == "qq":

                        _username = "tom" #假装这是DB里存的用户信息

                        _password = "abc123" #假装这是DB里存的用户信息

                        global user_status

                        if user_status == False:

                            username = input("user:")

                            password = input("pasword:")

                            if username == _username and password == _password:

                                print("welcome login....")

                                user_status = True

                            else:

                                print("wrong username or password!")

                        if user_status == True:

                            return func(*args,**kwargs) # 看这里看这里,只要验证通过了,就调用相应功能

                    else:

                        print("only support qq ")

                return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数

            return auth

        def home():

            print("---首页----")

        @login('qq')

         def python():

            print("----python专区----")

        def sql():

            print("----sql专区----")

        @login('weibo')

         def css():

            print("----css专区----")

        home()

        python()

        运行结果:

        ---首页----
        user:tom
        pasword:abc123
        welcome login....
        ----python专区----

        注:   参考学习地址:http://www.cnblogs.com/alex3714/articles/5765046.html

    2、def w1(a):

             def b(c,d):

                 print(111)

             return b

         @w1

         def show():

             print("show")

         注:先执行w1,把自己装饰的函数的函数名当作参数,即w1(show),show 函数重新定义,w1(show) 返回值 新show= b。

         注:@w1()括号内有参数,先执行w1(),然后在按上面步骤进行后续操作。 

    3、递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

         递归算法解决问题的特点:

         (1)递归就是在过程或函数里调用自身。

         (2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

         (3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡用递归算法设计程序。

         (4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等。

         递归算法所体现的“重复”一般有三个要求:

         一是每次调用在规模上都有所缩小(通常减半);

         二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

         三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因为每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

    4、def func(arg1,arg2,stop):

             if arg1 == 0:

                 print(arg1,arg2)

              arg3 = arg1 + arg2

              print(arg3)

              if arg3 < stop:

                  func(arg2,arg3,stop)

         func(0,1)

         运行结果:0 1   (前两个数相加值等于下一个数,斐波那契数列。)
                       1
                       2
                       3
                       5
                       8
                       13
                       21
                       34

    5、def calc(n):

         print(n)

         if n/2 > 1:

             res = calc(n/2)

             return res

         calc(100)

         运行结果:100 50.0 25.0 12.5 6.25 3.125 1.5625

    6、def binary_search(data_source,find_n):

            mid = int(len(data_source)/2)

            if len(data_source) >= 1:

                if data_source[mid] > find_n:

          # data in left

                    print("data in left of [%s]" % data_source[mid])

                    binary_search(data_source[:mid],find_n)

                elif data_source[mid] < find_n:  # data in right

                    print("data in right of [%s]" % data_source[mid])

                    binary_search(data_source[mid:],find_n)

                else:

                    print("found find_s,",data_source[mid])

            else:

                print("cannot find..")

        if __name__ == '__main__':

            data = list(range(1,600))

            print(data)

            binary_search(data,400)

         运行结果:data in right of [300]
                       data in left of [450]
                       data in right of [375]
                       data in left of [412]
                       data in right of [393]
                       data in left of [402]
                       data in right of [397]
                       data in right of [399]
                       found find_s, 400

    7、算法:

         矩阵旋转90度

         #!/usr/bin/env python3

         data = [[col for col in range(10)] for row in range(10)]

         print(data) for row in data:

              print(row)

              print('-----------')

          #r_index 行下标,c_index 列下标,tmp 临时存储,data[][]矩阵地址,如data[0][0]=0。

          for r_index,row in enumerate(data):   #enumerate()函数用于遍历序列中的元素以及它们的下标

              for c_index in range(r_index,len(row)):

                  tmp = data[c_index][r_index]

                  data[c_index][r_index] = row[c_index]

                  data[r_index][c_index] = tmp

               print('-----------')

         for r in data:

         print(r)

         运行结果:[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

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

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

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

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

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

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

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

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

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

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

         ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------

         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

         [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

         [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

         [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]

         [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

         [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

         [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]

         [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]

         [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]

         [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]

  • 相关阅读:
    《Effective Java 第三版》——第五章 泛型
    线性代数在数据科学中的十个强大应用(一)
    ​知识图谱里的知识存储:neo4j的介绍和使用
    一份从入门到精通NLP的完整指南 | NLPer
    NeurIPS审稿引发吐槽大会,落选者把荒唐意见怼了个遍:“我谢谢你们了”
    知识图谱与机器学习|KG入门 -- Part2 建立知识图谱
    知识图谱与机器学习 | KG入门 -- Part1-b 图深度学习
    ​知识图谱与机器学习 | KG入门 -- Part1 Data Fabric
    使用特定领域的文档构建知识图谱 | 教程
    ICCV 2019|70 篇论文抢先读,含目标检测/自动驾驶/GCN/等(提供PDF下载)
  • 原文地址:https://www.cnblogs.com/yunv724/p/6223244.html
Copyright © 2011-2022 走看看