1 2 3 4

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

函数的递归

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

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

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

递归默认的深度一般是 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)  # 了解
posted @ 2019-11-18 15:40  ^更上一层楼$  阅读(136)  评论(0编辑  收藏  举报