for循环在Python中是怎么工作的

注:本文针对的示例是针对Python3,同时对Python2做了注释,注意区分自己使用的版本。 for...in 是Python程序员使用最多的语句,for 循环用于迭代容器对象中的元素,这些对象可以是列表、元组、字典、集合、文件,甚至可以是自定义类或者函数,例如: 作用于列表 >>> for elem in [1,2,3]: ... print(elem) ... 1 2 3 作用于元组 ...

more ...

一步一步教你认识Python闭包

在「python之禅」公众号中曾经介绍过两篇关于函数的文章,第一篇是 关于 Python 函数是第一类对象,第二篇是关于 Lambda 函数,今天来说说 Python 闭包。 什么是闭包?闭包有什么用?为什么要用闭包?今天我们就带着这3个问题来一步一步认识闭包。闭包和函数紧密联系在一起,介绍闭包前有必要先介绍一些背景知识,诸如嵌套函数、变量的作用域等概念 作用域 ...

more ...

Python 函数中,参数是传值,还是传引用?

在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码。 代码段1: def foo(arg): arg = 2 print(arg) a = 1 foo(a) # 输出:2 print(a) # 输出:1 看了代码段1的同学可能会说参数是值传递。 代码段2: def bar(args): args.append(1) ...

more ...

Python 表达式 i += x 与 i = i + x 等价吗?

Python 表达式 i += x 与 i = i + x 等价吗?如果你的回答是yes,那么恭喜你正确了50%,为什么说只对了一半呢? 按照我们的一般理解它们俩是等价的,整数操作时两者没什么异同,但是对于列表操作,是不是也一样呢?先看下面两段代码: 代码1 >>> l1 = range(3) >>> l2 = l1 >>> l2 += [3] >>> l1 [0, 1, 2, 3] ...

more ...

好玩的Python彩蛋

Python作为一门严谨的编程语言,也充满了各种娱乐、恶搞、实用的彩蛋,程序员真的是一群创意无极限的家伙。笔者总结了Python中几个比较有趣的彩蛋。 1. Hello World 相传古时候有个退休的程序员,在家闲来无事,决定修习书法之道。第一日备好笔墨纸砚,便挥毫落纸写下一行大字:“hello, world”。hello world ...

more ...

分析urllib.unquote乱码的原因

Python中的urllib模块用来处理url相关的操作,unquote方法对应javascript中的urldecode方法,它对url进行解码,把类似"%xx"的字符替换成单个字符,例如:“%E6%B3%95%E5%9B%BD%E7%BA%A2%E9%85%92”解码后会转换成“法国红酒”,但是使用过程中,如果姿势不对,最终转换出来的字符会是乱码“æ³•å›½çº¢é ”。 ...

more ...

标签云算法Python实现

标签云(Tag Cloud)常见于各种博客站点中,标签有利于网站内容分类,还可以用于相关性内容推荐。近日笔者有空把个人的开源博客Django_blog添加了一个新功能--标签云。最终效果请访问:http://foofish.net/blog/tags 实现原理 标签云最终展现出来的效果其实是由两个HTML参数来控制的,分别是:font-size和color,如: <a ...

more ...

免费中文Python电子书(教程)

小白Python教程,Python3中文教程,电子版, 廖雪峰的小白python教程,有python2和python3两个版本: 简明Python教程,简明python教程,是《A Byte of Python》的中文版 零基础学Python,老齐(qiwsir)的Python基础教程Gitbook版 可爱的 Python ,大妈(Zoom.Quiet)创意并组建团队,完全由 CPyUG ...

more ...

Python中的垃圾回收机制

GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用。GC彻底把程序员从资源管理的重担中解放出来,让他们有更多的时间放在业务逻辑上。但这并不意味着码农就可以不去了解GC,毕竟多了解GC知识还是有利于我们写出更健壮的代码。 引用计数 Python语言默认采用的垃圾收集机制是『引用计数法 Reference ...

more ...

Python字典对象实现原理

字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1) : >>> d = {'a': 1, 'b': 2} >>> d['c'] = 3 >>> d {'a': 1, 'b': 2, 'c': 3} ...

more ...

Python列表对象实现原理

Python中的列表基于PyListObject实现,列表支持元素的插入、删除、更新操作,因此PyListObject是一个变长对象(列表的长度随着元素的增加和删除而变长和变短),同时它还是一个可变对象(列表中的元素根据列表的操作而发生变化,内存大小动态的变化),PyListObject的定义: typedef struct { # 列表对象引用计数 int ob_refcnt; # ...

more ...

Python字符串对象实现原理

在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dict等。 >>> import sys >>> sys.getsizeof(1000) 28 >>> sys.getsizeof(2000) 28 >>> ...

more ...

Python 整数对象实现原理

整数对象在Python内部用PyIntObject结构体表示: typedef struct { PyObject_HEAD long ob_ival; } PyIntObject; PyObject_HEAD宏中定义的两个属性分别是: int ob_refcnt; struct _typeobject *ob_type; 这两个属性是所有Python对象固有的: ...

more ...

OS X El-Capitan 安装 virtualenvwrapper 遇到 Operation not permitted

事情是这样的,在安装完virtualenv后,想配合virtualenvwrapper使用,于是直接是pip安装: $ pip install virtualenvwrapper 于是抱了一错误,说是没有权限,那么加上sudo后运行: $ sudo pip install virtualenvwrapper 发现还是有问题,仔细一看堆栈信息: Collecting six>=1.9.0 ...

more ...

如何在Python中正确使用static、class、abstract方法

本文翻译自The definitive guide on how to use static, class or abstract methods in Python,初译版本发布于伯乐在线,内容略有改动。 在Python面向对象编程中,类中的方法有多种形式:实例方法、静态方法、类方法、抽象方法,本文来说说如何正确地使用这些方法。 实例方法 实例方法的定义只需要把第一个参数指定为 ...

more ...