资讯专栏INFORMATION COLUMN

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

dreamtecher / 684人阅读

摘要:调用函数就是通过函数名再传入它需要的参数即可。递归函数递归函数就是函数自己调用自己。我们以计算一个整数的阶乘来看看递归函数是什么样子的。阶乘的公式如下它的递归函数的定义如下递归函数都有一个跳出递归的条件,在本函数中就是。

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

函数的定义

函数的概念,其实我们在初中数学中就接触过了。比如,这个表达式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)
 in 
----> 1 y("a")

 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的形式返回

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43768.html

相关文章

  • Python每日小知识(3):list和tuple的使用

    摘要:同样的用上节讲的函数获取元素的个数记住这是获取的是列表个数个数个数重要的事说三遍。用索引访问每个元素的位置,索引是从开始的开始的开始的索引也是有容忍限度的超过了就会原地爆炸报错如果列表中元素个数贼多,想获取后面的元素就要实行曲线救国了。 list和tuple是Python内置的有序集合,一个是可变的,一个是不可变滴;这都不是事,主要是理解一下指向不变。 看图说话: showImg(ht...

    SoapEye 评论0 收藏0
  • this全面解析(一)

    摘要:调用栈就是为了到达当前执行位置所调用的所有函数。由于无法控制回调函数的执行方式,因此就没有办法控制调用位置得到期望的绑定,下一节我们会介绍如何通过固定来修复这个问题。 在《你不知道的this》中我们排除了对于this的错误理解,并且明白了每个函数的this是在调用时绑定的,完全取决于函数的调用位置。在本节中我们主要介绍一下几个主要内容: 什么是调用位置 绑定规则 this词法 调用...

    darry 评论0 收藏0
  • 正在暑假中的《课多周刊》(第1期)

    摘要:正在暑假中的课多周刊第期我们的微信公众号,更多精彩内容皆在微信公众号,欢迎关注。若有帮助,请把课多周刊推荐给你的朋友,你的支持是我们最大的动力。原理微信热更新方案涨知识了,热更新是以后的标配。 正在暑假中的《课多周刊》(第1期) 我们的微信公众号:fed-talk,更多精彩内容皆在微信公众号,欢迎关注。 若有帮助,请把 课多周刊 推荐给你的朋友,你的支持是我们最大的动力。 远上寒山石径...

    liukai90 评论0 收藏0
  • 正在暑假中的《课多周刊》(第1期)

    摘要:正在暑假中的课多周刊第期我们的微信公众号,更多精彩内容皆在微信公众号,欢迎关注。若有帮助,请把课多周刊推荐给你的朋友,你的支持是我们最大的动力。原理微信热更新方案涨知识了,热更新是以后的标配。 正在暑假中的《课多周刊》(第1期) 我们的微信公众号:fed-talk,更多精彩内容皆在微信公众号,欢迎关注。 若有帮助,请把 课多周刊 推荐给你的朋友,你的支持是我们最大的动力。 远上寒山石径...

    yintaolaowanzi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<