<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hash_Map_zong的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Hash_Map_zong</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hash_Map_zong]]></copyright><item><title><![CDATA[使用logging模块日志调试]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82855637</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82855637</guid><author>Hash_Map_zong</author><pubDate>Wed, 26 Sep 2018 16:44:23 +0800</pubDate><description><![CDATA[就是利用logging模块，在代码合适的地方插入输出log语句，把合适的信息输出到log文件中，通过查看log文件分析代码的执行情况。
优点：
logging模块可以指定输出格式和内容（可以输出时间，代码的行号，当前运行程序的名称、当前运行的函数名称、进程ID等等），因此能获得更精确的调试信息，应用场景更广泛，可以应用于生产环境。
服务器不需要关闭，直接查看日志分析错误。
发现问题后解决，再用热修...]]></description><category></category></item><item><title><![CDATA[__slots__，元类]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82384366</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82384366</guid><author>Hash_Map_zong</author><pubDate>Tue, 04 Sep 2018 15:26:54 +0800</pubDate><description><![CDATA[动态语言和静态语言的区别


  动态语言：可以在运行的过程中，修改代码 
  静态语言：编译时已经确定好代码，运行过程中不能修改


但是如果我们想要限制实例的属性，只允许对Person实例添加name和age属性，为了达到这样的限制目的，python允许定义class的时候，定义一个特殊的slots变量，来限制该class实例能添加的属性：



使用 _ _ slots _ _限制添加实例属...]]></description><category></category></item><item><title><![CDATA[python是动态语言]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82259978</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82259978</guid><author>Hash_Map_zong</author><pubDate>Fri, 31 Aug 2018 17:44:30 +0800</pubDate><description><![CDATA[什么是动态语言


  动态编程语言 是 高级程序设计语言 的一个类别，在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 ：例如新的函数、对象、甚至代码可以被引进，已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。例如JavaScript便是一个动态语言，除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言，而 C 、 C++ 、Java等语...]]></description><category></category></item><item><title><![CDATA[python装饰器（decorator）]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82218486</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82218486</guid><author>Hash_Map_zong</author><pubDate>Fri, 31 Aug 2018 11:38:02 +0800</pubDate><description><![CDATA[什么是装饰器


  装饰器本质上是一个python函数，它可以让其他函数在不需要做任何代码变动的前提下增加额外功能，装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景，比如：插入日志，性能测试，事物处理，缓存，权限校验等场景。装饰器是解决这类为题的绝佳设计，有了装饰器，我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用，概括的讲，装饰器的作用就是为已经存在的对象添加额外的功能。
...]]></description><category></category></item><item><title><![CDATA[python的闭包]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82216444</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82216444</guid><author>Hash_Map_zong</author><pubDate>Thu, 30 Aug 2018 10:35:24 +0800</pubDate><description><![CDATA[什么是闭包：


  1.闭包函数必须有内嵌函数 
    2.内嵌函数需要引用该嵌套函数上一级namespace中的变量 
    3.闭包函数必须返回内嵌函数 
  通过这三点，就可以创建一个闭包；  python装饰器就是使用了闭包


闭包使得代码变得更加简洁 
简单的闭包案例：



def fo():
    m = 3
    n = 5
    def bar():
       ...]]></description><category></category></item><item><title><![CDATA[python迭代器：iterator]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82189879</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82189879</guid><author>Hash_Map_zong</author><pubDate>Wed, 29 Aug 2018 17:51:25 +0800</pubDate><description><![CDATA[迭代是访问集合元素的一种方式，迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束，迭代器只能往前不会后退。
可以被next()函数调用并不断返回下一个值的对象称为迭代器：Iterator.


可迭代对象：以直接作用于for循环的数据类型有以下几种 
    一类是集合数据类型，如list，tuple（元组），dict（字典），set，str等； ...]]></description><category></category></item><item><title><![CDATA[python生成器：generator]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82182816</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82182816</guid><author>Hash_Map_zong</author><pubDate>Wed, 29 Aug 2018 16:27:14 +0800</pubDate><description><![CDATA[1.什么是生成器generator：

通过列表生成式(列表推导式)，我们可以直接创建一个列表。但是，受到内存限制，列表容量肯定是有限的。而且，创建一个包含100万个元素的列表，不仅占用很大的存储空间，如果我们仅仅需要访问前面几个元素，那后面绝大多数元素占用的空间都白白浪费了。所以，如果列表元素可以按照某种算法推算出来，那我们是否可以在循环的过程中不断推算出后续的元素呢？这样就不必创建完整的lis...]]></description><category></category></item><item><title><![CDATA[python列表，字典，元素集合]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82180408</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82180408</guid><author>Hash_Map_zong</author><pubDate>Wed, 29 Aug 2018 11:17:47 +0800</pubDate><description><![CDATA[列表的增删改查 
添加元素(“增”append, extend, insert)

append可以向列表添加元素 
extend将另一个集合中的元素逐一添加到列表中 
insert在指定位置index前插入元素

删除元素(“删”del, pop, remove) 
del根据下标进行删除 
pop删除最后一个元素 
remove根据元素的值进行删除 
如果元素不存在会报错所以应该先进行判断 
...]]></description><category></category></item><item><title><![CDATA[python常见字符串函数]]></title><link>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82180293</link><guid>https://blog.youkuaiyun.com/Hash_Map_zong/article/details/82180293</guid><author>Hash_Map_zong</author><pubDate>Wed, 29 Aug 2018 11:13:13 +0800</pubDate><description><![CDATA[1.find 
检测 str 是否包含在 mystr中，如果是返回开始的索引值，否则返回-1 
mystr.find(str, start=0, end=len(mystr))

2.rfind 
类似于find()函数，不过是从右边开始查找. 
mystr.rfind(str, start=0,end=len(mystr) )

3.index 
index()跟find()方法一样，只不过如果...]]></description><category></category></item></channel></rss>