python基础语法10 函数递归,模块,软件开发目录规范
函数递归:
函数递归指的是重复 “直接调用或间接调用” 函数本身,
这是一种函数嵌套调用的表现形式。
直接调用: 指的是在函数内置,直接调用函数本身。
间接调用: 两个函数之间相互调用间接造成递归。
了解:
面试可能会问:
python中有递归默认深度: 限制递归次数
998,
PS: 但是在每一台操作系统中都会根据硬盘来设置默认递归深度。
获取递归深度: 了解
sys.getrecursionlimit()
设置递归深度: 了解
sys.setrecursionlimit(深度值)
注意: 单纯的递归调用时没有任何意义的。
def func(): #自己调用自己,死循环,默认998
print('from func')
func() func()
-------------------------------------------------
import sys # 获取操作系统资源的模块
print(sys.getrecursionlimit()) #获取当前递归深度限制 sys.setrecursionlimit(2000) #设置当前递归深度限制 # 查看当前可以承受的递归深度
num = 1
def func():
global num
print('from func', num)
num += 1
func() func()
---------------------------------------------------
def foo(): #交叉调用死循环,也是相加默认998
print('from foo')
goo() def goo():
print('from goo')
foo() foo()
想要递归有意义,必须遵循两个条件:
- 递推:
指的是重复地执行, 每一次执行都要拿到一个更接近于结果的结果,
递推必要有一个终止条件。
- 回溯:
当递推找到一个终止条件后,开始一步一步往上回溯。
age5 == age4 + 2
age4 == age3 + 2
age3 == age2 + 2
age2 == age1 + 2
age1 == 18 # 递推终止的结果
result = age(n - 1) + 2
def age(n):
if n == 1:
return 18 # 这里写return才能实现递推
return age(n - 1) + 2 res = age(5)
print(res) #
#---------------------------------------
def recure(n): #斐波那契数列
if n==1:
return 1
if n==2:
return 1
return recure(n-1)+recure(n-2) print(recure(10))
模块:
什么是包?
包指的是内部包含__init__.py的文件夹。
包的作用:
存放模块,包可以更好的管理模块。
一 什么是模块?
- 模块是一系列功能的结合体。
# 相当于与模块包着一堆函数与代码。
- 模块本质上是一个个的.py文件。
- 模块的三种来源:
1.python内置的模块: (python解释器的)
比如: sys\time\os\turtle
2.第三方的模块: (别人写的)
比如: requests
3.自定义的模块: (自己写的)
比如: 自己定义的demo.py文件
- 模块的四种表现形式:
1.使用python编写的py文件。(了解)
2.编译后的共享库DLL或者是C或者C++库。(了解)
3.包下面带有__init__.py的一组py文件。
- py_demo
- __init__.py
- demo.py
- demo2.py
4.python解释器下的py文件。
- python解释器下的文件夹
- 一个个的py文件
二 为什么要使用模块?
模块可以帮我们更好地管理功能代码,比如: 函数...
可以将项目拆分成一个个的功能,分别存放在不同的py文件(模块)中。
三 如何创建,编写模块,并使用模块?
- 鼠标右键创建py文件
- 在py文件编写python代码
- 在一个文件中,通过import关键字导入模块
import 模块名
# 注意: import 模块时,模块不能加.py后缀
- 在使用模块阶段,必须要注意,谁是执行文件,谁是被导入文件(被导入的模块)
- 模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找
- 模块在导入时发生的事情:
1.会先执行当前执行文件,并产生执行文件中的名称空间。
2.当执行到导入模块的代码时,被导入的模块会产生一个模块的名称空间。
3.会将被导入模块的名称空间加载到内存中。
'''
此处是执行文件...
'''
# # 模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找
# import demo #加载一次
# import demo #内存有不在加载
# import demo
# import demo # # print('from run...') #这三行,模块内容
# # 模块.指向的是模块的名称空间
# # demo.func1() import time import demo #打印from run...
demo.func1()
time.sleep(20) import demo #不打印from run...
demo.func1()
- 给模块起别名 as
import 模块 as 模块的别名
- 模块的导入方式
- import 模块
- 在执行文件中直接import导入
- from 包/模块 import 模块/(函数名、变量名、类名)
- 在执行文件中直接import导入
- 循环导入问题:
- model1.py
from model2 import name
name = 'jason'
- model2.py
from model1 import name
name = 'tank'
- 解决循环导入问题:
1.需要查找的名字放在导入模块的上方
2.在函数内部导入,将模块变成函数名称空间中的名字
- 软件开发目录规范:
注意: 每一次写项目时,都要新建一个文件夹与项目工程,必须让项目文件夹作为项目根目录。
- 项目的文件夹
- conf:
- 用于存放配置文件的文件夹
- core:
- 核心业务代码 .py
- interface:
- 接口, 接口内写获取数据前的逻辑代码,通过后才能获取数据
- db:
- 用于存放文件数据
- lib:
- 存放公共功能文件
- log:
- 用于存放日志文件,日志用于记录用户的操作记录
- bin:
- 里面存放启动文件 / - 启动文件
- readme.txt:
- 项目说明书, 用户告诉使用者项目的操作
python基础语法10 函数递归,模块,软件开发目录规范的更多相关文章
- Python全栈之路----常用模块----软件开发目录规范
目录基本内容 log #日志目录 conf #配置目录 core/luffycity #程序核心代码目录 #luffycity 是项目名,建议用小写 libs/modules #内置模块 d ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- Python模块:Re模块、附软件开发目录规范
Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ” # 默认匹配除 ...
- python模块导入-软件开发目录规范-01
模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...
- python 之 软件开发目录规范 、logging模块
6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序 core src.py,程序核心功能代码 conf settings. ...
- Python 浅谈编程规范和软件开发目录规范的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...
- python浅谈编程规范和软件开发目录规范的重要性
前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...
- py 包和模块,软件开发目录规范
目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...
- Python记录13:软件开发目录规范
软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...
随机推荐
- Learn About Git Bash
git是用来做版本控制的,在本节博客中,主要介绍git的下载,以及简单的配置 Version control is a system that records changes to a file or ...
- 网关/负载均衡下的consul集群代理
之前有做过使用单机版的consul实现Prometheus服务注册,以为使用集群版的consul只是将consul服务地址从节点IP变为了网关IP.但比较坑的就是,当使用consul注册一个servi ...
- 66 网络编程(五)——TCP多线程实现多人聊天室
思路 客户端读写各一个类,可以使内部类,实现Runnable.读写类都与服务器端建立连接,一个收,一个发. 客户端实现接收和转发.多线程实现每个客户端的连接(使与各客户端的连接独立). 服务器端中创建 ...
- keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量
之前一直是用v5编译,编译速度慢,换成V6编译速度差不多快50% ,而且arm后期只维护v5编译器不在更新v5编译器.切换到V6编译器大势所趋,把之前v5且换到v6需要如下更改: 1. CMSIS包需 ...
- python docker api
开启Remote API docker默认是没有开启Remote API的,需要我们手动开启.编辑/lib/systemd/system/docker.service文件, 在文件里的ExecStar ...
- SQL系列(十四)—— 视图(view)
说到视图view,大家应该都很熟悉.如几何学中用三视图来描述集合物体的外观构成,三视图中反应出物体的面貌.这里我们讨论数据库中视图的概念: 什么是视图 为什么会有会用视图 怎样使用视图 视图与表的异同 ...
- Dubbo面试踩坑
1.Dubbo支持哪些协议,每种协议的应用场景,优缺点? dubbo: 单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者.传输协议TCP,异步,Hessian序列化: ...
- C# Winform 只允许输入数字
if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == '.')) e.Handled = true; if ...
- C#采集UVC摄像头画面并支持旋转和分辨率切换
在项目中,我们会需要控制uvc摄像头,采集其实时画面,或者对其进行旋转.目前市面上大多数USB摄像头都支持UVC协议.那么如何采集呢?当然是采用SharpCamera!因为SharpCamera支持对 ...
- [Windows] - Windows/Office纯绿色一键激活工具及方法
瘟到死网上有很多一件键激活工具(如KMS),但许多带毒或报毒.这里给出一个纯绿色命令行一键激活,及自已搭建激活服务器的方法. KMS现在算法都是公开的了,可以自行在网上找到,这里不详述. 使用命令行一 ...