python函数高级
一、函数的定义
函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用函数名即可
特性:
减少重复代码
使程序变得可扩展
使程序变得易维护
二、函数的参数
2.1、形参和实参数
形参,调用时才会存在的值
实惨,实际存在的值def calculate(x,y): #形参,调用时才会存在的值
res=(x*y)
return res #返回值,返回res的值
n=calculate(5,3) #实惨,实际存在的值
print(n) #打印
2.2、默认参数
定义:当不输入参数值会有一个默认的值,默认参数要放到最后def stu_register(names,age,course,country="CN"): # 这里country="CN"就是默认参数
print("学员信息表".center(50,"%"))
print("姓名:",names)
print("年龄:",age)
print("国家:",country)
print("课程:",course)
stu_register("王二","22","linux")
2.3、 关键参数
定义: 正常情况下,给函数传参数要安装顺序,不想按顺序可以用关键参数,只需要指定参数名即可,(指定了参数名的就叫关键参数),但是要求是关键参数必须放在位置参数(以位置顺序确定对应的参数)之后def stu_register(names,age,course,country="CN"):
print("学员信息表".center(50,"%"))
print("姓名:",names)
print("年龄:",age)
print("国家:",country)
print("课程:",course)
stu_register("王二",age="22",course="linux") # 这里age="22",course="linux"就是关键参数
2.4、非固定参数
定义: 如你的函数在传入参数时不确定需要传入多少个参数,就可以使用非固定参数
# 通过元组形式传递def sed_alert(*args):
for u in args:
print("发送报警给",u)
sed_alert("老刘","老王","老李") #同时把"老刘","老王","老李传递给args
# 通过列表形式传递def sed_alert(*args):
for u in args:
print("发送报警给",u)
sed_alert(*["老刘","老王","老李"]) # 通过列表进行传递,列表前面要加一个*
# 字典形式(通过k,value的方式传递)def stu_register(args):
print("发送报警给:" ,args)
stu_register(names="zhangsan",age="22")
# 通过变量的方式传递def stu_register(args):
print("发送报警给:" ,args)
d = {"zhangsan":22,"lisi":23}
stu_register(**d) #变量前面要加两个*
三、函数的返回值
作用:
返回函数执行结果,如果没有设置,默认返回None
终止函数运行,函数遇到return终止函数def stu_register(**args):
print("发送报警给:" ,args)
return 1
status=stu_register(names="zhangsan",age="22")
print(status) #返回函数返回值
四、变量的作用域
全局变量和局部变量
在函数中定义的变量叫局部变量,在程序中一开始定义的变量叫全局变量
全局变量作用域整个程序,局部变量作用域是定义该变量的函数
当全局变量与局部变量同名是,在定义局部变量的函数内,局部变量起作用,其他地方全局变量起作用
同级的局部变量不能互相调用
想要函数里边的变量设置成全局变量,可用global进行设置globvar = 0
def set_globvar_to_one():
global globvar # 使用 global 声明全局变量
globvar = 1
def print_globvar():
globvar = 2
print(globvar) # 没有使用 global
set_globvar_to_one()
print (globvar) # 输出 1
print_globvar() # 输出 1,函数内的 globvar 已经是全局变量
五、特殊函数
5.1、嵌套函数
定义: 嵌套函数顾名思义就是在函数里边再嵌套一层函数def fun1():
print("第一层函数")
def fun2():
print("第二层函数")
fun2()
fun1()
提示 在嵌套函数里边调用变量是从里往外依次调用,意思就是如果需要调用的变量在当前层没有就会去外层去调用,依次内推
匿名函数
基于Lambda定义的函数格式为: lambda 参数:函数体
参数,支持任意参数。```python lambda x: 函数体 lambda x1,x2: 函数体 lambda *args, **kwargs: 函数体 ```
函数体,只能支持单行的代码。
```python def xxx(x): return x + 100 lambda x: x + 100 ```
返回值,默认将函数体单行代码执行的结果返回给函数的执行。
```python func = lambda x: x + 100 v1 = func(10) print(v1) # 110 ```
def func(a1,a2):
return a1 + a2 + 100
foo = lambda a1,a2: a1 + a2 + 100
匿名函数适用于简单的业务处理,可以快速并简单的创建函数。
# 与三元运算结合def calc(x,y):
if x
5.3、高阶函数
定义:变量可以指向函数,函数的参数可以接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称之为高阶函数 只需要满足一下任意一个条件,即是高阶函数
接收一个或多个函数作为输入
return返回另一个函数
```python def get_abs(n): return int(str(n).strip("-")) #将负数改成正数 def add(x,y,f): return f(x) + f(y) print(add(-5,-10,get_abs)) # 调用get_abs函数,将get_abs传递给变量f ```
5.4、递归函数
定义:一个函数可以调用其他函数,如果一个函数调用自己本身,这个函数就称为递归函数
在默认情况下Python最多能递归1000次,(这样设计师是为了防止被内存被撑死)可以通过sys.setrecursionlimit(1500)进行修改
递归实现过程是先一层一层的进,然后在一层一层的出来
必须有一个明确的条件结束,要不然就是一个死循环了
每次进入更深层次,问题规模都应该有所减少
递归执行效率不高,递归层次过多会导致站溢出
# 计算4的阶乘 4x3x2x1def calc(n):
if n==1:
return 1
return n* calc(n-1)
print(calc(4))
# 打印数字从1-100def fun(n):
if n==101:
return 1
print(n)
fun(n+1)
fun(1)
5.5、闭包现象
定义:内层函数调用外层函数的变量,并且内存函数被返回到外边去了def outer():
name = "老王,你最牛"
def inner():
print("inner",name)
return inner #返回inner的内存地址
func= outer() #相当于把inner赋值给func
func() #相当于执行了inner
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
PPT造车也能上市,电动汽车的风口有多大?前乐视老板贾跃亭在2014年创立的法拉第未来公司上市了,这也是多年PPT造车的结果。即使车没量产,人在国内也破产了,却让一家电动车公司成功上市。看看这几天兴盛的电动车品牌不禁感叹电
上市公司被电信诈骗数千万,是被骗还是另有玄机?活久见,上市公司居然被电信诈骗,一骗就是2000多万,搞得一个放现金贷的老板都打算改行了。以前被骗的,都是未经世事的学生年轻人或者上了年纪的老人,换句话说都是C端用户。C端客户采用
网贷溃败银行进击,贷款中介喝汤今年是所有网贷包含P2P及现金贷的退出之年,P2P已经6000家剩了几百个没退干净的正在喘最后一口气。与此同时,现金贷也正在被拷打,短信行业的刚出来,支付行业的45家又进去了。据最
复供,远行,荣耀蓄势待发作为荣耀单飞后的第一款产品,22日荣耀V40的发布,引起了大家的关注。不过,在发布会后,荣耀CEO赵明表示今天的荣耀从供应角度生产供货的角度已经没有任何牵制,可以全力以赴面向市场。
B站破圈一路狂飙,未来会失速吗?还记得雷式英语第一次出现在B站(哔哩哔哩,以下也简称为B站)上的时候,那句超有带感的AreYouOK?一度风靡全网。甚至不少年轻网友见面打招呼,一开口也都是学雷布斯问一句AreYo
又是樱花季,据说赏樱和苏宁超市的樱花味RIO最配三月伊始,又到了樱花含苞待放的时节,整个空气中都是清新芬芳的气息。对于喜欢踏青的人们来说,3月末赏樱季节自然是必不可少,既可以去岛国日本体验原汁原味的大和味道,也可以去英雄城市武汉
苏宁易购年货节如火如荼,牛奶竞争激烈,伊利销量再次反超蒙牛随着年关的临界,牛奶受到的关注程度非同寻常,很多大小超市甚至把牛奶摆放到入口处等显眼位置做促销,烟酒奶果已经成为过年走亲访友的送礼四大件,地位非同寻常。当然,这也和现在崇尚的健康生
饿了么骑手私自换菜赚差价,这事究竟跟平台有没有关系?近日,有关饿了么骑手私自换菜赚差价一事在网上不断发酵。事实上,在外卖配送行业迅速发展的这些年中,各种乱象层出,有涉及到商家卫生条件脏乱差却轻松通过平台的审核也有消费者因为超时给了外
魅族18成黄牛最爱,看来情怀确实值千金可能很多人还对前几天魅族18的发布会印象深刻,如果弄一个史上翻车最严重发布会的排行,除了锤子TNT雷打不动永葆第一,估计魅族这场就能成功登上亚军领奖台。不过平心而论,魅族18虽然发
如果徐翔给猎狐当编剧最近猎狐正在热播,但作为一个曾经在互金行业做过,对证券市场一知半解的人,生生看出了一堆的BUG。剧中的股评人郝小强,据说是参照了私募大佬徐翔,但看这笨劲是离徐翔差远了,而且里面描述
原油宝处理结果来了,为何小户会比大户受优待?今天下午,原油宝的处理结果出来了,小户给保证金两成,大户全赔,但都不用再倒贴了,穿仓的部分中国银行出了。这处理方式看到了一丝熟悉的味道,跟很多P2P平台一样,中行先把占人群大多数占
助听器一定要双耳配同款的吗?对听力有障碍的人,选配助听器一事,在我陪父亲去专卖店,选配6年中的体会,一开始仅配一个耳背式助听器,但随着老人年龄的增长,听力逐步减弱,我认为双耳都配戴,听力效果显得更好。助听器随
戴助听器会不会听到吵的声音会头晕?导致头晕的可能性1。初次佩戴,出现不适应的现象。2。助听器的性能比较简单,对噪音处理不好,嘈杂环境吵得头晕。3。调试的问题,增益给的过大,也会吵得头晕现在助听器都是根据听力和需求精
火星着陆遭国外质疑,祝融号传回着陆影像,为何数据接收这么久?他质疑或者是相信,跟我们没关系,只要你别跟着瞎起哄就行祝融号登陆火星的前两天并没有与天问一号轨道器建立数据链路,而是采用直传地球的方式,传输速率最高16Bs。主要是回传工程参数。现
想买一部流畅,护眼的手机,求推荐,5000以下的?5000元这个价位卡得很死,苹果新款就不用想了,甚至连华为Mate40Pro小米11Ultra这样顶级的安卓旗舰也买不到。不过可以考虑以下几款手机第一款vivoX60Pro这应该是
新买的手机上面的原厂膜你们会不会撕掉?现在大部分手机都会贴上原厂膜了,最开始是OPPOvivo带头,华为在经历了疏油层门之后也给手机贴了原厂膜。就连一向比较抠门的小米,这两年的新机也都贴上了出厂膜。对于这层膜,我个人的
为什么京东卖的小米手机比小米官网还便宜?不请自来,还望勿怪。因为经常在京东上买购买手机的缘故,所以对渠道这方面的问题还是比较了解的,所以就让我来为大家解答一下吧。京东是小米手机的授权经销商,拿货的量大,而且小米方面在网上
那些催收人是怎么搞到欠款人的新号码的?01hr网络渠道找到的现在的网络媒体太发达了,每个人都有自己常用的网络社交工具。很多人都喜欢分享自己工作和生活中的点点滴滴,QQ空间朋友圈微博抖音等等社交网络工具中经常会更新我们的
今日头条各种游戏广告都是轻松提现真的假的?首先,我们不能说是假的,为了验证是不是假的,我一口气下载了好几十个这类app,从二月到五月,总计4个月共收入276。24元说到这里,大家可能觉得这有点少,4个月确实少,但这只是平时
烟花燃放产生的温度能不能消灭空气中的新冠病毒?新冠病毒最适合低温下生存,遇到高温活力变小或自取灭亡。这是经过科研人员,近一年来的摸索研究经过科学论断出来的真理。所以专家们才提醒人们,尽量不要接触那么多冷冻食品。特别是海产品和肉
为何任正非宁可自损八百,也要围剿李一男?西方资本的渗入李一男对华为有多重要呢?当年他与郑宝用开发的万门机所使用的准SDH技术,至今仍然是国际通信技术的最高标准。有人说一个李一男,半部华为史,其实更确切地说一个李一男,半部中国通信史。李
为什么中国所有手机厂商不一致启用鸿蒙操作系统来抵制谷歌?随着商务部最新出台的阻断法实施,国内各手机产品在中国境内继续使用安卓系统是要申请得到批准才行的,不过我认为商务部不会同意继续使用安卓,这样三星小米等手机在中国境内销售只能安装自研操