目录
函数的定义与调用
在开发语言中,函数是指实现某个功能的一段代码。
定义函数 —— def
调用函数 —— 函数名( )
使用函数的好处
- 模块化程序设计
- 减少代码冗余
- 维护方便
函数的参数
参数的形式
-
形参——函数中的参数名称
-
实参——提供给函数调用的值
形参
# 必选参数(位置参数)
在调用时必须要填
# 默认参数
提供默认值,调用时可填可不填
设置默认参数时,有两点注意事项
1.必选参数在前,默认参数在后,否则python解释器会报错
2.默认参数一定要指向不变对象
# 可变长位置参数
格式:*args # 把传递进来的位置参数打包成一个元组赋给args
在参数前加*号
可变长位置参数以元组形式传递
可变长位置参数传递的是参数值
可变长位置参数和可变长关键字参数都可以接受0个或者多个参数
# 可变长关键字参数
格式:**kwargs # 把传递进来的关键字参数打包成一个字典,赋给kwargs
这是惯用写法,建议使用,容易被理解
可变长关键字参数以字典形式传递
可变长关键字参数传递的是参数名:参数值键值对
可变长位置参数和可变长关键字参数都可以接受0个或者多个参数
实参
主要是位置参数和关键字参数。
定义顺序
带等号传递的参数放后面,不带等号的参数传递放前面
-
形参:必选参数,可变长位置参数,默认参数,可变长关键字参数
-
实参:位置参数,关键字参数
return语句
退出函数,并且返回结果;函数中,代码一旦执行到return就退出,后面的语句不会执行。
如果没有return语句,默认返回None;如果return后面不接任何表达式,也返回None。
lambda 匿名函数
匿名函数格式:lambda x,y : x+y
匿名函数有个限制,就是只能有一个表达式。
匿名函数不用写return,返回值就是该表达式的结果。
什么时候使用匿名函数
当函数只是实现非常简单并且一次性使用时,可以定义为匿名函数。
当我们在传入函数时,不需要显式地定义函数,直接传入匿名函数更方便。
递归函数
指在函数的定义中使用函数自身的方法,即自己调用自己。
使用递归函数需要定义好出口,即什么时候停止递归。
递归是把一个大问题划分成规模更小的问题。每次递归都会将结果保存在内存中,非常占用内存,并且效率低,所以能不用递归尽量不要使用。
文档注释
注释分类
-
单行注释
-
多行注释
-
特殊注释
两种特殊注释:
#--coding:utf-8-- 告诉Python解释器,使用什么编码
#!/usr/bin/python3 Python告诉Linux默认情况下使用哪个解释器去运行
变量作用域
变量作用域,顾名思义,就是变量起作用的范围。
global语句
使用global语句可以清楚地表明变量是在外面的块定义的。
global语句被用来声明变量是全局的。
如果一定要在全局范围内使用函数内的变量,可在定义时,声明成global。
LEGB原则
变量名的解析需要遵循LEGB原则。
LEGB作用域查找原则,当引用一个变量时,python按照以下顺序依次进行查找:
-
从本地变量中 -> Local(function)函数内部
-
在任意上层函数的作用域 -> Enclosing function locals 嵌套函数内部
-
在全局作用域 -> Global(module)
-
最后在内置作用域中查找 -> Built-in(python)
内建函数与工厂函数
内建函数
内建函数是指在Python已经建好的函数。
内建方法
一般是针对面向对象而言,是类的方法。
内建方法就是指一个自带的对象所带的方法。
工厂函数
工厂函数就是类型转换函数。
工厂函数是内建函数的一种,工厂函数指这些内建函数都是类对象。当你调用它们时,实际上是生成了该类型的一个实例,就像工厂生产货物一样。
工厂函数主要与数据类型相关。
# 一些常用的工厂函数
int(), float(), complex(), bool()
str(), bytes() : 字符型
list(), tuple():生成列表或者元组
dict(), set():生成一个字典或集合
slice():切片