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

函数名的使用:

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

函数名的内存地址:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么调处vs2010的MSDN帮助文档

如果装的是vs2010专业版的话 直接按F1直接可调出在线的帮助 直接按F2可以调出本机版的 转载于:https://www.cnblogs.com/fag888/p/5789159.html

redis的lrange_thinkphp5操作redis系列教程】列表类型之lRange,lGetRange

namespace app\admin\controller;use think\cache\driver\Redis;use think\Controller;use \think\Db;class Index extends Controller{//获取redispublic function getRedis(){$redis new \Redis();$redis->connect(127.0.0.1,6379);$redis->auth(root); //redis密码ec…

如何写好博客

好的博客是用来解决问题的,每一篇文章都应该以如何解决问题为驱动力,而不是知识点的累加,比如说之前写的[MVC]系列,均为知识点的堆积,没有例子和代码,也没有说明问题,这样的文章,基本…

云服务器建站原理_云服务器cvm与建站主机之间的区别

(文章来源:西部数码)云服务器cvm与建站主机区别是什么?cvm的英文全拼是CloudVirtualMachine(云虚拟机),所以云服务器cvm是指虚拟云服务器,属于云服务器产品中的一种。而建站主机一般多是指虚拟主机,是在服务器中划分出…

Magento--判断checkout中是否使用了coupon code

在checkout页面中&#xff0c;如果想判断顾客是否有使用coupon code&#xff0c;可以通过checkout session来进行判断。以下代码会返回checkout中使用的coupon code或者返回空&#xff08;当没有使用coupon code时&#xff09; 1 <?php 2 3 $coupon_code Mage::getSingl…

启动python内核时发生错误_启动内核时出错

我一直看到这个消息。在An error ocurred while starting the kernelTraceback (most recent call last):File "C:\Users\Excel\Anaconda3\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)File "C:\Users\Excel\Anaconda3\lib…

Scala笔记

1、伴生对象 形如&#xff1a; 有一个类 class Test{ } 一个object和该类同名 object Test{ } object Test的作用类似于静态类&#xff08;工具类&#xff09;&#xff0c;其中的所有成员都是静态的&#xff0c;在object Test中可以直接访问class Test的成员&#xff1b;…

maven找到mysql 连接池_在Tomcat6.0+MySQL5.0环境下配置和使用数据库连接池

一&#xff0c;在Tomcat中配置连接池的JNDI首先到MySQL的网站上下载MySQL JDBC连接器放到%CATALINA_HOME%/lib目录下&#xff0c;在%CATALINA_HOME%/conf目录下找到context.xml&#xff0c;这个文件是全局的&#xff0c;如果想只对特定的应用使用可以编辑WEB-INF/context.xml文…

mysql将多个成绩放在一排_mysql巧用连表查询各科成绩前三名

下列是各表的详情&#xff0c;不想自己建表的同学可以直接copy code&#xff0c;数据随意。创建表成绩详情表&#xff1a;CREATE TABLE score (id int(10) NOT NULL AUTO_INCREMENT,subject_id int(10) DEFAULT NULL,student_id int(10) DEFAULT NULL,score float DEFAULT NULL…

Oracle 跨库 查询 复制表数据 分布式查询

方法一&#xff1a; 在眼下绝大部分数据库有分布式查询的须要。以下简单的介绍怎样在oracle中配置实现跨库訪问。比方如今有2个数据库服务器&#xff0c;安装了2个数据库。数据库server A和B。如今来实如今A库中訪问B的数据库。 第一步、配置Aserver端的tnsnames.ora文件&#…

java 匹配mysql按钮_使用Java在mysql查询中设置匹配函数

我有以下在java中查询(mysql)的摘录&#xff1a;queryGeral.append("FROM product p, fabricante_product fp, fabricante f, extensao e, product_autor pa ").append(" WHERE ").append("a.nome like ? AND ").append("p.cod_material …

LeetCode Contains Duplicate (判断重复元素)

题意&#xff1a; 如果所给序列的元素不是唯一的&#xff0c;则返回true&#xff0c;否则false。 思路&#xff1a; 哈希map解决。 1 class Solution {2 public:3 bool containsDuplicate(vector<int>& nums) {4 unordered_map<int,int> mapp;5 …

提高团队代码质量

近期看到一篇博客。大致的意思就是网管将原本混乱不堪的交换机整理整齐了&#xff0c;起初交换机是图2那样的&#xff0c;由于越来用的人越多&#xff0c;操作的人越来越多。终于成为了图1那个样子。这不禁让我想到了项目中的代码。原先在刚上线的时候谈不上是完美的&#xff0…

webrender 查看是否开启_想要体验极致顺滑的网页加载体验?手动开启Firefox WebRender渲染引擎...

昨天我们提到火狐浏览器最新稳定版Mozilla Firefox v67 版将面向部分用户开启WebRender渲染引擎测试。据火狐浏览器团队介绍当用户开启新的渲染引擎后 , 网页加载帧率能够从现有的 20FPS 直接提升到 60FPS。不过新的渲染引擎本身并不是用于加快网页的加载速度&#xff0c;而是…

NOIP201307货车运输

试题描述A 国有n座城市&#xff0c;编号从1到n&#xff0c;城市之间有m条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。现在有q辆货车在运输货物&#xff0c;司机们想知道每辆车在不超过车辆限重的情况下&#xff0c;最多能运多重的货物。输入第一行有两个用一…

knime如何连接mysql_knime怎么连接MySQL?

首先判断一下网络是否通&#xff1a;如果在局域网相同网段内那网络是通的&#xff0c;不同网段间需要看是否有做隔离&#xff0c;如果没有隔离&#xff0c;那就也是通的。测试方法可以用telnet 数据库IP 数据库端口号的方式探测一下 例如 telnet 192.168. 1.124 3306创建用户&a…

Asp.net Vnext IValueProvider

概述 本文已经同步到《Asp.net Vnext 系列教程 》中] IValueProvider 根据ValueProvider获取数据&#xff0c;在对数据进行绑定 代码实现 private class CustomValueProvider : IValueProvider{//判断否具有指定的前缀public Task<bool> ContainsPrefixAsync(string pref…

ECNUOJ 2615 会议安排

会议安排 Time Limit:1000MS Memory Limit:65536KBTotal Submit:451 Accepted:102 Description 科研人员与相关领域的国内外同行进行适时的接触与充分的交流&#xff0c;对于促进提高他们的科研业务水平&#xff0c;并及时掌握科研动态是十分必要而且重要的。ECNU为了走在科技…

Kafka架构设计:分布式发布订阅消息系统

【http://www.oschina.net/translate/kafka-design】&#xff08;较长&#xff1a;很详细的讲解&#xff09; 【我们为什么要搭建该系统】用作LinkedIn的活动流&#xff08;activity stream&#xff09;和运营数据处理管道&#xff08;pipeline&#xff09;的基础。作为多种类型…

拼团php开发逻辑思维罗振宇_2019罗胖罗振宇跨年演讲手动整理稿,看了两遍

2019罗胖罗振宇跨年演讲看了两遍&#xff0c;手动整理文档1.岁月不饶人&#xff0c;我们也没饶了岁月2.你有你的计划&#xff0c;原来这个世界另有计划&#xff0c;既然这个世界另有计划&#xff0c;我们就得重做计划3.做事的人和不做事的人4.宏观是我们必须忍受的&#xff0c;…