函数名的使用:

函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量

函数名的内存地址:

deffunc():pass

print(func) #函数的内存地址

结果:

函数名可以赋值给其他变量:

deffunc():print(1)

a=func

a()

func()#函数名可以当做值赋值给变量

结果:1

1

函数名可以当做容器类的元素:

deffunc():print(1)deffunc2():print(2)

li=[func,func2]print(li) #函数名可以当做元素放到容器里

结果:[, ](打印的是函数的内存地址,列表里的函数可以加括号,打印的是函数执行的结果,及列表的返回的None)deffunc():print(1)deffunc2():print(2)

li=[func(),func2()]print(li) #函数名可以当做元素放到容器里

结果:1

2[None, None]

函数名可以当做函数的参数:

deffunc():print("吃了么")deffunc2(fn):print("我是1")

fn()#执行传递过来的fn

print("我是2")

func2(func)#把函数func当成参数传递给func2的参数fn.

结果: 我是1

吃了么

我是2

函数名可以作为函数的返回值

deffunc_1():print("这里是函数1")deffunc_2():print("这里是函数2")print("这里是函数3")returnfunc_2

fn=func_1()#执行函数1. 函数1返回的是函数2, 这时fn指向的就是上面函数2

fn() #执行func_2函数

结果:

这里是函数1

这里是函数3

这里是函数2

deffunc():defaa():print(2)returnNonereturn aa() #return None#func() # func() == None

print(func())

结果:2None

例题:

li =[]for i in range(3): #for循环三次,三次最终结果i=2

def func(x): #定义函数,形参为x

print(x*i) #打印形参与i(2)相乘的结果

li.append(func) #将func依此添加到li列表当中,循环三次,添加三个,

#此时,列表里的func虽然外表相同,定义的函数相同,但内存地址不一样,存在三个内存地址

for func in li: #将列表里的函数循环出来

func(2) #依此执行func函数,实参数为2

结果:4

4

4此时我要想将结果打印为0,2,4,只需定义一个数即可

li=[]for i in range(3): #for循环三次,循环为 i =(0,1,2)

def func(x,y=i): #定义函数,形参为x,y=循环的 i 值

print(x*y) #打印形参与y(0,1,2)相乘的结果

li.append(func) #将func依此添加到li列表当中,循环三次,添加三个,

#此时,列表里的func虽然外表相同,定义的函数相同,但内存地址不一样,存在三个内存地址

for func in li: #将列表里的函数循环出来

func(2) #依此执行func函数,实参数为2

闭包

什么是闭包? 闭包就是内层函数, 对外层函数(非全局)的变量的引用. 叫闭包

# 1.一个嵌套函数

# 2.在嵌套函数的内部函数使用外部(非全局的变量)

# 满足以上两条就是闭包

defwrapper():

a= 10

definner():print(a)print(inner.__closure__) #不是None 就是闭包

inner()

wrapper()

结果:

(,)10

将里边的函数名当做参数返回给调用者

defouter():

name= "alex"

#内部函数

definner():print(name)returninner

fn= outer() #访问外部函数, 获取到内部函数的函数地址

fn() #访问内部函数

结果:alex

例:

money = 10

#全局里存放会有污染和不安全的现象

defwrapper():

money= 10

definner(num):global money #从全局调用money

money +=numprint(money)returninner

wrapper()(100) #第二个括号是return的返回值inner的执行,实参为100

# python中闭包,会进行内存驻留, 普通函数执行完后就销毁了

# 全局里存放会有污染和不安全的现象

# 面试必问,装饰器 -- 装饰器的本质就是闭包

# 闭包有个弊端:会出现内存泄漏

迭代器

可迭代对象有哪些:str list tuple dic set

可迭代对象:可以被for的就是可迭代对象

# Python 协议

# 具有.__iter__方法的就是可迭代对象

# a = 对象.__iter__ # 创建一个迭代器

# 具有__iter__和__next__就是一个迭代器

可以for循环的就有__iter__方法,包括range

.这里的__iter__是帮助我们获取到对象的迭代器.我们使用迭代器中的__next__()来获取到一个迭代器的元素

li = [1,2,3]

a= li.__iter__()print(a.__next__())print(a.__next__()) #一个一个取

print(a.__next__())

结果:1

2

3

我们使用while循环和迭代器来模拟for循环: 必须要会:

lst = [6,5,4]

l= lst.__iter__()while 1:try:

i= l.__next__()print(i)except StopIteration #当遇到报错的时候,就break退出

break

# 迭代器特性:

# 惰性机制

# 不能从下向上走

# 一次性的,用完就没了

小总结:

Iterable: 可迭代对象. 内部包含__iter__()函数

​ Iterator: 迭代器. 内部包含__iter__() 同时包含__next__().

迭代器的特点:

​ 1. 节省内存.

​ 2. 惰性机制

​ 3. 不能反复, 只能向下执行.

我们可以把要迭代的内容当成子弹. 然后呢. 获取到迭代器__iter__(), 就把子弹都装在弹夹中. 然后发射就是__next__()把每一个子弹(元素)打出来. 也就是说, for循环的时候.一开始的 时候是__iter__()来获取迭代器. 后面每次获取元素都是通过__next__()来完成的. 当程序遇到 StopIteration将结束循环.

递归:

# 1. 自己玩自己 (自己调用自己本身)

# 2. 玩的有限制 (有明确结束条件)

count =0deffunc():globalcount

count+= 1

print(count)if count == 4: #当count=4时,返回

returnfunc()#产生递归现象

func()

打印1到100

deffunc(n):

n+=1

print(n)if n == 100:returnfunc(n)

func(0)

例题:

deffunc(age):print(age) #最后打印4

deffunc1(age):print(age) #3

func(age+1) #执行func,实参数位4

deffunc2(age):print(age) #2

func1(age+1) #执行func1,实参数位3

func2(2)

打印结果:2

3

4

作业:

1.写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}

例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)2.写函数,传入一个参数n,返回n的阶乘

例如:cal(7) 计算7*6*5*4*3*2*1

3.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组

例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]4. 相关面试题(先从纸上写好答案,然后在运行):def calc(a,b,c,d=1,e=2):return (a+b)*(c-d)+e

请分别写出下列标号代码的输出结果,如果出错请写出Error。print(calc(1,2,3,4,5))_____

print(calc(1,2))____

print(calc(e=4,c=5,a=2,b=3))___

print(calc(1,2,3))_____

print(calc(1,2,3,e=4))____

print(calc(1,2,3,d=5,4))_____下面代码打印的结果分别是_________,________,________.def extendList(val,list=[]):

list.append(val)returnlist

list1= extendList(10)

list2= extendList(123,[])

list3= extendList('a')print('list1=%s'%list1)print('list2=%s'%list2)print('list3=%s'%list3)5.写代码完成99乘法表.(升级题)1 * 1 = 1

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9......9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

python递归迭代_Python入门基础知识点(python迭代器和递归)相关推荐

  1. python代码测试_Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

  2. python函数的基础知识_Python入门基础知识点(函数进阶)

    动态参数: 动态接收位置参数: def eat(*args): #在形参位置,*叫做聚合 print('我想吃',args) eat('大米饭','中米饭','小米饭') #收到的结果是一个tuple ...

  3. 怎么读懂python语句_Python入门基础知识点总结,一点文章就能让你看懂Python

    Python标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大小写 ...

  4. python lambda函数_python入门基础之lambda匿名函数

    lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式.lambda是一个表达式而不是一个语句.它能够出现在Python语法不允许def出现的地方.作为表达式, ...

  5. python数据结构教程_python入门基础教程随笔1-python数据结构-列表

    # encoding: utf-8 import sys #导入标准包 from test.test_compare import Cmp a = 3 b = 4 c = 5.66 d = 8.0 e ...

  6. python生成器迭代_python中的生成器和迭代器

    前言: 我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. 定义: 生成器和迭代器 通过列表生成式,我们可以直接创建一个列 ...

  7. python elif 用法_Python入门高级教程--Python 条件语句

    Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和 ...

  8. 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

    此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式. 一.贪婪匹配和非贪婪匹配 举例说明概念: print('非贪婪匹配',re.search('el+ ...

  9. 零基础自学python的建议-关于零基础学习 Python 有什么好的建议?

    Python这种高级编程语言,相比前编程明星C++和Java等更简单易操作.,目前Python已成为最受AI从业者欢迎的语言. Python的10个基础知识点 Python是一个面向对象的解释型的交互 ...

最新文章

  1. Ramsey定理数学
  2. 简述一下生成对抗网络GAN(Generative adversarial nets)模型?
  3. [原创].七段数码管驱动,Verilog版本
  4. 抽象类与接口的一个程序实现
  5. linux主机名的修改
  6. CentOS7 安装git服务器
  7. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·006【事务】
  8. java业务类_Java_业务层开发
  9. linq学习笔记(5):Count/Sum/Min/Max/Avg
  10. sqlplus 执行sql文件_详解sqlplus设定行大小、页大小、字符列格式、数字列格式、清屏...
  11. mysql coreseek_关于mysql中文全文检索Sphinx之coreseek
  12. [OfficeExcel] 王佩丰老师OfficeExcel2010 7-10讲 函数 学习笔记
  13. 《谷物大脑》笔记(初稿)
  14. allegro里面由于shape out of date
  15. 实用:常用PPT国内外不错的网站介绍
  16. idea2017激活方式(亲测可用,良心推荐)
  17. cf不能全屏win7的解决方法_怎么解决win7电脑没声音 win7电脑没声音解决方法介绍【详解】...
  18. 致初级软件开发人员并自勉
  19. Bootstrap-maxlength使用
  20. eeepc linux 软件管理,华硕EeePC 901下EEEbuntu 3.0完美优化教程

热门文章

  1. 高级会计师计算机考试中级,会计师需要计算机等级考试吗
  2. 【python】画一个爱心
  3. 虚拟串口服务器zenetmanager,Avocent服务器/串口管理 KVM
  4. php创建表并插入数据,php数据库操作-创建库和表以及插入数据
  5. python怎样分析文献综述怎么写_怎么写文献综述?
  6. 【原】简单shell练习(四)
  7. ansible 判断和循环
  8. git的入门摸索和入门研究
  9. 将一张表的主键(ID)重置为从1开始自增排列
  10. Visual Studio的调试技巧