回顾
33333day13内容回顾
函数
写代码的方式:面向过程 --> 函数式编程(多) --> 面向对象编程。
1.1 函数基础
def func(a1,a2):
pass
result = func(1,2)
1.2 参数
补充:对于函数的默认值慎用可变类型。
# 如果要想给value设置默认是空列表
# 不推荐(坑)
def func(data,value=[]):
pass
# 推荐
def func(data,value=None):
if not value: #表示里面没有值
value = []
def func(data,value=[]):
value.append(data)
return value
v1 = func(1) # [1,]
v2 = func(1,[11,22,33]) # [11,22,33,1]
33333333面试题:
-
def func(a,b=[]) 有什么陷阱?
因为b是可变类型,如果不传递参数时,默认使用的同一个内存地址
-
看代码写结果
def func(a,b=[]): b.append(a) return b l1 = func(1) l2 = func(2,[11,22]) #先打印:[11,22] ,在打印2 l3 = func(3) # [1,3] [11,22,2] [1,3] print(l1,l2,l3)
-
看代码写结果
def func(a,b=[]): b.append(a) print(b) func(1) func(2,[11,22,33]) func(3) # [1] [11,22,33,2] [1,3]
1.3 返回值
分析函数执行的内存
def func(name):
def inner():
print(name)
return 123
return inner
v1 = func('alex')
v2 = func('eric')
v1()
v2()
闭包
# 不是闭包
def func1(name):
def inner():
return 123
return inner
# 是闭包:封装值 + 内层函数需要使用。 name 传递的参数需在内层函数使用为闭包,没有使用不是闭包
def func2(name):
def inner():
print(name)
return 123
return inner
1.4 作用域
1.5 递归
函数自己调用自己。(效率低)
def func():
print(1)
func()
func()
def func(i):
print(i)
func(i+1)
func(1)
def func(a,b):
# 1
# 1
# 2
# 3
# 5
print(b)
func(b,a+b)
func(0,1)
def func(a):
if a == 5:
return 100000
result = func(a+1) + 10
return result
v = func(1)
# 递归的返回值
def func(a):
if a == 5:
return 100000
result = func(a+1) + 10
v = func(1)
name = 'alex'
def func():
def inner():
print(name)
return inner
v =func()
2. 模块
- hashlib
- random
- getpass
- time