目录
函数分类
1.内置函数
2.标准库函数
3.第三方库函数
4.用户自定义函数
函数的定义和调用
形参与实参
形参在定义函数时使用,相当于局部变量
调用函数时 往函数里传的值是实参
文档字符串(函数的注释)
''' 注释 '''
help(函数名.__doc__)用于调用文档字符串
def printMAX(a,b):
'''用于打印较大的值 '''
if a>b:
print(a)
else:
print(b)
help(printMAX.__doc__)
printMAX(23,45)
函数返回值
1.return 返回值 结束函数的执行
2.不写返回值 默认返回None
def add(a,b):
'''返回和'''
return a+b
c=add(3,4)
print(c)
3.返回值可以打包成数据类型
def test(x,y,z):
return[x*10,y*10,z*10]
print(test(1,2,3))
函数也是对象
def test():
print("****")
test()
c=test
c()
print(id(c))
print(id(test))
变量的作用域(全局变量与局部变量)
全局变量:
1.作用域为模块
2.降低通用性与可读性
3.函数内改变全局变量的值 需要global声明
4.全局变量一般做常量使用
局部变量:
1.在函数体中声明的变量
2.局部变量引用比全局变量快
3.如果局部变量与全局变量同名,在函数内使用局部变量
print(locals()) 输出局部变量
print(globals()) 输出全局变量
参数的传递
传递可变对象的引用
字典 列表 集合 自定义对象等
对可变对象做的修改是在其本身修改的,操作的是原本的对象
a=[10,20]
print(id(a))
def test(m):
print(id(m))
m.append(300)
test(a)
print(a)
传递可变对象的引用
数字,字符串,元组,布尔值
操作时创建一个新的对象
a=10
print(id(a))
def test(m):
print(id(m))
m+=1
print(id(m))
print(m)
test(a)
print(a)
运行结果 操作前 地址是一样的,操作后地址改变,但是操作后a不变
浅拷贝copy()和深拷贝deepcopy()
浅拷贝 不拷贝子对象内容,只拷贝子对象引用
深拷贝 连子对象内存也全拷贝一份,对子对象修改不会影响源对象
import copy
a=[10,20,[5,6]]
b=copy.copy(a)
print("a",a)
print("b",b)
b.append(30)
b[2].append(7)
print("浅拷贝")
print("a",a)
print("b",b)
c=[10,20,[5,6]]
d=copy.deepcopy(c)
print("c",c)
print("d",d)
d.append(30)
d[2].append(7)
print("深拷贝")
print("c",c)
print("d",d)
传递不可变对象如果发生拷贝 是浅拷贝
元组是不可变对象,但是浅拷贝 其子对象可以被改变
a=([10,20,[20,30]])
print("a:",a)
print("id(a)",id(a))
def test(m):
print("m",m)
m[2][0]=888
print(m)
print("m",id(m))
test(a)
print(a)
参数的几种类型
位置参数
通过位置对应
默认值参数
默认值放后面 不传用默认值 传就覆盖默认值
命名参数
调用的时候 把形参名字写出来 根据名字匹配 此时不需要对应位置
可变参数
1.*param,将参数收集到一个元组
2.**param,将参数收集到一个字典
def test(a,b,*c,**d):
print(a,b,c,d)
test(10,20,20,30,30,hh=5,u="uu")
强制命名参数
在带星号”可变数量参数“后面增加新的参数,必须是”强制命名参数“
def f1(*a,b,c):
print(a,b,c)
f1(5,5,6,7,b=3,c=7)
lambda 表达式和匿名函数
定义简单函数 做简单事情
g = [lambda a:a*2,lambda b:b*3]
print(g[0](21),g[0](22))
eval()函数
用于执行代码,将字符串当成有效表达式求值并返回结果
a=10
b=20
c=eval("a+b")
print(c)
dict1=dict(a=100,b=200)
d=eval("a+b",dict1)
print(d)
递归函数
阶乘计算案例(分形几何)
def fac(a):
if a==1:
print("over")
return 1 # return不能少
else:
return a*fac(a-1)
re=fac(3)
print(re)