python生成器,闭包

2022/6/28 1:20:42

本文主要是介绍python生成器,闭包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

==========================
动态语言 python  程序执行的过程,可以添加属性和方法
静态语言  Java  只能执行已经定义好的代码,如果没用提前定义,则不能执行

class Person:
    def __init__(self,name):
        self.name = name


xiaoming = Person('小明')
print(xiaoming.name)
# 执行过程中,添加属性
xiaoming.age = 18
print(xiaoming.age)
============================
__slots__ 可以限制当前类中能够添加哪些实例属性

class Person:
    __slots__ = ('name','age','sex')

xiaoming = Person()
xiaoming.name = '小明'
xiaoming.age = 18
xiaoming.sex = '男'
print(xiaoming.name)
print(xiaoming.age)
print(xiaoming.sex)

# 无法添加没用定义的属性
# xiaoming,addr = '长沙'
# print(xiaoming.addr)
=====================
生成器:存储数据生成的方式,等需要用到的时候执行,用一次执行一次

    next 打印需要next (取值)

# list1 = [i for i in range(1,11)]
# print(list1)


# 定义生成器
list2 = (i for i in range(1,11))
# print(list2)
print(next(list2))
print(next(list2))
=====================
生成器的本质也是一个函数

yield   与return相同  返回结果  yield是生成器的返回

特点  支持显示的暂停与恢复

def fei_bo():
    # 定义第一项和第二项
    a = 1
    b = 1
    for i in range(10):  # 8项
        yield a

        a, b = b, a + b

fei = fei_bo()
# print(next(fei))
# print(next(fei))
# print(next(fei))
# print(next(fei))

for i in fei:
    print(i)
====================
可迭代对象:可以通过for循环遍历的对象

list tuple str dict

迭代器,存储数据的一个容器
list1 = [1,2,3,4,5]
print(dir(list1))
# for i in list1:
#     print(list1)
print('+++++++')
# iter(迭代对象)
list2 = iter(list1)
print(dir(list2))

# 迭代器和迭代对象
# print(list2)
# print(next(list2))
# print(next(list2))
# print(next(list2))
# print(next(list2))
# print(next(list2))
# for i in list2:
#     print(i)

# 生成器本质上也是一个迭代器

# for循环底层原理
# try:
#     with True:
#         print(next(list2))
# except StopIteration:
#     pass
======================
闭包:函数嵌套,外层函数返回内层函数的函数体

函数体: 调用函数的时候只写了函数名,没用加括号

nonlocal 修改局部变量,在函数的局部变量中使用
 def func1():
#     print('Hello world')
#
# f1 = func1()  # 函数体 f1 = func1
# print(f1)

# def outer():
#     num1 = 10
#     def inner():
#         nonlocal num1 # 修改局部变量
#         num1 += 1
#         print(num1)
#         return
#
#     inner() # 或   return
#
# outer()

# 闭包
def outer():
    def inner():
        print('hello')
    return inner


# print(outer()) # inner
# outer()()
f1 = outer() # fi = inner
f1()    # f1() = inner()
==========================
装饰器:在不改变原有函数的前提下,给函数添加功能,原理就是一个闭包函数

可以在另一个函数中,调用另一个函数
def outer(f1):
    def inner(name):
        print('添加的功能1')
        print(f1(name))

        print('添加的功能2')


    return inner
@outer
def func2(name):
    return '%s我也渴望添加功能'%name


func2('小明')


'''
自定义一个装饰器,它可以计算函数运行的时间

总结
'''
import datetime

now = datetime.datetime.now()
print('hello')
now_new = datetime.datetime.now()


这篇关于python生成器,闭包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程