当前位置: 首页 > news >正文

做企业网站要哪些人员佛山市建设网站

做企业网站要哪些人员,佛山市建设网站,重庆知名设计公司有哪些,网络推广方案范文函数闭包 定义 延伸了作用域的函数(能访问定义体之外定义的非全局变量 作用 共享变量的时候避免使用了不安全的全局变量允许将函数与某些数据关联起来,类似于简化版面向对象编程相同代码每次生成的闭包,其延伸的作用域都彼此独立(计数器,注册表)函数的一部分行为在编写时无法预… 函数闭包 定义 延伸了作用域的函数(能访问定义体之外定义的非全局变量 作用 共享变量的时候避免使用了不安全的全局变量允许将函数与某些数据关联起来,类似于简化版面向对象编程相同代码每次生成的闭包,其延伸的作用域都彼此独立(计数器,注册表)函数的一部分行为在编写时无法预知,需要动态实现,同时又想保持接口一致性较低的内存开销:类的生命周期远大于闭包实现装饰器代码 print(Class方式) class Averager:def __init__(self):self.series []def __call__(self,new_val):self.series.append(new_val)return sum(self.series)/len(self.series) avg1 Averager() print(avg1(3)) print(avg1(2))print(闭包方式) def Avg_1():count 0total 0def Avg_2(val):nonlocal total,counttotalvalcount1return total/countreturn Avg_2 avg Avg_1() print(avg(9)) print(avg(10))输出 Class方式 3.0 2.5 闭包方式 9.0 9.5理解 功能说明 这段代码需要解决的是定义一个average函数我们每次传进去一个值都可以得到这个值和之前传入值的平均值。比如第一次传入1均值就是1第二次传入2均值就是1.5以此类推。 类方式 第一种方式是通过构建一个类这也是我们通常容易想到的方式利用在类里面创建一个list每次调用都将新值append进去这是一种解决方法。 函数闭包方式 这里跟前面提到的作用域是有关的函数闭包延伸了作用域我们可以看到我们的外层函数只是为了存储两个变量而已没有其他作用了。其实这时候应该有个疑惑在调用Avg_1之后由于count和total是在Loval层函数调用结束了应该销毁了才是但实际上并没有我们在Avg_2中通过nolocal关键字延长了两个变量的生命周期使得我们在每次调用的时候都能访问都两个变量达到效果。 装饰器 为什么会出现装饰器这个东西 名称管理显示调用就近原则充分复用语法糖 用做函数的修饰符可以在模块或者类的定义层内对函数进行修饰出现在函数定义的前一行不允许和函数定义在同一行。 什么是装饰器 装饰器是一个可调用的对象以某种方式增强函数的功能装饰器是一个语法糖在源码中标记函数此源码指编译后的源码解释器解析源码的时候将被装饰的函数作为第一个位置参数传给装饰器装饰器可能会直接处理被装饰函数然后返回它一般仅修改属性不修改代码装饰器也可能用一个新的函数或可调用对象替换被装饰函数但核心功能一般不变装饰器仅仅看着像闭包其实功能的定位与闭包有重合也有很大区别装饰器模式的本质是元编程在运行时改变程序行为装饰器的一个不可忽视的特性在模块加载时立即执行装饰器是可以堆叠的自底向上逐个装饰装饰器是可以带参数的但此时至少要写两个装饰器装饰器的更加Pythonic的实现方式其实是在类中实现 call() 方法代码 def check_param(**kw):flag kw.get(flag)def check_p(func):def decorate(*args):if flag:if not all([isinstance(arg,int) for arg in args]):raise TypeError({} only accepts integers as argument.format(func.__name__))return func(*args)return decoratereturn check_pcheck_param(flagTrue) def my_sum(a,b):return abif __name____main__:print(my_sum(1,2))print(my_sum(1,2.0)) 输出 3 Traceback (most recent call last):File /home/xueaoru/文档/pydemo/blog.py, line 18, in moduleprint(my_sum(1,2.0))File /home/xueaoru/文档/pydemo/blog.py, line 7, in decorateraise TypeError({} only accepts integers as argument.format(func.__name__)) TypeError: my_sum only accepts integers as argument解释 上面的代码是为了完成一个检查my_sum函数的参数是否是整数的功能的装饰器同时增加了开关功能我们将flag设置为true就是开启检查功能如果不是整数则直接报错。 理解 装饰器是对函数在不改变原有函数内部实现的情况下对原有函数进行功能增强。而语法糖是对原函数进行修饰的修饰符当调用语法糖进行修饰的时候即使该函数并不调用也会执行修饰语句因为触发了运行装饰器。这时候该函数作为参数传给修饰函数的外部函数然后该函数作为引用赋值给内部函数的函数名也就是说我们真正的操作是在内部函数中进行的因此可以在内部函数中对原函数进行功能增强。其中有参数的时候呢内部函数也需要通过*和**拆包得到参数原函数有返回值的时候呢我们在调用完原函数的时候也应该给出返回值。而装饰器本身带参数的时候呢可以在装饰函数外再加一层接收参数的包装得到参数。 OOP In Python 概念 一切都是对象 从语言设计层面理解Python中的数据类型一切都是对象都是从Object继承过来的。Object由三部分组成identity、type、value。 identity 理解 当Objects创建之后呢identity也不会改变直到被销毁。我觉得跟c里的地址差不多吧当然也不能完全这么理解也有不同的方。 要点 变量存储的是创建的Object的identity创建出来的不同Object有不同的identity变量的id变了不是因为Object的identity变了而是对应的Object变了对于不可变对象而言计算结果如果已经存在可以直接返回相同的identitytype 要点 当Object创建后其type不会改变type决定了一个Object可以支持那些运算可能的值在哪些范围value 要点 有些Object的value可以改变可变对象有些Object的value不可以改变不可变对象每一个class在定义的时候如果没有继承的话那么他继承的就是Object这个超级class而每一个自定义的class在python中都是一个type object。 classmethod 理解 可以把类中的某个方法变成这个类的方法而不依赖于对象也就是说在对象没有创建的时候我们也可以调用这个类的方法执行一定的操作。这就有点像C中的静态成员函数。 代码 class Student:teacher_name Omgdef __init__(self,name):self._name nameclassmethoddef Teacher(cls):print(cls.teacher_name)def Me(self):print(self._name) if __name__ __main__:aa Student(xue)aa.Teacher()aa.Me()Student.Teacher()Omg xue Omg解释 这段代码是通过调用Teacher方法得到老师的名字可以看出我们就算不通过对象直接调用也可以输出老师的名字。classmethod就起这个作用。 property 理解 本质上这是一个装饰器可以省去写get、set函数的对外绑定。 property 函数原型为 property(fgetNone, fsetNone, fdelNone, docNone) 代码 property与下面的代码效果是一样的 class Teacher:def __init__(self,name,subject):self._name nameself._subject subjectdef setName(self,name):self._name namedef getName(self):return self._namedef setSubject(self,subject):self._subject subjectdef getSubject(self):return self._subjectdef show(self):print(name is:{} and subject is:{}.format(self._name,self._subject))name property(getName,setName)subject property(getSubject,setSubject) if __name__ __main__:t Teacher(A,math)t.show()t.name Bt.subject Englisht.show()name is:A and subject is:math name is:B and subject is:English使用property之后的更加优美的版本 class Teacher:def __init__(self,name,subject):self._name nameself._subject subjectpropertydef name(self):return self._namename.setterdef name(self,name):self._name namepropertydef subject(self):return self._subjectsubject.setterdef subject(self,subject):self._subject subjectdef show(self):print(name is:{} and subject is:{}.format(self._name,self._subject)) if __name__ __main__:t Teacher(A,math)t.show()t.name Bt.subject Englisht.show() 注意 这里property必须在setter前面初始化这个应该很容易理解因为解释器读程序的时候是从上往下读的。 Special method 要点 之所有要实现special method是为了让自定义的class与python中的内置函数无缝衔接python中有大量的内置函数而这些函数中绝大部分是special methodpython中的special method https://rszalski.github.io/magicmethods/代码 class A:def __init__(self):passdef __str__(self):return I am strdef __len__(self):return 15def __bool__(self):return Falseif __name__ __main__:a A()print(a,len(a),aTrue)转载于:https://www.cnblogs.com/aoru45/p/9937751.html
http://www.zqtcl.cn/news/588200/

相关文章:

  • 国外网站建设推广iapp网站怎么做软件
  • 网站的设计步骤做网站的虚拟机怎么用
  • 游戏的网站做普通网站多少钱
  • 单位门户网站建设苏州吴中区做网站公司
  • 新网站内部优化怎么做家电网站建设
  • 怎么看网站源码用什么做的wordpress 六亩填
  • 网站建设实习报告范文闵行区邮编
  • h5网站模板免费下载怎样制作专业简历
  • php网站语言切换功能如何做263邮箱入口
  • 电商网站及企业微信订烟专门做红酒的网站
  • 大庆商城网站建设微网站建设找哪家
  • 渝快办官网seo管理平台
  • 网站建设辶金手指排名十二厦门建设局
  • 网站反链接什么seo推广优化多少钱
  • 建设工程公司采购的网站找不到网站后台怎么办
  • 江门网站seo推广湖南省建设银行网站官网
  • 网站底部关键词指向网站打开速度慢跟什么有关系
  • 网站右侧广告合肥高端网站设计
  • 漯河市郾城区网站建设wordpress文件管理
  • 网站栅格大连做网站的
  • 珠海企业网站建设报价鄂州网吧什么时候恢复营业
  • 手机制作钓鱼网站id转换为wordpress
  • 手机网站 好处信用中国 网站有那个部门支持建设
  • 模板免费网站自己如何做网站优化
  • 自适应网站做mip改造淘宝上买衣服的网站
  • 射阳做企业网站哪家好利用新冠消灭老年人
  • 网站头部修改wordpress php幻灯片代码
  • 网络违法犯罪举报网站哪里有制作网站服务
  • 临沂怎么做网站网站 单页
  • 科技信息网站系统建设方案建筑设计专业世界大学排名