Python基础刻意训练——DAY5

Python基础刻意训练——DAY5

学习内容:
1.主要内容:函数与lambda表达式

前言:

函数作为程序的重要组成部分,连接起了各种复杂的部分:一方面,函数将需要的功能进行封装,避免了变量的命名出现重复的情况,也保证了程序的稳定性,与检查代码的简便性。另一方面,函数避免重复书写代码,提升效率,方便调用。
而lambda表达式则更加强化函数的简便性,它可以直接书写与调用,不必再去def(定义)函数,也更加方便了变量的命名。

1)函数:
- 创建函数

基本格式

def 函数名(参数):
      函数体
     (返回值)

注意:创建函数,必须要加上冒号(:)
后面调用函数。
示例:

def square(x):
    return x*x
square(15)   ###求15的平方

- 形参与实参:

  1. 形参不影响实参

  2. 函数是返回‘值’,过程是没有返回值的;python一般没有返回值,只有过程(不写return的时候)
    其实(不写return的时候)也在返回值——None;
    python动态确定类型,可以返回多个值
    示例:

def back():
    return 1,2,6,'shj'   ##返回(1,2,6,‘shj’)元组

参考链接:https://www.cnblogs.com/kex1n/p/8285351.html
- 函数变量的作用域问题:

1. 局部变量全局变量

局部变量不影响全局变量,当出现全局变量与局部变量名字一样时。函数内部创建一个名字一样的变量,从而保护全局变量
但是global关键字实现局部变量升级为全局变量

2. 内嵌函数

在内部函数的整个作用域都在外部函数作用域之内(fun2都在fun1之内作用,即除了fun2可以在fun1内部被调用以外,就没有可以调用的了)——只能fun1调用fun2
示例:

def fun1():
    print("调用了fun1")
    def fun2():
        print("调用了fun2")
    fun2()
fun1()

实验结果如下:
在这里插入图片描述

3. 闭包:

如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数被认为是闭包(closure)------则想要调用funy必须先调用funx,funx不允许funy出轨
示例:

def FunX(x):
    def FunY(y):
        return x*y
    return FunY    ##返回的是一个函数——这个函数就是闭包,内部函数FunY()对于外部变量进行了引用(x)
i=FunX(2)
type(i)     ###显示的是函数类型
i(5)   ##此时调用的是内部函数————并且返回2*5=10

2)lambda表达式:

lambda本质上是构建一个函数对象,是一个匿名函数。
基本形式:

lambda  [x,y…](相关参数):  x*2+1参数的相关表达式

作用:

  1. 使得代码简洁,省去定义函数的时间与过程;
  2. 对于某些抽象函数以及相关的一些只使用一两次的函数,省去了起名字的过程;
  3. 简化代码的可读性,可以不需要再次返回原来的最初的函数定义中进行代码的阅读,可以直接在lambda中一次性的对函数有着详细的了解。

相关示例与代码:

###lambda表达式
g=lambda x :x*x   ##定义平方的表达式
g(15)   ##求15的平方

###函数方式
def g(x):
    returnx*x
g(x)   ##相比之下,lambda省去了def 的过程,省去了对于函数名的命名,更加简洁 

3)递归:
递归作为一种分治思想,具有很强的巧妙性。但是使用递归的时候,需要明确:某些情况下的递归效果很好——汉诺塔游戏树结构的定义谢尔宾斯基三角形递归自拍照……而在递归面临着空间开销的问题,如果处理问题的数据量很大,此时用递归可能就不是那么合适。因此,一定要合理审判情况。

在Python中,递归的默认深度设置为100层,网络爬虫可以设置递归深度

import sys
sys.setrecursionlimit(参数)

递归的精髓在于设置递归形式终止条件,下面举几个例子,来说明情况:
- 1.求阶乘

def fun(n):
    if n==1:
        return 1
    else:
        return n*fun(n-1)
n=int(input('请输入一个正整数:'))
result=fun(n)
print('%d的阶乘是:%d'%(n,result))

- 2.斐波那契数列

###递归方式
def fab(n):
    if n<1:
        print('输入错误!!')
        return -1
    if n==1 or n==2:
        return 1
    else:
        return fab(n-1)+fab(n-2)
result = fab(20)
if result !=-1:
    print('一共有%d对兔子诞生!!!'% result)
###递归方式
def fab(n):
    n1=1
    n2=1
    n3=1
    if n<1:
        print('运算错误!!')
        return -1
    while(n-2)>0:
        n3=n1+n2
        n1=n2
        n2=n3
        n-=1
    return n3
result=fab(20)
if(result!=-1):
    print('总共有%d对小兔崽子诞生!!!'%result)

注意:
在实验中可以发现,当数字量增大的时候,循环结构的运行时间明显快于递归结构运行时间,这再一次说明递归由于空间开销较大,一定要根据具体情况慎用递归。

- 3.汉诺塔游戏

# py10_29.汉诺塔游戏的递归实现.py
def hanoi(n,x,y,z):
   if n == 1:
       print(x,'-->',z)#如果只有一层,直接从x移动到z
   else:
       hanoi(n-1,x,z,y)#将前n-1个圆盘从x移动到y上
       print(x,'-->',z)#将最底下的第64个圆盘从x移动到z上
       hanoi(n-1,y,x,z)#将y上的63个圆盘移动到z上 
n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'X','Y','Z')

2.今日学到的BIF

  • filter(过滤函数,相关的数据)——过滤掉不需要的东西 ——函数也可以使用lambda表达式实现
    注意:
    在python2 中,filter直接生成过滤后的序列,而在python3中,得到的是filter的类,需要将其实例化。
    相关示例与代码:
y=filter(lambda x:x%2==1 ,[1,2,3,4,5,6])   ###过滤掉不属于奇数的数字,留下奇数
list(y)    ###实例化filter类型

  • map(迭代的函数,可迭代的序列)
    映射:(可迭代函数与序列)将序列的每一个元素作为函数的参数进行加工,直到可迭代序列的每一个元素都加工完毕,返回所有加工后的元素得到的新序列
    相关示例与代码:
y=map(lambda x:x*x ,[1,2,3,4,5,6])   ###返回序列中元素的平方数
list(y)   ##实例化map类型   

注意:在这些操作中可以发现,lambda表达式对于该应用相当便捷,定义与使用同步进行,省去了许多不必要的工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 计算思维训练——绘图进阶包括使用 Python 的绘图库如 matplotlib 和 seaborn 进行数据可视化,学习创建不同类型的图表,如折线图、散点图、条形图、饼图等。同时还可以学习如何调整图表的样式、添加图例和标题等。 ### 回答2: Python 计算思维训练的一个方面是绘图进阶,这意味着训练者将学习如何使用 Python 编程语言来创建更复杂的图形,并进一步了解算法和数据可视化。在这方面,Python 是一门非常适合初学者入门的编程语言,因为它的代码易于理解,有着强大的数据分析和可视化功能。 在 Python 中,绘制图形最重要的工具是 Matplotlib 库,它是一个非常流行的 Python 绘图工具,可以处理各种数据类型和各种可视化类型。Matplotlib 库可以让程序员轻松绘制各种类型的图形,如折线图,散点图,条形图等,并且可以以多种格式保存图像。 但是,绘制复杂图形需要更熟练的 Python 编程技能。训练者需要了解如何使用 Matplotlib API,编写自定义函数和类,并掌握常见功能比如数据的可视化、图形的注释和颜色的编辑等等。另外,训练者还需要深入了解如何使用一些常见的数据可视化库,例如 Seaborn 和 Plotly,这些库可以生成美观而有用的数据可视化结果。 在绘图进阶训练中,学生将学习如何使用 Python 计算思维来更好地理解和体现数据。Python 是一种高效的编程语言,能够轻松地处理各种类型和大小的数据集,训练者可以利用它来探索和可视化数据,识别数据的趋势、模式和异常值,以便做出更准确和有意义的结论。 总之,Python 计算思维训练的绘图进阶方面可以帮助学生掌握更高级的编程技能,能够生成复杂美观的数据可视化效果,为更好地理解和分析数据打下坚实的基础。 ### 回答3: Python是一种高级编程语言,它具有高度的可读性和简单易学的特点,广泛应用于数据分析、机器学习、人工智能、Web开发等领域。在这些应用场景中,绘图是非常重要的一环。Python的绘图工具也随着时间的推移而不断完善,使得绘图变得越来越容易和灵活。 在Python中,最常用的绘图工具是Matplotlib。它是一款基于Python的绘图库,能够轻松地在Python语言中创建各种类型的图表和多级子图。Matplotlib可以输出高质量的PNG、PDF、SVG、EPS等格式的图片,在学术研究和工作中被广泛使用。 通过Matplotlib的学习,可以帮助我们了解如何使用Python进行数据可视化和交互式可视化。具体来说,Python绘图思维的训练需要掌握以下几个方面: 1. 数据准备 数据准备是绘制图表的基础。这个过程包括从多个来源获取数据,对数据进行处理和清理,并准备数据以用于绘图。Python提供了很多强大的数据处理工具,比如NumPy、Pandas等。 2. 基本图表绘制 Python中最基本的绘图类型是线图、柱状图和散点图。Matplotlib提供了一组简单又灵活的函数来实现这些绘图类型,使得绘图过程非常容易。 3. 自定义图表 对于特定的应用场景,需要定制化的图表展示,Matplotlib也支持自定义的图表设计,包括修改颜色、字体、标记点等设置。 4. 组合图表 有时候需要将多个图表组合在一起以达到更全面的分析,Matplotlib也支持组合图表的设计。从简单的双轴图表到更复杂的多轴图表,Matplotlib提供了丰富的功能。 5. 交互式图表 最后,Python也支持交互式图表,这使得用户可以对图表进行缩放、平移、旋转和选择数据点等操作,从而深入了解数据的细节。 总之,在Python中进行绘图,需要数据处理、图表设计和交互式特性的支持。这些功能都可以通过Matplotlib实现,从而为学习者提供了强大的工具。对于正在进行数据分析、机器学习或其他领域的分析工作的从业人员和学生而言,掌握Python绘图思维的训练是至关重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值