nolocal 嵌套函数中修改变量的值
global 用于全局修改变量的值

类 :
1.现有数据
2.有处理数据的方法
3.方法必须和数据有关联
4.封装了数据和方法,方便调用

5.代码复用

有了列表才有循环(for)

数据直接计算-------函数统计-----闭包函数(函数嵌套)(装饰器也是闭包的一种)----类

闭包:内部函数调用外层函数的变量,外部函数返回内部函数的引用
函数不能加工自己内部的数据,数据有自己的生命周期,在函数执行完毕后,数据要么返回,要么销毁,所以函数得加工别的数据,因此有了闭包
    
是在程序出来的时候是没有类的

= = = = = a.py = = = = =
a = 10
name = 'zhangsan'
# 需要计算机计算的是数字
print(name + ':' + str(a)) # zhangsan:10

# 程序可以适用多种情况
b = 12
c = 13
d = 15
print(a + b + c + d)	# 50


l = [a, b, c, d]  # for循环遍历出来
一个列表数据相加:
    # 可以通过一个函数来进行数据求和
    def count(ll):
        count = 0
        for i in ll:
            count += i
        print(count) #50

    count(l)

= = = =需要两个列表相加起来= = = =
第一种方法:
    l = [a, b, c, d]  # for循环遍历出来
    l2 = [3, 4, 5, 6]

    def count(ll):
        count = 0
        for i in ll:
            count += i
        print(count)
        return count

    res1=count(l)
    res2=count(l2)
    print(res1+res2) 

第二种方法:
    l = [a, b, c, d]  # for循环遍历出来
    l2 = [3, 4, 5, 6]

    count=0
    def c(ll):
        global count
        for i in ll:
            count += i
        print(count)

    c(l)  #50
    c(l2) #68
# 更改的是局部的数据
# 闭包 接近类
# 把要操作的数据 和函数封装起来
def func():
    num = 0
    count = 0

    def c(ll):
        nonlocal count
        nonlocal num
        for i in ll:
            count += i
            num += 1

    def show():
        nonlocal count
        nonlocal num
        print(count)
        print(num)

    return c

# 类 数据+操作数据的方法
class func1():  # 主类
# 数据 方法
    num = 0
    count = 0

    def c(self,ll):
        for i in ll:
            self.count += i
            self.num += 1

    def show(self):
        print(self.count)
        print(self.num)
        
        
class func2(): #混入类 只有方法 没有数据
    def avg(self):
        print(self.count / self.num)


class func3(func2, func1):
    pass


f = func3()
f.c([1, 2, 3, 4])
f.c([2, 3, 4, 5])

f.show()
f.avg()


= = = b.py   调用

from a import func,func1

l1=[2,3,4,5]
l2=[3,4,5,6]

f=func1()
f.c(l1)
f.c(l2)
f.show()
class Person():
    name = ''
    age = 0

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

    def say(self):
        print('我是:%s,我%s岁' % (self.name, self.age))


class Dog():
    name = ''
    age = 0

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

    def jiao(self):
        print('汪汪汪,旺旺旺')


class Car():
    model = 'BMW'


p1 = Person('li')
p2 = Person('zhao')
p3 = Person('wang')
c1 = Car()

d1 = Dog('xiaohuang')
l = [p1, p2, p3, d1, c1]

for obj in l:
    # 对象 属性名/方法  返回 方法 或者 None
    if getattr(obj, 'say', None): #自省  
        obj.say()
    elif getattr(obj, 'name', None):
        print(obj.name + '不会说话')
    else:
        print('他没有名字,也不会说话')
        
getattr(obj,'say',None)	自省 确保实例对象调用的方法中有此方法,没有走另一步
用在as_view()  getattr(self,'post',错误的方法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值