Python篇:函数

函数

  • 概念
  • 函数创建和调用
    • 空函数
    • 函数的定义与调用
    • 查看函数文档
    • 函数返回值
    • 函数的优势
  • 变量作用域
    • 局部变量
    • 全局变量
      • global
  • 函数参数传递
    • 形参与实参
    • 参数检查
    • 默认参数
    • 可变参数
      • 拆包
    • 关键字参数
    • 参数组合
  • 匿名函数
    • 应用
  • 递归函数
    • 概念
    • 求阶乘
    • 汉诺塔

概念

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数.

函数创建和调用

空函数

定义一个什么事也不做的空函数,可以用 pass 语句;
pass 可以用来作为占位符,还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来

函数的定义与调用

Python篇:函数_第1张图片

查看函数文档

用三引号引起来的内容为函数的帮助文档
Python篇:函数_第2张图片

函数返回值

所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果.
没有返回值,默认返回None
Python篇:函数_第3张图片

函数的优势

从理论上说,不用函数,也能够编程,我们在前面已经写了程序,就没有写函数,当然,用python的内建函数姑且不算了。现在之所以使用函数,主要是:

  1. 降低编程的难度(分而治之的思想)
  2. 代码重用。避免了重复劳动,提供了工作效率。

变量作用域

局部变量

  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用

全局变量

  • 在函数外边定义的变量叫做全局变量
  • 全局变量能够在所有的函数中进行访问
  • 如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
  • 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的
  • 小技巧: 强龙不压地头蛇(就近原则)

global

global的本质是声明可以修改全局变量的指向, 即变量可以指向新的数据。
1). 不可变类型的全局变量: 指向的数据不能修改, 不使用global时无法修改全局变量。
2). 可变类型的全局变量: 指向的数据可以修改, 不使用global时可以修改全局变量。

函数参数传递

形参与实参

  • 定义时小括号中的参数,用来接收参数用的,称为 “形参”
  • 调用时小括号中的参数,用来传递给函数用的,称为 “实参”

参数检查

调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError;

  • 如果参数类型不对,Python 解释器就无法帮我们检查。
  • 数据类型检查可以用内置函数 isinstance 实现

默认参数

默认参数可以降低调用函数的难度。
默认参数注意事项:
有多个参数时,变化大放前面,变化小的放后面;
必选参数在前,默认参数在后
默认函数容易出错点:
试一试:先定义一个函数,传入一个 list,添加一个 END 再返回.
eg:
Python篇:函数_第4张图片

可变参数

可变参数就是传入的参数个数是可变的,可以是 1 个、2 个到任意个,还可以是 0 个。*args

拆包

如果已经有一个 list 或者 tuple,要调用一个可变参数怎么办?
1). Python 允许你在 list 或 tuple 前面加一个 * 号;
2). 把 list 或 tuple 的元素变成可变参数传进去;
eg:

largs = [1,2,3]
func(largs[0],largs[1],largs[2])
func(*largs)

关键字参数

  • 关键字参数允许传入 0 个或任意个含参数名的参数;
  • 这些关键字参数在函数内部自动组装为一个 dict;
  • 关键字参数用**kwargs;

参数组合

  • 参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。
  • 参数定义的顺序必须是:必选参数、 默认参数、可变参数和关键字参数。

匿名函数

匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。(省略了用def声明函数的标准步骤)
在这里插入图片描述
lambda函数的语法只包含一个语句,如下:

lambda arg1[, arg2,...argn]: expression

lambda函数能接收任何数量的参数但只能返回一个表达式的值

应用

函数作为参数传递:
Python篇:函数_第5张图片
作为内置函数的参数:
Python篇:函数_第6张图片
Python篇:函数_第7张图片

递归函数

概念

一个函数在内部调用自己本身,这个函数就是递归函数。

求阶乘

Python篇:函数_第8张图片

汉诺塔

def test(n, a, b, c):
    if n == 1:
        print(a, '--->', c)
        return
    else:
        test(n - 1, a, c, b)  # 先将n-1个从a移到b
        test(1, a, b, c)  # 再将最后一个从a移到c
        test(n - 1, b, a, c)  # 再将n-1个从b移到c


test(3, 'A', 'B', 'C')

Python篇:函数_第9张图片

你可能感兴趣的:(Python笔记)