函数
本节主要讲函数。函数也可以看作是一种方法,能够去实现某种想法,比如加法等操作就是一种函数,只不过在背后被封装起来了。函数是编程中一个重要的方法,
掌握函数,就可以以编程的方式实现自己脑海中的想法。
1 函数的基本使用
-
函数:把具有
独立功能的代码块
打包为一个小模块,在需要的时候调用
函数的使用包含两个步骤:-
定义
函数——封装独立的功能 -
调用
函数——享受封装的成果
-
-
作用:在开发程序时,使用函数可以提高工作效率以及代码的
重用
-
Python中提供了非常多的内置函数:
print()
、input()
、type()
等
定义函数:
定义函数:
-
def 函数名(): 函数封装的代码
-
函数代码块以
def
关键字开头,后接函数名
和圆括号()
-
关键字
def
: 是英文define的缩写,在计算机领域指预设置的命令
-
函数名
应该能够表达函数封装代码的功能
,方便后续的调用 -
函数名
的命名应该符合标识符的命名规则
标识符的命名规范复习:
- 标识符由
字符(A〜Z , a〜z )、下划线
和数字
组成 - 不能以数字开头
- 不能包含特殊字符
- 不能和Python中的关键字重名
调用函数的方法
-
调用函数的方法:
通过函数名()即可完成对函数的调用
注意:
代码中不能将函数调用
放在函数定义
的上方 , 在类中是可以的
2 函数的参数
-
函数的参数
- 将函数内需要使用到的变量,在调用函数的时候,使用参数传递到函数
内部
- 在函数
内部
,把参数当做变量
使用 - 函数
定义
时的参数称为形参
,调用
时被传入的参数称为实参
- 将函数内需要使用到的变量,在调用函数的时候,使用参数传递到函数
-
使用方式:
在函数名后面的小括号内部填写参数,多个参数之间使用,
分隔 -
必需参数:在函数调用时数量和顺序必须和声明时的一样
-
关键字参数:
- 函数调用时使用
参数名
进行对应传值,允许参数的顺序与声明时不一样
- 函数调用时使用
-
默认参数:
- 函数定义时给参数设定
默认值
,如果函数调用时没有传入,则使用默认值
- 函数定义时给参数设定
-
可变参数:
- 在定义函数不确定参数的
数量
或内容
时,使用可变参数,不会进行直接命名 *args
参数获取所有直接传参的参数元组
**kwargs
参数所有关键字
传参的参数字典
- 在定义函数不确定参数的
3 变量作用域
变量的作用域:也称变量的命名空间,由变量声明的位置
决定了该变量的作用域
- 局部变星:
- 函数内声明的变量,不做特殊声明的都是局部变量,
只能在函数内使用
- 函数内声明的变量,不做特殊声明的都是局部变量,
- 全局变量:
- 在函数外赋值的变量就是全局变量,可以在
整个程序范围内使用
- 在函数外赋值的变量就是全局变量,可以在
多层代码块中变量作用域的使用规则:
-
局部变量
不能
在外部代码中直接使用 -
全局变量
可以
在函数体内进行访问 -
函数体内对外部变量重新赋值
不会改变
函数体外的全局变量 -
global关键字:如果想对函数体外的变量进行修改,使用global关键字
获取函数体内的变量:
-
如果需要
获取函数执行的结果
或者获取函数内的局部变量
-
在函数中使用
return关键字
可以返回结果 -
也可以一次性返回多个结果,返回的多个结果时使用
,
隔开 -
当返回多个结果时,在接受的地方使用元组解包的方式获取数据
注 意 : return关键字表示返回结果,后续的代码都不会被执行
突然修改的列表
-
往主函数内传入一个
列表
,并在函数内修改
,这时函数外的列表也会同步改变
-
传入一个
字符串
,尽管同样在函数内修改
,函数外字符串不会发生改变
-
测试结果
- 函数传入
可变数据类型
时,在函数内修改,影响原数据 不可变数据
类型则不会
- 函数传入
-
拓展
可变数据类型
:List (列表)、Dictionary (字典)、Set (集合)不可变数据类型
:Number (数字)、String (字符串)、Tuple (元组)
4递归函数
-
递归函数: 指函数不断自己调用自己, 好处是可以循环访问数据以达成结果。
-
使用场景:每次进入更深一层递归时,问题规模相比上次递归都应有所减少
注意:递归是一个很容易造成死循环的函数。但是,在被正确编写后,递归可能是一种非常有效且数学上优雅的编程方法。一定要设定好递归退出的条件。