首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python-函数

python中的函数是根据实际需要创建的一类用来实现相关功能的代码段,大致可分为内置函数(如print())和自定义函数。其作用主要是为了提高应用的模块性和代码重复利用率。

定义

def函数名(参数名1[=默认值1],参数名2[=默认值2]…)

return表达式

定义一个加减乘除函数

from__future__importdivision

defarithmetic(x,y,operator):

result={

'+': x + y,

'-': x - y,

'*': x * y,

'/': x / y

}

returnresult.get(operator)

print(arithmetic(2,2,"+"))

out:

4

参数

在c、c++中,参数的传递有值和引用传递两种方式,而在python中的任何变量都是对象,所以参数只支持引用传递的方式。Python通过名字绑定的机制,把实际参数的值和形式参数的名称绑定在一起,即把形式参数传递到函数所在的局部命名空间中,形式参数和实际参数指向内存中的同一个储存空间。

函数的参数支持默认值。当某个参数没有传递实际的值时,函数使用默认参数计算

from__future__importdivision

defarithmetic(x=1,y=1,operator='+'):

result={

'+': x + y,

'-': x - y,

'*': x * y,

'/': x / y

}

returnresult.get(operator)

print(arithmetic(2,2))

print(arithmetic(x=2,operator="+"))

print(arithmetic(y=2,operator="*"))

print(arithmetic(x=2,y=2,operator="*"))

out:

4

3

2

4

Python还提供了另一标识符“**”。在形式参数前面添加“**”,可以引用一个字典。根据实际参数的赋值表达式生成字典。

语法规定,“*”必须写在“**”的前面。

defsearch(*t,**d):

keys = d.keys()

values = d.values()

print(keys)

print(values)

forargint:

forkeyinkeys:

ifarg ==key:

print('find:',d[key])

search('one','two','three',one='1',

two='2',three='3')

out:

dict_keys(['one','two','three'])

dict_values(['1','2','3'])

find:1

find:2

find:3

返回值

形式:return+变量或表达式

return+变量

defsum(*args):

sum=

foriinargs:

sum = sum +i

returnsum

print(sum(1,2,3,4,5,6,7,8,9,10))

out:

55

return+表达式

defsum(*args):

sum=

foriinargs:

sum = sum +i

returnsum/len(args)

print(sum(1,2,3,4,5,6,7,8,9,10))

out:

5.5

嵌套

函数的嵌套是指在函数的内部调用其他函数。c、c++只允许在函数体内部嵌套,python不仅支持函数体内的嵌套,还支持函数定义的嵌套。

计算表达式(x+y)*(m-n),可先定义求和函数、求差函数,最后定义求乘积函数

# coding:utf-8

#计算表达式(x+y)*(m-n)

#第1步,求和值:

defsum(x,y):

sum = x+y

returnsum

#第2步,求差值:

defsub(m,n):

sub= m-n

returnsub

#第3步,求乘积:

defpl(x,y,m,n):

pl=sum(x,y)*sub(m,n)

returnpl

print(pl(1,2,3,4))

out:

-3

递归函数

递归函数可以在函数主体内直接或间接调用自己,即函数嵌套是函数本身。递归是一种程序设计方法,使用递归函数可以减少重复的代码,使程序变得简洁。

递归过程:递推和回归

原理:

第一阶段:

递归函数在内部调用自己:每一次函数调用又重新开始执行此函数的代码,直到某一级程序结束

第二阶段:

递归函数从后往前返回:从最后一级开始返回,直到返回到第一次调用的函数体内。即递归逐级调用完毕后,再按照相反的顺序逐级返回。

经典递归阶乘的实现

# coding:utf-8

#普通方式

defn_1(x):

ifx==1:

returnx

else:

rum =1

foriinrange(1,x+1):

rum = rum*i

returnrum

#递归方式

defn_2(x):

ifx ==1:

return1

else:

returnx*(n_2(x-1))

print(n_1(5))

print(n_2(5))

out:

120

120

注:递归函数相对一般函数简洁,但因每次调用递归函数都会复制函数中所有的变量,再执行递归函数,导致程序需要较多的内容空间,对程序的性能有一定的影响。因此,对于没有必要进行递归的程序,最好采用其他方法进行改进。

lambda函数(匿名函数)

lambda函数用于创建一个匿名函数,函数名未和标识符进行绑定,可以通过lambda函数返回一些简单的运算结果。

用法:lambda 变量1,变量2...:表达式

上述表达式(x+y)*(m-n)的计算,也可采用匿名函数

# coding:utf-8

#计算表达式(x+y)*(m-n)

defpl(x,y,m,n):

sum =lambdax,y:x+y

sub=lambdam,n:m-n

pl=sum(x,y) * sub(m,n)

returnpl

print(pl(1,2,3,4))

out:

-3

Generator函数(生成器函数)

生成器(Grator)的作用是一次产生一个数据项,并把数据项输出。因其每次返回一个数据项,使得迭代器性能更加。

用法:

def函数名(参数:

...

yield表达式

deffunc(n):

foriinrange(n):

yieldi

r=func(3)

#python2.x要写成r.next(),python3要写成next(r)

print(next(r))#i=0,暂时中断在yield关键字处,并返回0

print(next(r)) #从上次中断的yield处接着接着执行,中断在下一个yield处,并返回1,依次类推

print(next(r))

out:

1

2

·每次执行,会暂时中断在yield关键字处,而且通过yield返回一个参数;

·下次再接着执行,会从上次中断的yield处接着执行,并通过send()传递参数,继续中断在下一个yield处;

·若通过send()或next()执行generator,而未找到下一个yield,此时会报错。

未找到下一个yield,报错

deffunc(n):

foriinrange(n):

yieldi

r=func(3)

#python2.x要写成r.next(),python3要写成next(r)

print(next(r))

print(next(r))

print(next(r))

print(next(r))

out:

1

2

Traceback (most recent call last):

StopIteration

注:yield保留字与return语句的返回值和执行原理均不同。yield生成值不会中止程序的执行(无下一个yield时报错),返回值后继续执行。return返回值后,程序中止执行。

python3内置函数

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180405G0P96100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券