YB亚博APP首页
你的位置:YB亚博APP首页_亚博yb95官网 > 亚博yb95新闻中心 > YB亚博APP首页 [Python](七)函数

YB亚博APP首页 [Python](七)函数

时间:2022-06-12 12:47 点击:95 次

1.函数前导

函数是组织好的,可访佛使用的,用来完毕单一,或关系联功能的代码段。

函数能擢升应用的模块性,和代码的访佛欺诈率。咱们仍是剖析Python提供了许多内建函数,比如print。但也不错我方创建函数,这被叫做用户自界说函数。

2.函数界说

你不错界说一个由我方想邀功能的函数,以下是肤浅的章程:

函数代码块以def重要词起首,后接函数标志符称号和圆括号。

任何传入参数和自变量必须放在圆括号中间。圆括号之间不错用于界说参数。

函数的第一滑语句不错采纳性地使用文档字符串—用于存放函数证实。

函数内容以冒号肇始,而且缩进。

Return[expression]终结函数,采纳性地复返一个值给调用方。不带抒发式的return相配于复返None。

语法:

deffunctionname(parameters):"函数_文档字符串"function_suite

默许情况下,参数值和参数称号是按函数声明中界说的的端正匹配起来的。

示举例下:

defprintme(str):"打印传入的字符串到尺度露馅建设上"printstrreturn

3.函数调用

界说一个函数只给了函数一个称号,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你不错通过另一个函数调用试验,也不错获胜从Python指示符试验。

示举例下:

defprintme(str):"打印任何传入的字符串"printstr;return;#Nowyoucancallprintmefunctionprintme("我要调用用户自界说函数!");printme("再次调用团结函数");

输出结果:

我要调用用户自界说函数!再次调用团结函数

4.参数传递

在python中,类型属于对象,变量是莫得类型的

a=[1,2,3]a="w3cschool"

以上代码中,[1,2,3]是List类型,"w3cschool"是String类型,而变量a是莫得类型,她只是是一个对象的援用(一个指针),不错是List类型对象,也不错指向String类型对象。

可调动(mutable)与不可调动(immutable)对象

在python中,strings,tuples,和numbers是不可调动的对象,而list,dict等则是不错修改的对象。

不可变类型:变量赋值a=5后再赋值a=10,这里实质是腾达成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相配于腾达成了a。

可变类型:变量赋值la=[1,2,3,4]后再赋值la[2]=5则是将listla的第三个元素值调动,本人la莫得动,只是其里面的一部分值被修改了。

python函数的参数传递:

不可变类型:类似c++的值传递,如整数、字符串、元组。如fun(a),传递的只是a的值,莫得影响a对象本人。比如在fun(a)里面修改a的值,只是修改另一个复制的对象,不会影响a本人。

可变类型:类似c++的援用传递,如列表,字典。如fun(la),则是将la信得过的传往时,修改后fun外部的la也会受影响

python中一切都是对象,严格意旨咱们不成说值传递如故援用传递,咱们应该说传不可变对象和传可变对象。

python传不可变对象实例

实例(Python2.0+)

defChangeInt(a):a=10b=2ChangeInt(b)printb#结果是2

实例中有int对象2,指向它的变量是b,在传递给ChangeInt函数时,按传值的方式复制了变量b,a和b都指向了团结个Int对象,在a=10时,则腾达成一个int值对象10,并让a指向它。

按值传递参数和按援用传递参数(传可变对象实例)

统统参数(自变量)在Python里都是按援用传递。要是你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。举例:

#可写函数证实defchangeme(mylist):"修改传入的列表"mylist.append([1,2,3,4]);print"函数内取值:",mylistreturn#调用changeme函数mylist=[10,20,30];changeme(mylist);print"函数外取值:",mylist

传入函数的和在末尾添加新内容的对象用的是团结个援用。故输出结果如下:

函数内取值:[10,20,30,[1,2,3,4]]函数外取值:[10,20,30,[1,2,3,4]]

5.参数

以下是调用函数时可使用的认真参数类型:

必备参数

必备参数须以正确的端正传入函数。调用时的数目必须和声明时的雷同。

调用printme函数,你必须传入一个参数,否则会出现语法谬误,示举例下:

#可写函数证实defprintme(str):"打印任何传入的字符串"printstr;return;#调用printme函数printme;

输出结果:

Traceback(mostrecentcalllast):File"test.py",line11,inprintme;TypeError:printmetakesexactly1argument(0given)

定名参数

定名参数和函数调用关系缜密,函数调用使用重要字参数来信托传入的参数值。

使用定名参数允许函数调用时参数的端正与声明时不一致,因为Python证明器好像用参数名匹配参数值。

示举例下:

#可写函数证实defprintinfo(name,age):"打印任何传入的字符串"print"Name:",name;print"Age",age;return;#调用printinfo函数printinfo(age=50,name="miki");

输出结果:

Name:mikiAge50

缺省参数

调用函数时,缺省参数的值要是莫得传入,则被以为是默许值。

示举例下:

#可写函数证实defprintinfo(name,age=35):"打印任何传入的字符串"print"Name:",name;print"Age",age;return;#调用printinfo函数printinfo(age=50,name="miki");printinfo(name="miki");

输出结果:

Name:mikiAge50Name:mikiAge35

不定长参数

要是需要一个函数能束缚比当初声明时更多的参数。这些参数叫做不定长参数,和上述3种参数不同,声明时不会定名。基本语法如下:

deffunctionname([formal_args,]*var_args_tuple):"函数_文档字符串"function_suitereturn[expression]

加了星号(*)的变量名会存放统统不决名的变量参数。采纳未几传参数也可。如下实例:

#可写函数证实defprintinfo(arg1,*vartuple):"打印任何传入的参数"print"输出:"printarg1forvarinvartuple:printvarreturn;#调用printinfo函数printinfo(10);printinfo(70,60,50);

以上实例输出结果:

输出:10输出:706050

6.匿名函数

类似Java,python使用lambda来创建匿名函数。

lambda只是一个抒发式,函数体比def肤浅好多。

lambda的主体是一个抒发式,而不是一个代码块。只是能在lambda抒发式中封装有限的逻辑进去。

lambda函数领有我方的定名空间,且不成拜谒自有参数列表以外或全局定名空间里的参数。

天然lambda函数看起来只可写一滑,却不等同于C或C++的内联函数,后者的相关是调用小函数时不占用栈内存从而增多运行效果。

lambda函数的语法只包含一个语句,如下:

lambda[arg1[,arg2,.....argn]]:expression

示举例下:

#可写函数证实sum=lambdaarg1,arg2:arg1+arg2;#调用sum函数print"Valueoftotal:",sum(10,20)print"Valueoftotal:",sum(20,20)

输出结果:

Valueoftotal:30Valueoftotal:40

7.return语句

return语句[抒发式]退出函数,采纳性地向调用方复返一个抒发式。不带参数值的return语句复返None。之前的例子都莫得示范怎样复返数值。

示举例下:

#coding=utf-8#!/usr/bin/python#可写函数证实defsum(arg1,arg2):#复返2个参数的和."total=arg1+arg2print"Insidethefunction:",totalreturntotal;#调用sum函数total=sum(10,20);print"Outsidethefunction:",total

以上实例输出结果:

Insidethefunction:30Outsidethefunction:30

8.变量作用域

一个情势的统统的变量并不是在哪个位置都不错拜谒的。拜谒权限决定于这个变量是在那处赋值的。

变量的作用域决定了在哪一部分情势你不错拜谒哪个特定的变量称号。两种最基本的变量作用域如下:

全局变量

局部变量

界说在函数里面的变量领有一个局部作用域,界说在函数外的领有全局作用域。

局部变量只可在其被声明的函数里面拜谒,而全局变量不错在通盘情势范畴内拜谒。调用函数时,统统在函数内声明的变量称号都将被加入到作用域中。

实举例下:

total=0;#Thisisglobalvariable.#可写函数证实defsum(arg1,arg2):#复返2个参数的和."total=arg1+arg2;#total在这里是局部变量.print"Insidethefunctionlocaltotal:",totalreturntotal;#调用sum函数sum(10,20);print"Outsidethefunctionglobaltotal:",total

以上实例输出结果:

Insidethefunctionlocaltotal:30Outsidethefunctionglobaltotal:0

9.函数式编程

函数式编程的特质

把计较视为函数而非指示

纯函数式编程,不需要变量,莫得反作用,测试肤浅

维持高阶函数,代码简单

python维持的函数式编程

不是纯函数式编码:允许有变量

维持高阶函数:函数也不错当作变量传入

维持闭包:有了闭包就能复返函数

有适度地维持匿名函数

10.高阶函数

高阶函数:只可经受函数当作参数的函数

变量不错是指向函数

函数的参数不错经受变量

一个函数不错经受另一个函数当作参数

能经受函数当作参数的函数等于高阶函数

底下先容几个常见的高阶函数

1.map函数

map是Python内置的高阶函数,它经受一个函数f和一个list,并通过把函数f顺次作用在list的每个元素上,获得一个新的list并复返。

举例,关于list[1,2,3,4,5,6,7,8,9],要是但愿把list的每个元素都作平日,就不错用map函数。只需要传入函数f(x)=x*x,就不错欺诈map函数完成这个计较(**老成:python3中map复返iterators类型,不再是list类型。进行list救援即可**):

示举例下:

deff(x):returnx*xprintmap(f,[1,2,3,4,5,6,7,8,9])

输出结果:

[1,4,9,10,25,36,49,64,81]

老成:map函数不改变原有的list,而是复返一个新的list

2.reduce函数

reduce函数亦然Python内置的一个高阶函数。reduce函数经受的参数和map类似,一个函数f,一个list,但行动和map不同,reduce传入的函数f必须经受两个参数,reduce对list的每个元素反复调用函数f,并复返最终结果值。

举例,编写一个f函数,经受x和y,复返x和y的和:

deff(x,y):returnx+y

调用reduce(f,[1,3,5,7,9])时,reduce函数将做如下计较:

先计较头两个元素:f(1,3),结果为4;再把结果和第3个元素计较:f(4,5),结果为9;再把结果和第4个元素计较:f(9,7),结果为16;再把结果和第5个元素计较:f(16,9),结果为25;由于莫得更多的元素了,计较终结,复返结果25。

上述计较实质上是对list的统统元素乞降。天然Python内置了乞降函数sum,关联词,欺诈reduce乞降也很肤浅。

reduce还不错经受第3个可选参数,当作计较的驱动值。要是把驱动值设为100,计较:

reduce(f,[1,3,5,7,9],100)

结果将变为125,因为第一轮计较是:

计较驱动值和第一个元素:f(100,1),结果为101。

示例

Python内置了乞降函数sum,但莫得求积的函数,请欺诈recude来求积:

输入:[2,4,5,7,12]

输出:245712的结果

1fromfunctoolsimportreduce2defprod(x,y):3returnx*y45print(reduce(prod,[2,4,5,7,12]))

老成:在python3.x后的版块中,reduce函数被划归到的functools库,因此使用reduce函数之前必须先引入functools库

3.filter函数

filter函数是Python内置的另一个有效的高阶函数,filter函数经受一个函数f和一个list*,这个函数f的作用是对每个元素进行判断,复返True或False,filter笔据判断结果自动过滤掉不适宜条款的元素,复返由适宜条款元素构成的新list。

举例,要从一个list[1,4,6,7,9,12,17]中删除偶数,保留奇数,最初,要编写一个判断奇数的函数:

defis_odd(x):returnx%2==1

然后,欺诈filter过滤掉偶数:

filter(is_odd,[1,4,6,7,9,12,17])

结果:[1,7,9,17]

欺诈filter,不错完成好多有效的功能,举例,删除None或者空字符串:

defis_not_empty(s):returnsandlen(s.strip)>0filter(is_not_empty,['test',None,'','str','','END'])

结果:[‘test’,‘str’,‘END’]

老成:s.strip(rm)删除s字符串中起首、扫尾处的rm序列的字符。

当rm为空时,默许删除空缺符(包括’\n’,‘\r’,‘\t’,’'),如下:

结果:‘123’

打开电商平台可以发现,如今各大品牌的手机在主宣传页面上已经公布了手机在618期间的价格,消费者们可以选择支付定金,然后在5月31号晚上以618的价格入手,还可以选择直接提前购买,之后再通过价保补回差价,所以如今618电商节已经开始了,与此同步618手机销量榜单也在更新,目前618最热销手机出炉,它就是图中的Redmi K50。

a='\t\t123\r\n'a.strip

结果:‘123’

示例

请欺诈filter过滤出1~100中平日根是整数的数,即结果应该是:

[1,4,9,16,25,36,49,64,81,100]

代码

importmathdefis_sqr(x):a=math.sqrt(x)%1ifa==0.0:returnTrueelse:returnFalsel=filter(is_sqr,range(1,101))print(list(l))

4.sort函数

Python内置的sorted函数可对list进行排序:

>>>sorted([36,5,12,9,21])[5,9,12,21,36]

但sorted亦然一个高阶函数,它不错经受一个比拟函数来完毕自界说排序,比拟函数的界说是,传入两个待比拟的元素x,y,要是x应该排在y的前边,复返-1,要是x应该排在y的背面,复返1。要是x和y止境,复返0。

因此,要是咱们要完毕倒序排序,只需要编写一个reversed_cmp函数:

defreversed_cmp(x,y):ifx>y:return-1ifx

这么,调用sorted并传入reversed_cmp就不错完毕倒序排序:

>>>sorted([36,5,12,9,21],reversed_cmp)[36,21,12,9,5]

sorted也不错对字符串进行排序,字符串默许按照ASCII大小来比拟:

>>>sorted(['bob','about','Zoo','Credit'])['Credit','Zoo','about','bob']

'Zoo’排在’about’之前是因为’Z’的ASCII码比’a’小。

示例

对字符串排序时,有期间忽略大小写排序更适宜习气。请欺诈sorted高阶函数,完毕忽略大小写排序的算法。

输入:[‘bob’,‘about’,‘Zoo’,‘Credit’]

输出:[‘about’,‘bob’,‘Credit’,‘Zoo’]

#-*-coding=utf8-*-#这段代码在Python2.7不错运行,python3.x之后sorted函数不维持自界说比拟函数,在python3.x中sorted函数的界说为#sorted(iterable,/,*,key=None,reverse=False)#不错通过将reverse参数成就为True来完毕上头的功能defcmp_ignore_case(s1,s2):ifs1.lower>s2.lower:return1elifs1.lower

5.偏函数

当一个函数有好多参数时,调用者就需要提供多个参数。要是减少参数个数,就不错简化调用者的包袱。

比如,int函数不错把字符串救援为整数,当仅传入字符串时,int函数默许按十进制救援:

>>>int('12345')12345

但int函数还提供罕见的base参数,默许值为10。要是传入base参数,就不错做N进制的救援:

假定要救援开阔的二进制字符串,每次都传入int(x,base=2)超过壅塞,于是,咱们意想,不错界说一个int2的函数,默许把base=2传进去:

defint2(x,base=2):returnint(x,base)

functools.partial等于匡助咱们创建一个偏函数的,不需要咱们我方界说int2,不错获胜使用底下的代码创建一个新的函数int2:

是以,functools.partial不错把一个参数多的函数造成一个参数少的新函数,少的参数需要在创建时指定默许值YB亚博APP首页,这么,新函数调用的难度就裁减了。

最新内容
YB亚博APP首页 国开行河南分行原党委通告、行长傅小东摄取审查访谒
据中央纪委国度监委驻国度栽种银行纪检监察组和宁夏回族自治区纪委监委音讯:国度栽种银行河南分行原党委通告、行长傅小东涉嫌严重违章犯警YB亚博APP首页,当今正在摄取中央纪委国度监
亚博yb95 国度药监局:伟康加利福尼亚公司主动调回部分呼吸机
国度药监局网站今天(6月16日)发布音讯亚博yb95,飞利浦(中国)投资有限公司解释,由于波及特定型号、特定批次家具中,V60呼吸机竖立存在影响呼吸机里面电路,在某些小概率情况下,可
YB亚博APP首页 均胜电子集成化功率电子家具再提速 缓解新动力汽车“里程着急”
YB亚博APP首页 新动力汽车下乡、减征购置税、披发购车补贴,多地汽车促升天次序近期先后落地,加上车企接连加推新车,为刻下车市注入“强心剂”。据乘联会数据泄漏,5月新动力乘用车零
服务热线
官方网站:www.365jz.com
工作时间:周一至周六(09:00-18:00)
联系我们
QQ:2852320325
邮箱:w365jzcom@qq.com
地址:武汉东湖新技术开发区光谷大道国际企业中心
关注公众号

Powered by YB亚博APP首页_亚博yb95官网 RSS地图 HTML地图

亚博yb95
YB亚博APP首页_亚博yb95官网-YB亚博APP首页 [Python](七)函数

回到顶部