欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

总结day11 ----函数的学习(2)

发布时间:2025/7/25 编程问答 67 豆豆
生活随笔 收集整理的这篇文章主要介绍了 总结day11 ----函数的学习(2) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

内容大纲

  一:  函数的运行

  二:  闭包

  三:  迭代器

  四:  生成器

  五:  列表生成器

  六:  列表推导式

  七:  生成器表达式 

  八:  匿名函数

一:  函数的运行

  1:函数名是一个特殊变量

  

def func(): # print(666) # print(func)

 

 

 

  2:函数名可以当做变量进行赋值

 

# f1 = 2 # f2 = f1 # f3 = f2 # print(f3)# def func(): # print(666) # func1 = func # f2 = func1 # f3 = f2 # # print(f3) # f3()

 

 

 

  3:函数名可以当做容器类的元素

 

# def func1(): # print('in func1') # # # def func2(): # print('in func2') # # # def func3(): # print('in func3') # # l1 = [func1, func2, func3] # for i in l1: # i()

 

 

 

  4:函数名可以当做函数的参数

 

# def func(x): # # print(x) # x() # print('in func') # # def func1(): # print('in func1') # # func(func1)

 

 

 

  5:函数名可以当做返回值

 

def func(x): # x ---> func1return x # func1def func1():print('in func1')# ret = func(func1) # func1 # ret() func(func1)()

 

二:闭包

  >1    

    1:内层函数对外层函数(非全局)变量的引用

    2:闭包只存在内部函数中

    3:函数都要逐层返回,最终返回给最外层

  >2

 

# def func(n): # n = name # def inner(): # print(n) # return inner # name = '太白' # f = func(name) # print(f.__closure__[0].cell_contents)

 

 

 

  >3

 

# def func(step): # num = 1 # num += step # print(num) # j = 0 # while j < 5: # func(3) # j += 1# 闭包:解释器执行程序时,如果遇到函数,随着函数的结束而关闭临时名称空间,但是!!! # 如果遇到闭包,有一个机制:那么闭包的空间不会随着函数的结束而关闭。

 

 

三:迭代器

  >1 可迭代带对象

    # 内部含有__iter__方法的就是可迭代对象,遵循可迭代协议。   

  >2 迭代器

    # 迭代器:内部含有'__iter__'并且含有'__next__'方法的就是迭代器,遵循迭代器协议。

  >迭代器的作用

    # 1,节省内存.
    # 2,惰性机制.
    # 3, 一条路走到黑,不走回头路.

 

 

四:生成器

  >1

    # 生成器本质就是迭代器,生成器是自己用python代码写的迭代器。

  

# 生产衣服# def cloth(): # for i in range(5001): # print('我写的代码没有bug 衣服%s号' % i) # cloth() # # def cloth2(): # for i in range(5001): # yield '有志青年 衣服%s号' % i #用的时候才调用 # # genor = cloth2() # for i in range(100): # print(next(genor)) # # for i in range(50): # print(next(genor))

 

 

 

 

  > send    next

   1: send   ,  有返回值,返回给上一个迭代器. 如果为开头则报错

 

# # def func(): # count = yield 666 # print(count) # num = yield '三包春药' # print(num) # yield '太白金星' # n1 = yield '小虎' # print(n1) # genor = func() # print(next(genor)) # print(next(genor)) # send不仅能对应yield取值,而且可以给上一个yield发送一个值 # print(genor.send(None)) # print(genor.send('alex')) # print(genor.send('111')) # print(genor.send('111')) # print(genor.send('111')) # 第一次取值能否用send传参? 不能 # 最后一个yield 永远也得不到send的传的值

 

   2:yeild from    把列表变成迭代器

# def func(): # lst = ['明亮', '容先', '王子', '万赵'] # yield from lst # genor = func()
print(genor.__next__())  

 五:列表推导式

# 列表推导式:用一行代码构建简单,较复杂的列表。 # 减少代码量,装逼。 #三种: # 1,循环模式。 [变量(加工后的变量) for 变量 in iterable ] # print([i for i in range(1,101)]) # 构建一个列表:['python1期', 'python2期',....'python25期'] # l1 = ['python%s期' %i for i in range(1,26)] # print(l1)# 2 ,三元模式(循环模式) # 构建一个列表:列表里面的元素是1~20,但是能被3整除元素替换成*。 # ret = '*' if 3>2 else 1 # print(ret) # print(['*' if i % 3 == 0 else i for i in range(1,21)])# 3,筛选模式 [变量(加工后的变量) for 变量 in iterable if 条件] # 三十以内所有的偶数留到列表中 # print([i for i in range(1,31) if i % 2 == 0])

六: 匿名函数

func2 = lambda x,y: x + y print(func2(3,4))# 写一个匿名函数:需要三个数字参数,返回值为三个数相乘

 

  

 

转载于:https://www.cnblogs.com/baili-luoyun/p/10217122.html

总结

以上是生活随笔为你收集整理的总结day11 ----函数的学习(2)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。