函数的递归
函数的递归是指重复“直接调用或者间接调用”函数本身,这是一种函数嵌套的表现形式。
-直接调用:指的是在函数内置,直接调用函数本身。
-间接调用:两个函数之间的相互调用间接造成的递归。
递归默认的深度一般是 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) # 了解