python全栈学习总结三:函数学习

一函数基本概念

1 函数定义

  def 函数名(参数1,参数2,参数3,......):

    """

    功能:

    参数1:

    参数2:

    参数3:

    ......

    返回值:

    """

    函数体(处理方法,执行过程)

    return    返回值

  只要是函数开头就用def定义,后面紧跟函数名,在括号中加入需要传递的形参,用冒号后面表示函数体,表示具体实现的方法,处理过程,最后返回值。函数参数可以没有,也可以有一个或多个,没有具体数量限制。以下是我对函数的理解:函数名是整个函数代码段的入口地址,在内存中存储时,是一个实时内存的地址,一个函数我们也可以看成一个变量,一个函数名即一个变量地址,函数名加上小括号表示函数执行。找到内存中的入口地址,执行相关的代码段,函数使用遵循的原则是先定义后调用,若是没有定义,提前调用,系统会报错,python解释器在解释代码时,实时运行传入的变量,运行到没有定义的函数变量,必然会报错。函数返回值在没有任何返回时返回None,一个或以元组的形式返回多个值。

2 函数参数

  函数传递的参数即形参变量只能在函数内部有效,主要有这么几种:

  位置参数:调用函数时,按照固定位置(固定顺序)一个也不落的全部传递。

  关键字参数:调用函数时,可以给相关关键字(即形参的命名)来传递,只要关键字都对上,打乱顺序无所谓不影响函数调用。

  默认参数:在函数定义时,可以预先给形参赋值参数,在函数调用时,可以不用赋值,使用默认的参数,也可以重新赋值,针对特殊场合使用方便。

  参数数组:若是传递的参数不固定,则可以使用参数数组的形式,*args表示以元组的形式传递参数,**kwarg表示以字典的形式传递参数。

*arg形式传递数组

def foo(x,y,*args):print(x,y)print(args)
foo(1,2,3,4,5)def foo(x,y,*args):print(x,y)print(args)
foo(1,2,*[3,4,5])def foo(x,y,z):print(x,y,z)
foo(*[1,2,3])

**kwarg传递形参数组

def foo(x,y,**kwargs):print(x,y)print(kwargs)
foo(1,y=2,a=1,b=2,c=3)def foo(x,y,**kwargs):print(x,y)print(kwargs)
foo(1,y=2,**{'a':1,'b':2,'c':3})def foo(x,y,z):print(x,y,z)
foo(**{'z':1,'x':2,'y':3})

3局部变量与全局变量

简单的来说,局部变量就是顶格来定义,局部变量在子程序中定义的。变量使用原则,先从内部找起,逐渐向外部扩。引用外部全局变量是,可以使用关键字global来引用,表示使用全局变量,使用上一级变量时,可以使用nonlocal。

name = '骑驴追车'def test1():name = '赢在大四'def test2():nonlocal  name  #引用上一级变量name = '扬帆起航'print(name)test2()print(name)
def test2():name = '在路上'def test3():global  namename = '若水三千'print(name)test3()print(name)
print(name)
test1()
test2()
print(name)

输出结果:

4嵌套函数总结

重点:函数即变量(python中变量即对象),变量的要求是先定义,后使用,那么函数也是如此,函数:先定义后引用!

name = "若水三千"
def foo():name ='在路上'def bar():print(name)return bar
a = foo()  #函数调用,函数返回值为函数名(函数首地址即变量)
print(a)  #产看变量类型
a()  #函数名保存在变量a中,加括号即可调用函数

5 递归函数

  简单的来说:函数自己调用函数自己,特点:不断的用栈来分配内存,所占内存很大。

要求:有个明确的结束条件

      每执行一次递归,函数规模有所减小

   递归效率不高

def test(n):if n > 1:sum = test(n-1)+nreturn sumelse:return 1
num = test(100)
print(num)

 

6 函数式编程

(1) 匿名函数

  lambda:变量:函数体

  fun1 = lambda r:2*3.14*r   #定义一个求周长的匿名函数

  fun2 = lambda x,y,z:(x+1,y+1,z+1) #定义一个匿名函数,返回多个值

(2)函数式编程特点

  不可变:不用变量保存状态,不修改变量

  函数即变量:函数名可以当做参数传递,也可以返回函数名(函数)

  尾调用:在函数的最后一步调用另一个函数(最后一行不一定是函数的最后一步)

(3)map函数推导过程

  map函数主要用在对一堆可迭代序列处理上,处理列表中的每一个元素,得到的结果是一个列表,列表中位置与个数与原来列表一样

"""
对一个列表进行自增一,求平方,求周长
"""
nums = [3,7,23,18,51]
#列表中的值自增一
num_s = []
for num in nums:num_s.append(num+1)
print(num_s)
#列表中的值求平方
num_s = []
for num in nums:num_s.append(num**2)
print(num_s)
#列表中的值求周长
num_s = []
for num in nums:num_s.append(num*2*3.14)
print(num_s)nums = [3,7,23,18,51]
def add_one(x):return x+1
def suq_value(x):return x**2
def cricle_value(x):return 2*3.14*x
def calc_map(func,arry):num_l = []for i in arry:num_l.append(func(i))return num_l
print(calc_map(add_one,nums))
print(calc_map(suq_value,nums))
print(calc_map(cricle_value,nums))nums = [3,7,23,18,51]
def calc_map(func,arry):num_l = []for i in arry:num_l.append(func(i))return num_l
print(calc_map(lambda x:x+1,nums))
print(calc_map(lambda x:x**2,nums))
print(calc_map(lambda x:x*2*3.14,nums))
"""
map函数输入两个对象,第一个为函数,第二个为可迭代对象列表元组字符串 返回值为内存对象的首地址,需要转化
"""
nums = [3,7,23,18,51]
print(list(map(lambda x:x+1,nums)))
print(list(map(lambda x:x**2,nums)))
print(list(map(lambda x:x*2*3.14,nums)))

(4)filter函数推导过程

filter函数功能:遍历列表中的每一个元素,判断每一个元素得到一个布尔值,如果为真,则留下来

"""
过滤掉列表中的某些字符
"""
name_lst = ['yz_zhg','yz_dx','yz_ds','zailushang','yz_ls']name_new =[]
for n in name_lst:if not n.startswith('yz'):name_new.append(n)
print(name_new)name_lst = ['yz_zhg','yz_dx','yz_ds','zailushang','yz_ls']def show_yz(x):return x.startswith('yz')
def filter_test(func,arry):name_new =[]for n in arry:if not func(n):name_new.append(n)return  name_new
print(filter_test(show_yz,name_lst))name_lst = ['yz_zhg','yz_dx','yz_ds','zailushang','yz_ls']
def filter_test(func,arry):name_new =[]for n in arry:if not func(n):name_new.append(n)return  name_new
print(filter_test(lambda x:x.startswith('yz'),name_lst))name_lst = ['yz_zhg','yz_dx','yz_ds','zailushang','yz_ls']
print(list(filter(lambda x:not x.startswith('yz'),name_lst)))

(5)reduce函数推导过程

  首先要使用from functools import reduce   导入

  功能:处理一个序列,然后进行合并操作

#求一个列表中所有值
num_l = [1,2,3,4,100]
res = 0
for i in num_l:res += i
print(res)
#去列表中所有数的乘积
res = 1
for i in num_l:res *= i
print(res)#求一个列表中所有值
num_l = [1,2,3,4,100]
def sum_value(x,y):return  x+y
def vol_value(x,y):return  x*y
def reduce_test(func,arry,init_value = None):if init_value is None:res = arry.pop(0)else :res = init_valuefor i in num_l:res = func(res,i)return  res
print(reduce_test(sum_value,num_l,10))
print(reduce_test(vol_value,num_l,10))from functools import reduce
num_l = [1,2,3,4,100]
print(reduce(lambda x,y:x+y,num_l))
print(reduce(lambda x,y:x*y,num_l))

  

  

转载于:https://www.cnblogs.com/qilvzhuiche/p/9293805.html

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

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

相关文章

街机模拟器联网简谈

Kawaks联网教程现在大多数模拟器的联网功能主要是靠"kaillera"来实现的,要想实现联网玩游戏,你必须有一个kaillera的客户端和一个服务器端的程序,客户端现在大多在模拟器中自带,而服务器端则是一个单独的程序.kaillera有多种操作系统,而大多是在windows下,好了废话不…

freeRTOS V10.0.1移植到STM32F407标准库 - 环境Keil5

最近因为工作需要用到FreeRTOS,其实开始本人内心是拒绝的因为自己只学习过UCOSIII还没实际上过什么大又复杂的工程,但是谁让FreeRTOS他是Free的呢公司成本考虑肯定是不会选择USOS的,这个道理就像公司内心深处不想给你涨工资一样。好了跑偏了言…

破解静态WEP KEY全过程

破解静态WEP KEY全过程广州卓讯盟科技有限公司 黄超毅Email:huangchaoyigzpia.com/demonalexdark2s.org发现首先通过NetStumbler确认客户端已在某AP的覆盖区内,并通过AP信号的参数进行‘踩点’(数据搜集)。NetStumbler 下载地址 http://www.n…

apicloud项目怎么运行_Spring Boot教程(3) – 运行第一个项目

把项目运行起来是极具成就感的事情,不管是在学习新语言还是新框架的过程中。上一篇文章说明了如何使用Spring Initializr和IDE来创建项目,下面就看看项目能不能跑起来,我们通过IDE和命令行,直观地理解框架的作用。先来一张Intelli…

Matlab从入门到精通 Chapter5 数据可视化

5-1 图形绘制示例 >> x2-17:0.02:3;>> y21./((x23).^21)1./((x29).^24)5; >> subplot(2,2,2);>> plot(x2,y2,rp);>> axis([-17 3 5 6.5]);>> title(figure2);>> grid on subplot 子图表绘制函数 默认情况下,plot函数将绘…

破解WEP密钥过程全解 (下)

三、实战破解过程1、用Kismet进行网络探测Kismet是一个基于Linux的无线网络扫描程序,这是一个相当方便的工具,通过测量周围的无线信号来找到目标WLAN。虽说Kismet也可以捕获网络上的数据通信,但在还有其他更好的工具使用(如Airodump)&#xf…

mpAndroidchart 坐标和图表距离_【玩转图表系列】六步,美化你的图表,让老板刮目相看!...

近期隆重推出图表分析系列,包括销售分析、盈亏分析、费用分析、趋势分析、进度分析等,通过双坐标图、甘特图、瀑布图、双层饼图等系列图表精美展现,专业高效,让你从初级学到高级、从小白跨越专业。今天开启我们邦邦财玩转图表第一…

SpringBoot+FreeMarker开发word文档下载,预览

背景&#xff1a; 开发一个根据模版&#xff0c;自动填充用户数据并下载word文档的功能 使用freemarker进行定义模版&#xff0c;然后把数据进行填充。 maven依赖&#xff1a; <parent> <groupId>org.springframework.boot</groupId> <artifactId>…

使用 IPsec 与组策略隔离服务器和域-第 7 章 IPsec 疑难解答

本章提供有关如何对 Internet 协议安全性 (IPsec) 问题&#xff08;如服务器和域隔离方案中的安全性问题&#xff09;进行疑难解答的信息&#xff0c;这些信息依赖于 Microsoft 信息技术 (IT) 小组的经验和方法。 在有可能的时候&#xff0c;本章将引用现有的 Microsoft 疑难解…

单片机的单个IO口可以发送数据吗_关于51单片机各个引脚它的功能你了解多少?...

对于40引脚双列直插51单片机各个引脚功能情况分析。P0端口一默认是开漏准双向IO口&#xff0c;没有输出没有驱动能力&#xff0c;要做逻辑输出要在外部接上拉电阻。P0端口除了作为普通的输入输出功能&#xff0c;还可以用来当做数据总线接口或者地址总线&#xff0c;当外面扩展…

git merge用法_常用命令之git操作(进阶篇)

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来&#xff0c;然后在不影响主线的同时继续工作。有人把 Git 的分支模型称为必杀技特性&#xff0c;而正是因为它&#xff0c;将 Git 从版本控制系统家族里区分出来。不同的分支可以理解为…

2G内存刚刚好 浅谈4G内存对笔记本的影响

随着Intel P3x系列芯片组的发布&#xff0c;DDR3内存的普及日益临近&#xff0c;AMD K10系列处理器AM2规格也正式支持DDR3内存&#xff0c;明年即将面临淘汰的DDRII内存是越来越便宜了。很多笔记本用户在购买笔记本的时候都把是否支持4G内存作为一个总要的衡量标准。官方资料里…

由object元素引出的事件注册问题和层级显示问题

项目有一个双击监控视频全屏的需求&#xff0c;视频播放使用的是IE下的ActiveX控件&#xff0c;web页面中使用HTML嵌入对象元素object。预期方案如下&#xff1a; 1.在开发ActiveX控件时加入双击事件。 2.通过div包裹object&#xff0c;控制div的大小从而间接实现全屏效果。 在…

cad钣金展开插件_钣金高级工考试大小头手工展开图步骤教程

提醒&#xff1a;点上方↑↑↑“钣金学习网”免费关注简单方法一: 等分弧画法简单方法二: 角度计算画法1、先画一条中心直线&#xff0c;在线上取一点A&#xff0c;过&#xff21;点画一条与中心线垂直相交线。量取大头半径以&#xff21;点为起点在相交线上标注一点&#…

介绍一个新鲜玩意 开源的杀毒软件

有“免费的午餐”我们为什么不吃呢&#xff1f;杀毒软件一定要购买或用D版吗&#xff1f;先别忙着下结论&#xff0c;请耐心看完本文&#xff0c;然后再告诉我你是怎么想的。&#xff08;一&#xff09;、ClamWin Free Antivirus 开源反病毒软件 GPL协议SourceForge页面&#x…

没有可用软件包 jenkins。_Jenkins分布式构建与并行构建

Jenkins分布式构建与并行构建 jenkins的架构 Jenkins采用的是“masteragent&#xff08;slave&#xff09;”架构。Jenkins master负责提供界面、处理HTTP请求及管理构建环境&#xff1b;构建的执行则由Jenkins agent负责 Jenkins agent的横向扩容&#xff1a;只需要增加agent就…

qstring去掉特定字符_如何花式、批量且操作简单地处理字符?

文本字符的规范化&#xff0c;是批量处理的前提。多来源数据或是数据收集本身就必然存在不规范情况&#xff0c;于是批量地完成它就成了常见的需求。对于花式批量处理&#xff0c;自然要说到正则表达式。“正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好…

性能度量RMSE

回归问题的典型性能度量是均方根误差&#xff08;RMSE:Root Mean Square Error&#xff09;。如下公式。 m为是你计算RMSE的数据集中instance的数量。x(i)是第i个实例的特征值向量 ,y(i)是其label&#xff08;期望的模型输出&#xff09;。如下&#xff1a;X是包含了所有实例的…

【数学建模】day02-整数规划

基本类似于中学讲的整数规划--线性规划中变量约束为整数的情形。 目前通用的解法适合整数线性规划。不管是完全整数规划(变量全部约束为整数)&#xff0c;还是混合整数规划(变量既有整数又有实数)&#xff0c;MATLAB都提供了通用的求解函数。 一、0-1型整数规划 这类规划将变量…

VMware的linux虚拟机实现和windows的文件共享

使用的centos7和windows10&#xff0c;在虚拟机centos7中是root身份。由于是第一次用没有界面的linux&#xff0c;可谓是困难重重…… 一 打开VMware&#xff0c;然后选中你的虚拟机&#xff0c;我的是centos7。然后点击工具栏”虚拟机“&#xff0c;然后选择”安装VMware tool…