1.定义 函数:
def test01():
print('sxtsxt')
test01()
c=test01
c()
sxtsxt
sxtsxt
- 全局变量和局部变量:如果想要在函数内部修改全局变量,需要用到global
a=3#全局变量
def test01():
b=4#局部变量
print(b*10)
global a#如果要在函数内改变全局变量的值,增加global关键字声明
a=300
print(locals())#打印输出的局部变量
print(globals())#打印输出的全局变量
test01()
print(a)
#40
#300
- 测试参数的传递
传递可变对象
#测试参数的传递
#传递可变对象
a=[10,20]
print(id(a))
print(a)
print('********************')
def test01(m):
print(id(m))
m.append(300)
print(id(m))
test01(a)
传递不可变对象
- 浅拷贝和深拷贝
#测试浅拷贝和深拷贝
import copy
def testCopy():
#测试浅拷贝
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)
def testDeepCopy():
#测试深拷贝
a=[10,20,[5,6]]
b=copy.deepcopy(a)
print('a',a)
print('b',b)
b[2].append(7)
print('深拷贝......')
print('a',a)
print('b',b)
testCopy()
print('************************')
testDeepCopy()
- 参数命名的几种方式
def test01(a,b,c,d):
print('{0}-{1}-{2}-{3}'.format(a,b,c,d))
test01(10,20,30,40)# 位置参数
#test01(10,20) #参数个数不匹配,报错
test01(d=20,b=40,a=10,c=100)#命名参数,通过形参名称来匹配
def test02(a,b,c=10,d=15):#默认值参数,必须位于其他参数后面
print('{0}-{1}-{2}-{3}'.format(a,b,c,d))
test02(2,3)
test02(2,3,4)
10-20-30-40
10-40-100-20
2-3-10-15
2-3-4-15
- 可变参数
可变参数指的是“可变数量的参数”。分两种情况:
- *param(一个星号),将多个参数收集到一个“元组”对象中。
- **param(两个星号),将多个参数收集到一个“字典”对象中。
#可变参数,收入元组中
def f1(a,b,*c):
print(a,b,c)
f1(8,9,19,20)
#可变参数,收入字典中
def f2(a,b,**c):
print(a,b,c)
f2(8, 9, name='gaoqi', age=18)
多个参数,需要强制命名
def f3(a, b, *c, **d):
print(a, b, c, d)
f3(8, 9, 20, 30, name='gaoqi', age=18)
- lambda 定义表达式
#测试lambda表达式、匿名函数
f=lambda a,b,c,d:a*b*c*d
def test01(a,b,c,d):
return a*b*c*d
print(f(2,3,4,5))
120
#测试lambda表达式、匿名函数
f=lambda a,b,c,d:a*b*c*d
def test01(a,b,c,d):
print('#####')
return a*b*c*d
print(f(2,3,4,5))
g=[lambda a:a*2,lambda b:b*3]
print(g[0](6))
h=[test01,test01] #函数也是对象
print(h[0](3,4,5,6))
120
12
360
eval()函数
功能:将字符串 str 当成有效的表达式来求值并返回计算结果。
#测试 eval()函数
s = "print('abcde')"
eval(s)
a = 10
b = 20
c = eval("a+b")
print(c)
dict1 = dict(a=100,b=200)
d = eval("a+b",dict1)
print(d)
递归函数:函数内部自己调用自己的函数
def test01(n):
print('test01:',n)
if n==0:
print('over')
else:
test01(n-1)
def test02():
print('test02')
test01(4)
test01: 4
test01: 3
test01: 2
test01: 1
test01: 0
over
def test01(n):
print('test01:',n)
if n==0:
print('over')
else:
test01(n-1)
print('test01***',n)
def test02():
print('test02')
test01(4)
test01: 4
test01: 3
test01: 2
test01: 1
test01: 0
over
test01*** 0
test01*** 1
test01*** 2
test01*** 3
test01*** 4
阶乘计算案例:递归函数
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
result=factorial(5)
print(result)
120