正文共: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(二十三)相关推荐

  1. 【AI学院】有三AI博士小姐姐带你学深度学习之图像识别下篇,附上篇回顾

    带学营第一期(上)圆满结束回顾 有三 AI 深度学习之图像识别带学营第一期(上)圆满结束,这一期我们主要的培训内容是深度学习基础+项目实战(人脸表情识别和鸟类细粒度识别). 以上的课程可以说是干货满满 ...

  2. Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局

    实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...

  3. python学习笔记(推荐有其他语言编程经验想学python的人看)

    文章目录 进制转换 身份判断: 注意: isinstance() 可以判断父类和子类相等 算术符号的优先等级 导包的方法 导入多个模块变量或者方法 __init__.py的用法 内置函数 注意: 自定 ...

  4. 学习笔记(6):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-实战:电影评论分类模型

    立即学习:https://edu.csdn.net/course/play/26109/323206?utm_source=blogtoedu 同样的数据集,为什么训练结果会不同? 在google C ...

  5. 小甲鱼零基础学python pdf_鱼C论坛小甲鱼《零基础入门学习python》课程课后题.pdf...

    第 1 课 0. Python 是什么类型的语言? Python 是脚本语言 脚本语言 (Scripting language) 是电脑编程语言,因此也能让开发者藉以编写出 让电脑听命行事的程序. 以 ...

  6. 带你学python_#带你学Python# 序

    适用人群 如果你是以下几类人:只知道一些基本计算机知识,从事着互联网/计算机/数据相关的工作,希望学习Python来对计算机,对程序开发有更好的认识,从而能够更好地与自己公司的技术小哥沟通. 刚读研/ ...

  7. 自动化工程师与python_软件测试自动化工程师用案例带你进入Python数据类型,数据结构等代码实现...

    一.有这样的一个需求:判断学生成绩是否及格 二.拿到这样的一个需求如何进行需求分析呢?做为测试人员,我们只有明确需求后,才不容易漏测. 需求分析阶段: (一)看到这样的一句话之后我们有几个问题需求和产 ...

  8. np合并 python_这15个tips,带你领略 Python 的简洁和优雅

    本文通过15个具体的例子,带你领略 Python 的简洁和优雅. 下文中'P'即表示'Pythonic',很 Python 的写法,'NP'也就是相反,不是很'Pythonic'的写法. 1.为多个变 ...

  9. python炒股学习软件_【免费赠书】什么?学Python还能用来炒股!

    "我天天研究股票,为了股票,连女票都分手了,为什么还是亏了个底朝天?" 朋友大雄向我诉苦,这小子沉迷炒股两三年,自称股神,最近却接连亏光了毕业以来的全部工资,连准备爹妈给的结婚本钱 ...

  10. 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!...

    相信许多做数据的都有这样的经历: 你花了大半天整合了一张数据表,却因为其他部门的错误,导致表格结构全错了!于是你又要吭哧吭哧重新来过... 每次数据都重复洗一遍,还这么慢,要是有一劳永逸的方法就好了. ...

最新文章

  1. 2020年阿里大数据一面面经,看看你还有啥不知道的?
  2. 计算机考研考编程,计算机考研面试------编程语言
  3. 机器学习算法之——隐马尔可夫模型(Hidden Markov Models,HMM) 代码实现
  4. DOTA2:IG实力不如Nigma?解说:错了,让门票给他们自己回家训练
  5. 牛客 - 导航系统(最小生成树+Floyd)
  6. mysql数据库发布到web服务器上_web应用发布至服务器
  7. 史上最全的Visual Studio Code安装C/C++环境,若不行头砍给你。
  8. bzoj1048(记忆化搜索)
  9. java基础之继承(一)
  10. hdu5804(BestCoder Round #86 A)
  11. EETI eGTouch Linux 驱动的安装与使用
  12. vue项目添加ico(已修改)
  13. 初次使用BERT的可视化指南
  14. 纪念日python代码(文字,BGM,动画,玫瑰)
  15. 《自然语言处理(哈工大 关毅 64集视频)》学习笔记:第一章 自然语言处理概论
  16. 数学建模之拟合插值方法
  17. iOS积分抽奖Demo,可以人为控制不同奖项的得奖率
  18. DeepTrack: Grouping RFID Tags Based on Spatio-temporal Proximity in Retail Spaces-翻译
  19. 关于Win7远程桌面无法连接的解决办法
  20. 二叉排序树(查找树)的平均查找长度

热门文章

  1. 饮用水公司配送管理系统可行性报告
  2. MSM8960和MSM8930
  3. Python Pyecharts模块Map绘制中国地图自定义省份名称
  4. 基于Android系统手机通讯录管理软件的设计与开发
  5. 并行计算 SLIC超像素算法(一) 大致描述
  6. mysql-front 8.0_使用SQL-Front启动MySQL8.0报错
  7. html中实现LED字体步骤记录
  8. java 枚举 排序_基于枚举常量的Java排序
  9. 图机器学习——1.1 传统方法:基于节点
  10. web前端开发面试题