• 函数的递归 模块和项目的编写要求


    函数的递归

    函数的递归是指重复“直接调用或者间接调用”函数本身,这是一种函数嵌套的表现形式。

    -直接调用:指的是在函数内置,直接调用函数本身。
    

    ​ -间接调用:两个函数之间的相互调用间接造成的递归。

    递归默认的深度一般是 998 或者1000

    #直接调用 函数里面嵌套函数
    def func():    
    	print('from the wrold')    
    func()func()
    >>>>>>>>>>
    from the wrold######这个循环,有递归默认的深度 998 或者1000 一般根据每一台操作系统根据硬盘来设置默认的递归深度
    from the wrold
    from the wrold
    from the wrold
      File "E:/PycharmProjects/study/fun.py", line 590, in func
        print('from the wrold')
    RecursionError: maximum recursion depth exceeded while calling a Python object
    
    #两个函数之间相互调用,形成的递归
    def foo():
        print('world')
        goo()
    
    def goo():
        print('world')
        foo()
    goo()
    >>>>>>>>>  ###报错的这个是因为形成的递归
    world
    world
    world
    worldTraceback (most recent call last):
      File "E:/PycharmProjects/study/fun.py", line 602, in <module>
        goo()
      File "E:/PycharmProjects/study/fun.py", line 601, in goo
    

    想要递归有意义,必须遵循两个条件:

    -递推:

    ​ -指的是重复的执行,每一次执行都要拿到一个更接近结果的结果;

    ​ -回溯必要有一个终止条件。

    -回溯:

    ​ -当回溯找到一个终止条件后,开始一步一步往上递推。

    	age5 == age4 +2
    

    ​ age4 == age3 + 2

    ​ age3 == age2 +2

    ​ age2 == age1 +2

    ​ age1 == 18 #回溯到终止结果

    def age(n):
        if n == 1:
            return 18
        #这里写return才能实现递归
        return age(n-1) + 2
    res = age(5)
    print(res)
    >>>>>>>
    26
    

    模块

    一、什么是包?

    -包指的是内部包含__init__.py的文件夹
    

    包的作用?

    ​ -存放模块、包可以更好的管理模块。

    二、什么是模块?

    ​ -模块是一些列功能的结合体。

    ​ #相当于与模块抱着一堆函数和代码。

    ​ -模块的本质是一个个的.py文件

    三、模块的三种来源?

    ​ 1.python 的内置模板:(python 解释器)

    ​ 比如:sys/time/os/turtle

    ​ 2.第三方模块:(别人写的)

    ​ 比如:request

    ​ 3.自定义模块:(自己写的)

    ​ 比如自己定义的demo.py 文件

    ​ 四、模块的四种表现形式

    ​ 1.使用python编写的py文件(了解)

    ​ 2.编译后共享的DLL或者C或者是C++库(了解)

    ​ 3.包下面带有__init__.py的一组py文件###( pycharmprojects---> python package ---->新建一个包 里面包括一个__init__.py

    ​ py_demo

    init.py

    ​ demo.py

    ​ demo2.py

    ​ 4.python解释器下面的py文件,

    ​ 一个个的py文件

    ​ 比如:sys os time

    二、为什么要使用模块?

    ​ 模块可以帮助我们更好的管理功能代码,比如:函数......

    ​ 可以将项目分成一个个功能,分别存放在不同的py文件(模块)中。

    三、如何创建、编写模块、并使用模块?

    ​ 鼠标右键创建py文件

    ​ -在py文件中编写python代码

    ​ -在一个文件中 通过import关键字来导入模块

    ​ 注意:import模块时,模块后面不能加.py后缀-

    -在使用文件阶段,必须要注意,谁是执行文件,谁是被导入的文件(被导入的模块)。

    ​ -模块在首次导入时,就已经固定好了,当前文件的查找是从内存查找。###相同的模块无论导入几次,都是在内存中查找,只执行一次

    -模块在导入时发生的事情:

    ​ 1.会先执行当前的执行文件,并产生执行文件中的名称空间;

    ​ 2.当执行到导入模块代码时,被导入的模块会产生一个模块的名称空间;

    ​ 3.会将被导入的模块的名称空间加载到内存中。

    如果是函数的 导入执行文件中 需要用模块.函数名 (指向的是模块的名称空间)才能执行

    给模块起的别名:

    注意 :给函数的导入 用别名.函数名,如果是打印的东西 别名.变量名

    -模块的导入方式:

    -import 模块
    

    ​ -在执行文件中直接import导入

    -from包/模块 import 模块/(函数名/变量名/类名)

    ​ -在执行文件中直接import导入

    四、循环导入的问题

    1.需要查找的名字放在导入模块的上方

    2.在函数的内部导入,将模块变成函数空间的名字(函数并没有调用)

    软件开发的目录规范

    注意:每一次写项目时,都要新建一个文件夹与项目工程,必须让项目文件夹作为项目根目录。

    项目的文件夹:

    -conf:

    ​ 用于存放配置文件的文件夹

    ​ -core:

    ​ -核心业务代码 .py

    ​ -interface:

    ​ -接口 接口内写获取数据前的逻辑代码,通过后才可获取数据。

    ​ -db;

    ​ 用于存放文件数据

    ​ -lib;

    ​ 存放公共功能文件

    ​ -log:

    ​ 用于存放日志文件,日志用于记录用户的操作的记录

    ​ -bin:

    ​ 里面存放启动文件/-启动文件

    ​ -readme.txt

    ​ 项目说明书,用户告诉使用者项目的操作

    import sys  # 获取操作系统资源的模块
    print(sys.getrecursionlimit())###这个是当前的递归深度
    >>>>>>>
    1000
    
    sys.setrecursionlimit(2000)
    print(sys.getrecursionlimit())####这个是设置后的递归深度
    >>>>>>>>>>>
    2000
    import sys
    sys.setrecursionlimit(2000)  # 了解
    
  • 相关阅读:
    uoj 36 玛里苟斯
    readlink
    Endless Spin
    rm
    rmdir
    [学习笔记]min-max容斥
    cp
    [HAOI2015]按位或
    java实现第四届蓝桥杯公式求值
    java实现第四届蓝桥杯危险系数
  • 原文地址:https://www.cnblogs.com/bs2019/p/11882483.html
Copyright © 2020-2023  润新知