每天二十分钟学习python_每天 3 分钟,小闫带你学 Python(二十三)
正文共:3995 字 7图
预计阅读时间:10分钟
每日分享
Don't let small minds convince you that your dreams are too big.
别让狭小的思维限制了你做伟大的梦。
小闫语录:
不要禁锢自己的想法,连想都不敢想,如何实现?
前言
1.局部变量是定义在函数内部的变量,而且作用域也是本函数;全局变量是定义在函数外的变量,所有函数都可以进行访问。
2.全局变量通过在函数内部声明的方式修改。使用 global
3.Python 中的函数参数是传递引用。
4.可变数据类型有列表、字典和集合;不可变数据类型有数字、字符串和元组。
学习目标
1.了解递归函数。
2.熟练掌握匿名函数的使用。
3.熟记列表推导式、字典推导式、三目运算符的形式。
4.熟练使用三个常用工厂函数。
1.递归函数(了解即可)
通过前面学习已经知道函数内部可以调用其他函数。那你有没有想过函数内部调用函数本身?哈哈哈,如果一个函数内部不调用其他的函数,而是调用函数自身,这个函数就是递归函数。说起来很简单,你也想问它有什么用呢?下面举例说明递归函数的作用:
需求:计算阶乘 n!=1*2*3*...*n一个数字的阶乘就是从1连续乘到该正整数。用符号 n! 表示。
我们可以先来看一下阶乘的规律:1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!
1.1 解法一:循环
其实并不难解决,通过规律,我们可以通过如下代码解出:def calNum(num):
i = 1
result = 1
while i <= num:
result *= i
i += 1
return result
1.2 解法二:递归
递归操作起来就贼简单了:def factorial(num):
if num > 1:
result = num * factorial(num-1)
else:
result = 1
return result递归就是不断的调用自己,因此必须设置递归退出条件,否则会一直调用直至电脑卡死。
我们使用图片分析一下上述递归执行过程:
2. 匿名函数
匿名函数即没有名字的函数,省略了 def 声明函数的标准步骤,采用极简的语法实现一个函数。
匿名函数使用关键字 lambda 创建,语法为:lambda [arg1 [,arg2,.....argn]]:expressionarg 代表参数, : 右方填写相关操作的表达式。
举例说明,要求写一个函数可以求两个数字的和,使用匿名函数:lambda num1, num2: num1 + num2
一行代码就可以搞定,但是问题来了,该如何调用此函数呢?看下方:sum = lambda num1, num2: num1 + num2
# 调用sum函数
print("Value of total : %d " % sum( 10, 20 ))
print("Value of total : %d " % sum( 20, 20 ))相当于给函数临时起了一个名字,使用此名字即可调用匿名函数。
输出结果为:Value of total : 30
Value of total : 40注意: Lambda 函数可以接收任何数量的参数,但是只能返回一个表达式的值,因此只能使用其进行简单操作。匿名函数是不能直接调用 print 函数的,因为匿名函数需要一个表达式,相当于默认使用了 return。
2.1 小案例
有如下的一个列表,需要分别根据年龄和姓名进行排序:stus = [
{"name": "EthanYan", "age": 18},
{"name": "xiaohong", "age": 19},
{"name": "wangyingxuan", "age": 17}
]排序操作可以使用列表的 sort 方法。
按name排序:>>> stus.sort(key = lambda x: x['name'])
>>> stus
[{'name': 'EthanYan', 'age': 18}, {'name': 'wangyingxuan', 'age': 17}, {'name': 'xiaohong', 'age': 19}]
按age排序:>>> stus.sort(key = lambda x: x['age'])
>>> stus
[{'name': 'wangyingxuan', 'age': 17}, {'name': 'EthanYan', 'age': 18}, {'name': 'xiaohong', 'age': 19}]
3.列表推导式
所谓的列表推导式,就是指快速的使用循环操作创建列表,只需一行代码即可。
创建列表 [0,1,2,3,4,5],传统的方式如何:list = []
for i in range(6):
list.append(i)
使用列表推导式如何:list = [i for i in range(6)]
大家可以对比总结规律,如果没看出来怎么写的,那么再看一个例子:
创建列表 [0,2,4],传统方式如下:list = []
for i in range(6):
if i % 2 == 0:
list.append(i)
使用列表推导式如何:list = [i for i in range(6) if i%2==0]
列表推导式其实就是简化了原先的程序,为了快速创建列表。在列表(中括号中)中第一个位置填写要添加到列表中的元素值(满足后面条件的元素),然后书写空格,再填写循环语句,如果有复杂操作(如 if 语句和多层 for 循环)的话,条件依次往后填写,条件之间使用空格隔开。可以多举几个例子,仿照示例实现。
4.字典推导式
字典推导式与列表推导式类似,语法格式如下:my_dict = { expr for value in collection if condition }expr 代表的是相关操作,如相加减等。
collection 代表可迭代对象。
value 代表 collection 中的元素。
condition 代表条件判断语句。
注意外侧是大括号(花括号)
示例:将两个列表转换成一个字典keys = ['a', 'b', 'c', 'd']
vals = [10, 20, 30, 40]
my_dict = {key: value for key, value in zip(keys, vals)}
print(my_dict)
# 结果为 {'a': 10, 'b': 20, 'c': 30, 'd': 40}
扩展: zip 函数可以将多个列表、元组等可迭代对象进行压缩操作,即将对应下标的元素打包成一个个元组,然后返回一个由这些元组组成的 zip 对象,可以使用 list() 方法将其转化为可见的列表。压缩完之后取值可以使用循环,也可以使用前面讲到的拆包,还可以使用解压缩操作。如果输入的可迭代对象元素个数不一致,按元素个数最少的为准,返回最少元素个数的元组组成的对象。
实例:>>> a = [1, 2, 3]
>>> b = [3, 2, 1]
>>> c = [4, 5, 6, 7, 8]
# 进行压缩操作
>>> zipped = zip(a, b)
# 返回一个zip对象
>>> zipped
# 使用 list() 方法将其转化为可见的列表
>>> list(zipped)
[(1, 3), (2, 2), (3, 1)]
# 压缩的可迭代对象元素个数不一致时,以最短的为准
>>> list(zip(a,c))
[(1, 4), (2, 5), (3, 6)]
# zip(*) 为解压缩
>>> num1, num2 = zip(*zip(a,b))
>>> list(num1)
[1, 2, 3]
>>> list(num2)
[3, 2, 1]
5.三目运算符
先不要纠结这个名字,我们通过示例来了解它到底是个什么鬼。它与列表推导式、字典推导式等一样都是为了简化代码。
需求:通过用户输入的年龄,判断用户是否能进入网吧。
传统方式:def function():
age = int(input("请输入您的年龄:"))
if age > 18:
return "您可以进入网吧"
else:
return "滚回去写作业"
msg = function()
print(msg)
# 输出结果
请输入您的年龄:20
您可以进入网吧
使用三目运算符:def function():
age = int(input("请输入您的年龄:"))
return "您可以进入网吧" if age>18 else "滚回去写作业"
msg = function()
print(msg)
三目运算符语法格式:条件成立结果 if 条件 else 条件不成立结果
6.三个常用工厂函数
三个常用的工厂函数为 list、 set、 tuple
set 是集合;list 为列表;tuple 为元组
使用方式:直接对操作对象转换即可,如list(操作对象)
1.三者之间可以随意转换:# 首先定义一个列表
>>> mylist = [1, 2, 3]
# 使用tuple将列表转换为元组
>>> tuple(mylist)
(1, 2, 3)
# 使用set将列表转换为集合
>>> set(mylist)
{1, 2, 3}
>>> list(mylist)
[1, 2, 3]
2. set() 方法常用来去重操作。>>> mylist = [1, 2, 3, 5, 3, 2, 3, 6]
>>> newmylist = set(mylist)
>>> newmylist
{1, 2, 3, 5, 6}
作业
1.请写出一段 Python 代码实现分组一个 list 里面的元素,比如 [1,2,3,...100] 变成 [[1,2,3],[4,5,6]....]使用列表推导式实现
参考答案:a = [x for x in range(1,101)]
b = [a[x:x+3] for x in range(0,len(a),3)]
2.使用递归函数输出斐波那契数列。
3.动手实现本文章内所有代码示例。
每天二十分钟学习python_每天 3 分钟,小闫带你学 Python(二十三)相关推荐
- 【AI学院】有三AI博士小姐姐带你学深度学习之图像识别下篇,附上篇回顾
带学营第一期(上)圆满结束回顾 有三 AI 深度学习之图像识别带学营第一期(上)圆满结束,这一期我们主要的培训内容是深度学习基础+项目实战(人脸表情识别和鸟类细粒度识别). 以上的课程可以说是干货满满 ...
- Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局
实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...
- python学习笔记(推荐有其他语言编程经验想学python的人看)
文章目录 进制转换 身份判断: 注意: isinstance() 可以判断父类和子类相等 算术符号的优先等级 导包的方法 导入多个模块变量或者方法 __init__.py的用法 内置函数 注意: 自定 ...
- 学习笔记(6):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-实战:电影评论分类模型
立即学习:https://edu.csdn.net/course/play/26109/323206?utm_source=blogtoedu 同样的数据集,为什么训练结果会不同? 在google C ...
- 小甲鱼零基础学python pdf_鱼C论坛小甲鱼《零基础入门学习python》课程课后题.pdf...
第 1 课 0. Python 是什么类型的语言? Python 是脚本语言 脚本语言 (Scripting language) 是电脑编程语言,因此也能让开发者藉以编写出 让电脑听命行事的程序. 以 ...
- 带你学python_#带你学Python# 序
适用人群 如果你是以下几类人:只知道一些基本计算机知识,从事着互联网/计算机/数据相关的工作,希望学习Python来对计算机,对程序开发有更好的认识,从而能够更好地与自己公司的技术小哥沟通. 刚读研/ ...
- 自动化工程师与python_软件测试自动化工程师用案例带你进入Python数据类型,数据结构等代码实现...
一.有这样的一个需求:判断学生成绩是否及格 二.拿到这样的一个需求如何进行需求分析呢?做为测试人员,我们只有明确需求后,才不容易漏测. 需求分析阶段: (一)看到这样的一句话之后我们有几个问题需求和产 ...
- np合并 python_这15个tips,带你领略 Python 的简洁和优雅
本文通过15个具体的例子,带你领略 Python 的简洁和优雅. 下文中'P'即表示'Pythonic',很 Python 的写法,'NP'也就是相反,不是很'Pythonic'的写法. 1.为多个变 ...
- python炒股学习软件_【免费赠书】什么?学Python还能用来炒股!
"我天天研究股票,为了股票,连女票都分手了,为什么还是亏了个底朝天?" 朋友大雄向我诉苦,这小子沉迷炒股两三年,自称股神,最近却接连亏光了毕业以来的全部工资,连准备爹妈给的结婚本钱 ...
- 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!...
相信许多做数据的都有这样的经历: 你花了大半天整合了一张数据表,却因为其他部门的错误,导致表格结构全错了!于是你又要吭哧吭哧重新来过... 每次数据都重复洗一遍,还这么慢,要是有一劳永逸的方法就好了. ...
最新文章
- 2020年阿里大数据一面面经,看看你还有啥不知道的?
- 计算机考研考编程,计算机考研面试------编程语言
- 机器学习算法之——隐马尔可夫模型(Hidden Markov Models,HMM) 代码实现
- DOTA2:IG实力不如Nigma?解说:错了,让门票给他们自己回家训练
- 牛客 - 导航系统(最小生成树+Floyd)
- mysql数据库发布到web服务器上_web应用发布至服务器
- 史上最全的Visual Studio Code安装C/C++环境,若不行头砍给你。
- bzoj1048(记忆化搜索)
- java基础之继承(一)
- hdu5804(BestCoder Round #86 A)
- EETI eGTouch Linux 驱动的安装与使用
- vue项目添加ico(已修改)
- 初次使用BERT的可视化指南
- 纪念日python代码(文字,BGM,动画,玫瑰)
- 《自然语言处理(哈工大 关毅 64集视频)》学习笔记:第一章 自然语言处理概论
- 数学建模之拟合插值方法
- iOS积分抽奖Demo,可以人为控制不同奖项的得奖率
- DeepTrack: Grouping RFID Tags Based on Spatio-temporal Proximity in Retail Spaces-翻译
- 关于Win7远程桌面无法连接的解决办法
- 二叉排序树(查找树)的平均查找长度