(九)Python中的函数(上)

网友投稿 585 2022-05-29

1.函数概念的复习

形参、实参、return

在交互式环境中定义了函数add后,可以试试这样输入:

>>> type(add)

>>>

2.函数如何定义

3.关于函数的命名

在函数定义时,我们可以调用另一个函数:

def extend():

print('excited!')

plus_one_sec()

如果被调用的函数,之前没有被定义的话,那么执行时会报错:

>>> def extend():

... print('excited!')

... plus_one_sec()

...

(九)Python中的函数(上)

>>> extend()

excited!

Traceback (most recent call last):

File "", line 1, in

File "", line 3, in extend

NameError: name 'plus_one_sec' is not defined

>>>

C++等语言“前向引用声明”——如果我们要调用的函数存在循环引用问题,我们就必须把函数的声明写在最前面。而Python不需要这么做——只要函数定义了,无论先后,都可以使用。

这里如果我们继续在交互式环境中给出函数定义的话(哪怕实际上什么都不做),我们也可以正常运行一开始定义的函数了:

>>> def plus_one_sec():

... pass

...

>>> extend()

excited!

>>>

4.函数的返回值

return可以返回一个或多个变量或对象的值。

def multi_return():

return 1,2,3

x,y,z=multi_return()

print(x)

对于不加参数的return其作用是直接结束正在执行的函数,并离开函数体,返回到调用开始的位置。下面代码只会输出A。

def func():

print("part A")

return

print("part B")

func()

5.函数的对象性

我们需要给函数写文档(方便别人读程序)。格式如下——一般卸载函数名字的下面,主要用于说明函数的用途。

def func():

"""

func() help

"""

pass

定义好文档后,在交互式命令行中,我们可以直接使用 fun._doc_ 查看函数的文档。

函数本身也是python中的对象,而“文档”其实就是函数对象的一个属性。

任何对象都具有属性,函数自然也不例外,我们还可以对已经定义好的函数func,给它增加一个新的属性:

func.attr = 10

print(func.attr) # 输出 10

在python中内置了一个函数dir,可以用来查看一个对象是否具有哪些属性和方法,然后通过查阅Python文档来搜索这些方法的说明。而前面用过的 _doc_ 属性,跟其他的一些对象自带属性一样,使用双下划线开头——这些属性称之为 特殊属性。函数作为对象也是拥有一些自带的特殊方法的。

6.函数参数

def max_pow(a, b):

if a > b:

pow_ab = a ** b

return pow_ab

pow_ba = b ** a

return pow_ba

在函数调用过程中,当我们无法判断函数会有多少个参数时,python提供了一种非常方便的机制:*args参数。

7.函数参数收集

def app(ls,*args):

for item in args:

ls.append(item)

def swap(a,b):

temp=a

a=b

b=temp

ls = []

app(ls, 1, 2)

print(ls)

ls2 = []

app(ls2, 1, 2, 3)

print(ls2)

a=1

b=2

swap(a,b)

print(a,b)

结果如右 *args指后面的变量,这里是将后面的变量都加入到列表中。

8.Python中的引用传参

C/C++没有垃圾回收机制,由程序员自己来管理内存,这既是优点也是缺点。而后面发展的JAVA/C#都通过更高层次的抽象,屏蔽了和内存有关的底层细节,另一方面也牺牲了一些运行效率和程序员的自主权。

值传递时参数是单向传递,而要对主函数定义的实参进行修改时,要用引用传参。

python采用的是一种“传对象引用”的参数传递方式——我们不能自己决定如何传参的。即可认为这是值传递和引用传递的结合体:

(1)对于不可变类型的参数,比如数字、字符或者元组,那么函数传参时采用的就是相当于 值传参——我们不能直接修改原始对象。

(2)对于可变类型的参数,比如列表,字典等,那么传参的凡是就类似于 引用传参,我们可以直接修改原始对象。

def app(ls, *args):

for item in args:

ls.append(item)

ls作为列表,是一个可变参数。在python中交换两个变量的值,不用写一个函数,直接:

a, b = b, a

9.关于Python的参数传递机制

10.函数的递归调用

在一个函数中,我们可以调用另一个函数:

def fun2:

fun1()

def fun1:

pass

递归(直接或间接地调用自身)

调用自身:

def fun1:

fun1()

函数间接的调用自身:(两个函数互相调用,同样构成了递归)

def fun2:

fun1()

def fun1:

pass

递归过程有两个阶段:递推(递推步 和 递归基)和回归。

如求n的阶乘n!【递推步】可以根据定义得到关系式:

n! = n*(n-1)!

同时,【递归基】当n=0时我们可以直接得到已知解:

0! = 1

回归即递推的逆过程——从已知条件出发,注意求值回归,最后达到递推的开始点,结束回归阶段,完成递归调用。

11.关于递归

Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是docx,pptx等的正确MIME类型?
下一篇:如何快速了解一个新的前端项目?
相关文章