本次学习目录
一、函数的文档注释
格式:
def 函数名(参数):
"""
函数的文档注释
"""
封装的代码
......
- 在开发中,如果希望给函数添加注释,应该在定义函数的下方,使用连续的三对引号
- 在 连续的三对引号 之间编写对函数的说明文字
- 在 函数调用位置,使用快捷键 CTRL + Q 可以查看函数的说明信息
注意:因为函数体比较独立,函数定义上方,应该和其他代码(包括注释)保留两个空行
二、形参和实参
- 形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
- 实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的
三、引用
1、变量和数据是分开存储的
2、数据保存在内存中的一个位置
3、变量中保存着数据在内存中的地址
4、变量中记录数据的地址,就叫做引用
5、使用 id() 函数可以查看变量中保存数据所在的内存地址
四、可变和不可变数据类型
1、不可变数据类型,内存中的数据不允许被修改:
- 数字类型 int、bool、float、complex、long(2.x)
- 字符串 str
- 元组 tuple
2、可变数据类型,内存中的数据可以被修改:
- 列表 list
- 字典 dict
3、注意:
(1)字典的 key 只能使用不可变类型的数据
(2)可变类型的数据变化,是通过方法来实现的
(3)如果一个可变数据类型的变量,赋值了一个新的数据,引用会修改
- 变量不再对之前的数据引用
- 变量改为对新赋值的数据引用
五、局部变量和全局变量
1、局部变量是在函数内部定义的变量,只能在函数内部使用
2、全局变量是在函数外部定义的变量(没有定义在某一函数内),所有函数内部都可以使用这个变量
注意:
- 不推荐使用全局变量,可变范围太大,容易导致程序不好维护
- 函数不能直接修改全局变量的引用,要修改需要使用 global 进行声明
六、range()语法
作用:产生序列数的对象,可以使用for循环遍历
语法:range(起始位置,结束位置,步长)
说明:起始位置默认为0可以省略,结束位置不能省略,步长默认值为正1可以省略
注意:range生成的范围是[起始位置,结束位置)(左闭右开),指定步长时起始位置不可省略
七、eval()函数
作用:将字符串当成有效的表达式来求值并返回计算结果(去掉引号)
注意:eval函数不能转换空字符串,会报错
八、缺省函数
- 定义函数时,可以给 某个参数 指定一个默认值,具有默认值的参数就叫做 缺省参数
- 调用函数时,如果没有传入 缺省参数 的值,则在函数内部使用定义函数时指定的 参数默认值
- 函数的缺省参数,将常见的值设置为参数的缺省值,从而 简化函数的调用
- 例子:
def func(name,age="20",postion="学生"):
pass
func(张三,30,老师)
func(李四)
注意:
必须保证 带有默认值的缺省参数 在参数列表末尾
在调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才知道参数的对应关系
九、多值函数
- 有时可能需要一个函数能够处理的参数个数是不确定的,这个时候就可以使用多值函数
- python中有两种多值参数:
- 参数名前增加一个 * 可以接收元组,将多余的值接收为元组
- 参数名前增加一个 ** 可以接收字典,将键值对接收为字典
- 元组和字典的拆包:
- 元组变量前,增加一个 *
- 字典变量前,增加一个 **
- 例子:
def func(num,*arg,**kwargs):
print(num) # 输出10
print(arg) # 输出(20,30,40)
print(kwargs) # 输出{name="张三",gender="男"}
# 拆包效果
print(*arg) # 输出20 30 40
print(**kwargs) # 输出name gender,默认输出字典key
func(10,20,30,40,name="张三",gender="男")
十、匿名函数
1、函数的引用:函数名是一个变量名,保存当前函数体的引用地址
def func():
print("测试")
func() # 输出测试
ret=func
ret() # 与func()一样,输出测试
2、定义:用lambda关键词能创建小型匿名函数,这种函数将表达式作为整个返回值进行返回
3、格式:
lambda [arg1 [,arg2,.....argn]]:expression
# 定义没有参数的匿名函数
lambda : 100
print((lambda : 100)()) # 输出100
# 定义一个参数的匿名函数
ret = lambda x : x + 100
print(ret(50)) # 输出150
# 定义两个参数的匿名函数
ret = lambda x, y : x + y
print(ret(50,100)) # 输出150
# 匿名函数作为函数的参数
def sum(a,b,opt):
print("%d + %d = %d" % (a,b,opt(a,b)))
sum(10,20,lambda x,y:x+y) # 输出10+20=30