回顾

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
posted @ 2024-09-26 22:32  jhchena  阅读(4)  评论(0编辑  收藏  举报