python基础教程:函数,函数,函数,重要的事说三遍

栏目: Python · 发布时间: 6年前

内容简介:函数,是编程中很重要的一个概念。简单来说,函数是一段可重复使用的代码段,给这段代码起个名字就是“函数名”。在程序的任何地方都可以通过函数名来使用这段代码,这就是“函数调用”。函数的概念,其实我们在初中数学中就接触过了。比如,这个表达式

函数,是编程中很重要的一个概念。简单来说,函数是一段可重复使用的代码段,给这段代码起个名字就是“函数名”。在程序的任何地方都可以通过函数名来使用这段代码,这就是“函数调用”。

python基础教程:函数,函数,函数,重要的事说三遍

函数的定义

函数的概念,其实我们在初中数学中就接触过了。比如,这个表达式 y = 2x + 3 ,我们就称y是x的一次函数。写成 Python 函数就是这样的:

def y(x):
    return 2 * x + 3

如上例所示,Python中定义一个函数的规则是这样的:

首先是通过关键字 def 来确定它是一个函数,后面跟着 函数名 (比如上面的 y ),函数名后面是小括号括起来的参数,括号外面以冒号 : 结尾这一行。这一行就是函数的声明。

接下来是 函数体 的代码片段,可以是一行也可以是多行,但它们比 def 多了一个缩进。函数体最后一行可以通过关键字 return 返回一个或多个值。如果没有写 return ,Python默认为返回 None

有一种特殊的函数定义:空函数,就是什么都不做的函数,它通过一个 pass 语句来定义函数体:

def do_nothing():
    pass

空函数主要是在我们写程序最开始,想好都有哪些函数要写,先定义成空函数再慢慢实现它们具体的功能。

同样的,后面我们学习Python面向对象编程时 类(class) 的定义也可以用 pass 来实现一个最小类:

class TheEmptyClass:
    pass

函数的调用

定义好一个函数后,我们就可以调用(运行)该函数了。调用函数就是通过函数名再传入它需要的参数即可。

a = y(2)
print('a is ', a)

b = y(6)
print('b is ', b)

结合函数 y 的定义,猜猜看a和b的值分别为多少吧。

函数y是一个数学运算的函数,它的参数应该是整数或浮点数。如果我们给它传一个字符串进去,看看会有什么结果呢?

In [153]: y('a')
-----------------
TypeError        Traceback (most recent call last)
<ipython-input-153-1e7b94eb7c3d> in <module>
----> 1 y('a')

<ipython-input-150-d8eda758862f> in y(x)
      1 def y(x):
----> 2     return 2 * x + 3
      3 

TypeError: must be str, not int

根据函数体的语句,我们先把字符串 'a' 乘以2得到 'aa' ,再计算 'aa' 字符串和整数 3 的加法就会报错,因为字符串和整数是不能做加法运算的。

我们定义的函数y只有一个参数,如果我们给它传入两个或更多参数,同样也会报错。小猿们可以自己试试看参数个数不对时是什么样的错误。

因此,函数的调用,需要满足函数名、参数类型、参数个数都要符合函数的定义才能运行成功。

函数的返回值

在Python中函数都是有返回值的。如果我们没有通过 return 显示的返回,则Python默认返回 None 。通过 return 我们就可以规定函数返回我们想要的值。我们想要的值可能是一个,也可能是两个或多个, return 都能满足我们的要求。

def my_division(a, b):
    quotient = a // b
    remainder = a % b
    return quotient, remainder

这个函数计算a除以b,返回它们的商和余数两个值。 return 返回多个值时,用逗号 , 隔开它们即可。

我们看看调用该函数运行的结果:

In [158]: my_division(5, 2)
Out[158]: (2, 1)

In [159]: my_division(20, 7)
Out[159]: (2, 6)

In [160]: my_division(20, 5)
Out[160]: (4, 0)

可以看到,函数返回多个值时,这多个值组成了一个tuple(元组)。

递归函数

递归函数就是函数自己调用自己。我们以计算一个整数的阶乘来看看递归函数是什么样子的。阶乘的公式如下:

n! = n (n-1) (n-2) 2 * 1

它的递归函数的定义如下:

def factorial(n):
    if n == 1:
        print(n)
        return 1
    print(n, '*', end=' ')
    return n * factorial(n-1)

递归函数都有一个跳出递归的条件,在本函数中就是 n == 1 。当 n != 1 时就递归调用求比当前n小1的数的阶乘,每次n减1,知道 n == 1 结束递归。这个递归过程其实就是生成了连乘(可以看函数的打印信息):

n (n-1) (n-2) 2 * 1

In [169]: f = factorial(5)
5 * 4 * 3 * 2 * 1

In [170]: f = factorial(10)
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1

总结

定义函数的要素:函数名、参数、函数体

调用函数的注意事项:参数类型、参数个数

函数体最后没有使用 return 语句则默认返回 None

函数通过 return 返回一个或多个值,多个值以tuple的形式返回


以上所述就是小编给大家介绍的《python基础教程:函数,函数,函数,重要的事说三遍》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

High Performance Python

High Performance Python

Micha Gorelick、Ian Ozsvald / O'Reilly Media / 2014-9-10 / USD 39.99

If you're an experienced Python programmer, High Performance Python will guide you through the various routes of code optimization. You'll learn how to use smarter algorithms and leverage peripheral t......一起来看看 《High Performance Python》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器