目录
函数分类
函数的定义和调用
形参与实参
文档字符串(函数的注释)
函数返回值
函数也是对象
变量的作用域(全局变量与局部变量)
全局变量:
局部变量:
print(locals()) 输出局部变量
print(globals()) 输出全局变量
参数的传递
传递可变对象的引用
传递可变对象的引用
浅拷贝copy()和深拷贝deepcopy()
传递不可变对象如果发生拷贝 是浅拷贝
参数的几种类型
位置参数
默认值参数
命名参数
可变参数
强制命名参数
lambda 表达式和匿名函数
eval()函数
递归函数
阶乘计算案例(分形几何)
函数分类
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)
def fac(a):
if a==1:
print("over")
return 1 # return不能少
else:
return a*fac(a-1)
re=fac(3)
print(re)



