kkhome 发表于 2021-11-17 22:23

Python自学笔记day05

1.学习总括
(1)定义和调用函数
(2)函数的参数和递归函数
2.详细内容
(1)在前几个笔记中曾经提到过函数。这里再提及一下,当我们编写程序时,有时候会发现自己编写的代码有很多地方都是重复的,这样会导致我们在编写程序时写出很多重复的代码,严重影响生产效率,我们为了减少代码冗余,提高代码重用性引入了函数,使用函数来封装相应的功能,当我们需要用到相关功能的时候,我们只通过函数名来对其进行调用就能够实现这一个效果。在使用函数时,我们必须先对函数进行定义,将想要使用的功能以代码形式封装在函数中,当然我们也能够使用系统已经编写完成的功能块,例如abs()用来求绝对值,使用max()用来求参数里面的最大值。也可以使用强制类型转换函数来对数值类型进行转换,还可以使用变量名指向函数名的引用来对函数调用。要想定义函数需要使用到def关键字,依次写出函数名、括号、括号中的参数和冒号,然后,在缩进块中编写函数体,函数的返回值用return语句返回。下面提供代码示例:
代码示例:
```
def my_add(x,y):
    return x+y
```
上面的函数用来求两个数的和,然后直接返回结果。
调用函数时我们只需要将括号里面的x和y换成两个数,就可以实现将两个数进行相加,然后返回结果,python还提供了pass关键字,用来填充空白的空函数(也就是无函数体的函数),这能够让我们的程序先跑起来,后续再添加或者功能。python还能够让函数返回多个值。
(2)函数的参数有很多种,首先分析位置参数,我们知道要想计算某一个数的n次方,我们需要提供两个参数来设计运算,一个参数用来作底数,一个参数用来作幂,虽然我们设计参数都是横写在函数的参数列表,但是我们根据相关的实际算法来使用参数列表里面的参数,这样就体现出了两个参数所表现的位置不同。python还有一种默认参数,当我们的参数很多时,或者后期还需要更改参数个数,这样会导致我们在调用函数时感觉非常困难。使用默认参数我们就能够将大多数数据操作覆盖,只有少数部分的数据被更改,极大的减少了函数调用的复杂性,但是有一点是必须要记住的,默认参数的使用对象,必须是不变的值,否则会发生报错;当我们要对动态的数据进行操作时,我们再使用一般的参数类型就会显得非常的繁琐,python提供了可变参数来对动态数据进行操作,在参数前面使用‘*’号,就表示参数的数量可以任意输入。例如求2的平方的前n项和,代码如下:
代码示例:
```
def calc(*numbers):
    sum = 0
    for n in numbers:
      sum = sum + n * n
    return sum
```
函数的参数还可以是关键字类型的,它允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,代码示例如下:
代码示例:
```
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
```
这里的name,和age都是必选的参数,后面的参数表示,其他传入的参数也能够被函数接收到。
还有一种命名关键字,这种关键字参数,在定义的时候,需要用‘*’来作为分隔符,而且要写成键值对形式,调用的时候必须将命名也传入参数中.
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
下面提供综合代码:
代码示例:
```
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
```
运行示例:
```
>>> f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
>>> f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
```
函数中有一个特殊的例子,就是递归函数,说白了,递归就是函数自己调用自己,如果递归的层数很多,这样就会导致函数会另外开辟出非常多的临时空间,相对来说比较浪费空间。但是合理使用递归思想可以导致函数设计简便,解决问题迅速。有关递归的知识这里提供一个经典的斐波那契算法下面提供代码示例:
```
# 递归方式实现 生成前20项
lis =[]
for i in range(20):
    if i ==0 or i ==1:#第1,2项 都为1
      lis.append(1)
    else:
      lis.append(lis+lis)#从第3项开始每项值为前两项值之和
print(lis)
```
目标明确,动力十足!!!加油!!

xinTzc 发表于 2021-11-17 22:57

有没有推荐Python的教程

huiker231 发表于 2021-11-17 23:32

前面几个举例和最后一个,感觉不是一个量级,最后一个递归斐波那契数列不是楼主写的吧

大白潮牌 发表于 2021-11-18 00:43

加油,不要像我一样,这学点那学点

kkhome 发表于 2021-11-18 08:00

xinTzc 发表于 2021-11-17 22:57
有没有推荐Python的教程

百度搜索‘廖雪峰’

Xingyemao 发表于 2021-11-18 09:01

有咩有递归使用的一些例子呀,我的递归只会现百度

freew46 发表于 2021-11-18 09:18

跟 着 学 习 !

Jaybo 发表于 2021-11-18 09:28

谢谢大哥分享

wang2776675 发表于 2021-11-18 22:40

感谢楼主的分享

PLFJOB 发表于 2021-11-18 22:48

跟 着 学
页: [1] 2
查看完整版本: Python自学笔记day05