python:函数、参数传递、递归
1、测试函数也是对象
def a():
print("xyxyyx")
a()
c = a()
c
输出为
cccc
xyxyyx
xyxyyx
2.变量的作用域(全局变量和局部变量)
import math#全局变量
def te01():
for i in range(10):
y=math.sqrt(30)
print(y)
te01()
def te02():
b=math.sqrt#局部变量
for i in range(10):
n=b(30)
print(n)
te02()
输出为
5.477225575051661
5.477225575051661
3.参数的传递
#1参数传递的可变对象:列表、字典
n1=[10,20]
def f2(m):
print("m",id(m))
m.append(30)
f2(n1)
print("n1",id(n1))
print(n1)
#2.传递的不可变对象:int\float\字符串、元组、布尔值
a=100
def f3(n):
print("n",id(n))
n=n+200
print(n)
f3(a)
print("a",id(a))
#3.深拷贝deepcopy和浅拷贝copy
#浅拷贝
import copy
a1=[10,20,[5,6]]
b1=copy.copy(a1)
print("a1",a1)
print("b1",b1)
b1.append(30)
b1[2].append(8)
print("a1",a1)
print("b1",b1)
#深拷贝
def Deepcopy1():
a1 = [10, 20, [5, 6]]
b1 = copy.deepcopy(a1)
print("a1", a1)
print("b1", b1)
b1.append(30)
b1[2].append(8)
print("a1", a1)
print("b1", b1)
Deepcopy1()
#4.传递不可变对象时,如果发生拷贝,是浅拷贝
a2=(2,3,[5,7])
print("a2",id(a2))
def f5(m):
print("m",id(m))
m[2][0]=888
print("m",m)
print(id(m))
f5(a2)
print(a2)
输出为
m 2120991334984
n1 2120991334984
[10, 20, 30]
n 140705363763104
300
a 140705363763104
a1 [10, 20, [5, 6]]
b1 [10, 20, [5, 6]]
a1 [10, 20, [5, 6, 8]]
b1 [10, 20, [5, 6, 8], 30]
a1 [10, 20, [5, 6]]
b1 [10, 20, [5, 6]]
a1 [10, 20, [5, 6]]
b1 [10, 20, [5, 6, 8], 30]
a2 2121040684016
m 2121040684016
m (2, 3, [888, 7])
2121040684016
(2, 3, [888, 7])
4.参数的几种类型
#1位置参数
def f6(q,b,c):
print(a,b,c)
f6(10,20,30)
#2.默认值参数
def f7(a,b,c=10,d=20):
print(a,b,c,d)
f7(8,9)
f7(8,9,19)
#3命名参数
def f8(a,b,c):
print(a,b,c)
f8(b=10,c=12,a=34)
#可变参数
def f9(a,b,*c):#1个*放在元组里面
print(a,b,c)
f9(8,9,10,11)
def f10(a,b,**c):#两个*放在字典里面
print(a,b,c)
f10 (8,9,name='gaoqi',age=18,city='shandong')
#强制命名参数
def f11(*a,b,c):
print(a,b,c)
f11(2,b=3,c=4)
#lambda表达式和匿名函数
f =lambda a,b,c:a+b+c
print(f)
print(f(2,3,4))
g=[lambda a:a*2,lambda b:b*3,lambda c:c*4]
print(g[0](6),g[1](7),g[2](8))
#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)
输出为
100 20 30
8 9 10 20
8 9 19 20
34 10 12
8 9 (10, 11)
8 9 {‘name’: ‘gaoqi’, ‘age’: 18, ‘city’: ‘shandong’}
(2,) 3 4
<function at 0x000001EDD7E13158>
9
12 21 32
abcde
30
300
5.递归函数
#递归函数
def f13():
print("test01")
f14()
def f14():
print("f14")
f13()
#测试递归的基本原理
def f15(n):
print("f15",n)
if n==0:
print("over")
else:
f15(n-1)
print("*******",n)
f15(4)
#使用递归函数计算阶乘
def f16(n):
if n==1:
return 1
else :
return n*f16(n-1)
result=f16(5)
print(result)
f16(5)
输出为
test01
f14
f15 4
f15 3
f15 2
f15 1
f15 0
over
******* 0
******* 1
******* 2
******* 3
******* 4
120