## 一、函数的递归调用### 1、引入```python
# 函数递归调用就是在调用一个函数的过程中直接或者间接地调用了自己
# 直接调用自己
def foo():print('hello')foo()# 间接的调用
def bar():foo()def foo():bar()foo()  # 由于递归会无限的申请名称空间,导致内存溢出,所以python设置了最大的递归层数
import sys
print(sys.getrecursionlimit())  # 获取最大层数
print(sys.setrecursionlimit(2000))  # 设置最大层数
# 由此可知,需要在某种条件下结束递归

2、递归的两个阶段

回溯:一层一层的调用下去
递推:在满足某种条件下结束回溯,原路返回# salary(5) = salary(4) + 10
# salary(4) = salary(3) + 10
# salary(3) = salary(2) + 10
# salary(2) = salary(1) + 10
# salary(1) = 18# n=1   salary(n) = 18
# n!=1  salary(n) = salary(n-1) + 10def salary(n):if n == 1:return 18return salary(n-1) + 10res = salary(5)
print(res)
=====>58# nums=[111,[222,[333,[444,[5555,[6666,[777,[888,[9999]]]]]]]]]
#
#
# def func(l):
#     for x in l:
#         if type(x) is list:
#             # 把自身的代码重新再调用一次
#             func(x)
#         else:
#             print(x)
# func(nums)算法之二分法
nums = [1,2,3,4,5,6,7,8,9,10]def binary(l, n):reserch_num = len(l) // 2if len(l) == 0:print('not in')returnif n > reserch_num:new_l = l[reserch_num + 1:]return binary(new_l, n)elif n < reserch_num:new_l = l[: reserch_num]return binary(new_l, n)else:print('find it')

二、三元表达式

def max2(x, y):if x > y:return xelse:return y三元表达式:表达式1 if 条件 else 表达式2
x = 111
y = 222
res = x if x >y else y
print(res)
=====>222

三、匿名函数

res = (lambad x, y: x + y)(1, 2)
print(res)
=====>3特点:没有名字意味着调用一次后,变会被回收。
salaries = {'egon': 4.4,"lqz": 3.3,'yj': 2.2
}# def func(k):
#     return salaries[k]
## print(max(salaries, key=lambda k:salaries[k]))
# print(min(salaries, key=lambda k:salaries[k]))# print(sorted(salaries,key=lambda k:salaries[k],reverse=True))map()函数的格式是:map(function,iterable,...)

四、模块

1、什么是模块
模块就是一个功能的集合体,不是用来直接运行,而是用来被导入使用的

​ 模块分为三大来源:
​ 1、内置的模块
​ 2、第三方模块
​ 3、自定义的模块

​ 模块分为四种类别:
​ 1、一个py文件就是一个模块
​ 2、一个文件夹也是一个模块=》包
​ 3、已被编译为共享库或DLL的C或C++扩展
​ 4 使用C编写并链接到python解释器的内置模块

2、为何要用模块
使用别人的模块:
1、拿来主义,提升开发效率
自定义模块:
1、别人的功能不够用了,需要自己的去编写
2、解决代码冗余

3、如何用模块

# 文件名是spam.py,模块名则是spam
x=111import spam
# 首次导入模块发生的事情
# 1、触发被导入的模块的运行,产生一个模块的名称空间,把模块中的名字都丢进去
# 2、会在当前执行文件中得到一个全局名称空间的名字spam,该名字是指向被导入模块的名称空间的# 之后的导入,名字spam直接引用首次导入产生的名称空间,不会再执行模块的内的代码了
# import spam
# import spam
# import spammoney = 2000# print(money)
# print(spam.money)# spam.read1()# def read1():
#     print('run1.py----read1')# spam.read2()
# spam.change()
# print(spam.money)
# print(money)# 一行导入多个模块
import spam,m1,m2,m3  # 不推荐# 为导入的模块起别名
mysql.py
def sqlparse():print('from mysql sqlparse')oracle.py
def sqlparse():print('from oracle sqlparse')test.py
db_type = input('请输入数据类型:')
if db_type == 'mysql':import mysql as db
elif db_type == 'oracle':import oracle as dbdb.sqlparse()
# 文件名是spam.py,模块名则是spam
x=111
# from spam import money,read1,read2  # money=spam.money,read1=spam.read1,read2=spam.read2
# 首次导入模块发生的事情
# 1、触发被导入的模块的运行,产生一个模块的名称空间,把模块中的名字都丢进去
# 2、会在当前执行文件中得到名字
#    money=模块spam中的money对应值的内存地址
#    read1=模块spam中的read1对应值的内存地址
#    read2=模块spam中的read2对应值的内存地址# from spam import money,read1,read2
# from spam import money,read1,read2
# from spam import money,read1,read2
# from spam import money,read1,read2# print(money)
# print(read1)
# print(read2)# money=111
# print(money)# money=2000
# read1()# def read1():
#     print('run.py read1')
# read2()# 一行导入多个名字
# from spam import money,read1# 为导入的模块起别名
# from spam import money as m
#
# print(m)# from spam import *
from spam import *
# print(money)
# print(read1)
# print(read2)
print(change)
在模块里使用`__all__`[函数名1,函数名2],在执行文件里,*只能导入[]内的函数

模块的命名用的是纯小写加划线

也可以在函数内导入模块,区别在于函数内的模块所在的是函数的局部名称空间

所有py文件内部都有__name__的功能,当做执行文件时,print的结果是__main__,当做模块被导入时,print的结果是模块的名字


0723函数的递归以及模块的初识相关推荐

  1. Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...

    上节课复习: 1.函数的对象     函数可以被当作数据取处理 2.函数嵌套     嵌套调用:在调用一个函数时,函数体代码又调用了其他函数     嵌套定义:在一个函数内部又定义了另一个函数 1 d ...

  2. 生成器/迭代器 和 函数的递归

    生成器 一个包含yield关键字的函数就是一个生成器函数.yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的 ...

  3. python之路--嵌套函数、匿名函数、高阶函数。函数的递归

    嵌套函数 函数里不仅可以写代码,还可以嵌套函数 name = "小猿圈"def change():name = "小猿圈,自学编程"def change2(): ...

  4. Python过渡性模块重载(递归重载模块)

    0.说明 因为正常情况下使用reload重载模块时只是重载顶层模块,对于模块内部的import语句并不会执行重载,也就是说,reload执行的重载只是针对顶层的,即top level only. 有必 ...

  5. 三目运算法求一个大值,以及指定位数的应用,以及函数的声明,以及函数的嵌套,以及函数的递归,以及用递归法求阶乘

    1.三目运算法 首先一般方法比较两个数的大小 用空格和回车都一样 当结果非x即y的时候 我们可以用三目运算法 z=x>y?x:y 如果表达式成立取前面的值,如果表达式不成立取后面的值 也可以改成 ...

  6. Python函数的递归调用

    一:递归的定义 函数的递归调用:是函数嵌套调用的一种特殊形式 具体是指: 在调用一个函数的过程中又直接或者间接地调用到本身 # 直接调用本身 def f1():print('是我是我还是我')f1() ...

  7. 函数的递归调用(专题)

    函数的递归调用(专题) 递归调用:函数的递归调用,就是函数在执行的时候自动调用自己! 功能:当我们把一个大问题按照某种解决方案细化为若干个小问题的时候,结果我们发现这些小问题的解决方案又和前面大问题的 ...

  8. mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...

    点击查看请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!具体信息 答:include "stdio.h" int fac(int k) { if(k==1) ...

  9. python导入不在同一路径的函数_Python小课堂|模块

    Python3   模块 在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一 ...

  10. ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰

    使用场景:用ng-repeat几个部分,每个部分调用同一个函数,但是每个模块之间的功能不能相互干扰 问题:在用repeat实现.content块repeat的时候打算这样做:新建一个空的数组(nmbe ...

最新文章

  1. 谱聚类(Spectral clustering)(2):NCut
  2. 【Struts2框架】Struts2总结
  3. servlet向ajax传递list数据类型,ajax向servlet传递array数据类型
  4. GetOverlappedResult函数详细解答
  5. (50)System Verilog 类中约束数组元素
  6. CAS总结之Ticket篇
  7. 文档在线编辑组件的发展回顾与开发集成选择问题
  8. java实现lru缓存_Java中的LRU缓存实现
  9. C/C++连连看C++游戏项目教程
  10. 2.1简单计算问题的求解
  11. JDBC 和数据库连接池
  12. 电信 网通 铁通 DNS服务器IP地址
  13. ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置
  14. 2014年4月底至5月初51Aspx源码发布详情
  15. OpenCV——透视变换
  16. 20. Python的字典嵌套
  17. securecrt 不掉线_如何不掉线
  18. word从任意页开始加页码
  19. 记账的优缺点分析 聊聊记账这些事
  20. 短视频消重去重九种方法,组合使用原创度更高,各平台轻松过原创

热门文章

  1. SQL Server数据库分页查询
  2. socket学习之电脑手机通信
  3. HDU 5025 Saving Tang Monk
  4. unilx安装mysql_内容更新 · web-liuyang/uni-app-tools@72f7fd7 · GitHub
  5. 【ASO优化】手游9大ASO优化方法帮你获得巨量新增!
  6. 数据库update更新date类型数据
  7. 原型工具Axure:Axure的实用小技巧
  8. Java相关证书,你考过哪个?
  9. 经纬度坐标转换成px_(转)经纬度坐标转换为屏幕坐标
  10. Python识别图片中数字/数值的方法笔记