函数声明
以def开始,不指名具体的返回类型,但是通常都会有返回值,即使为空。函数声明后即可使用
def approximate_size(size, a_kilobyte_is_1024_bytes=True):
在 Python 里面,变量从来不会显式的指定类型。Python 会在内部算出一个变量的类型并进行跟踪。只要你有一个命名参数,它右边的所有参数也都需要是命名参数。
import
导入(import)一个模块的时候,Python 会寻找几个地方。具体来说,它会搜寻在 sys.path
里面定义的所有目录。这只是一个列表,你可以容易地查看它或者使用标准的列表方法去修改它。( sys
模块是用 c 语言写的。)
通过使用 sys.path.insert(0, new_path)
,你可以插入一个新的目录到 sys.path
列表的第一项
导入(import
)了一个 Python 模块,你就可以通过 module.function
的方式访问它的函数
对象
Python 里面的所有东西都是对象,所有东西都可以有属性和方法。所有函数都有一个内置的属性 __doc__,用来返回这个函数的源代码里面定义的文档字符串(docstring)
在 Python 里面,定义更加宽松。有些对象既没有属性也没有方法,然而它可以有。不是所有的对象都是可衍生的。但是,所有的东西都是对象,从这个意义上说,它能够被赋值到一个变量或者作为一个参数传入一个函数。
在 Python 里面所有东西都是对象。字符串是对象,列表是对象,函数是对象,类是对象,类的实例是对象,甚至模块也是对象。
缩进
唯一的定界符就是一个冒号(:
)和代码自身的缩进
异常
所有的东西都是区分大小写的
数据类型
列表
定义列表后,可从其中获取任何部分作为新列表。
如果在列表中没有找到该值,index()
方法将会引发一个例外。直接崩掉,不像其他语言返回-1
列表永远不会有缝隙
可以在列表解析中使用任何的Python表达式 [elem * 2 for elem in a_list]
集合
os.chdir('/Users/chain/examples')
os.path.join(os.path.expanduser('~'), 'examples', 'humansize.py')
sys.path.insert(0, '/Users/chain/examples')
字符串
在Python 3,所有的字符串都是使用Unicode编码的字符序列。
定义一个字符串以后,我们可以截取其中的任意部分形成新串。这种操作被称作字符串的分片(slice)。
正则表达式
^ 匹配字符串开始. $ 匹配字符串结尾
(A|B) 匹配A模式或者B模式中的一个
注意,如果要使用松散正则表达式,需要传递一个叫re.VERBOSE的参数。
re.search(pattern, 'M', re.VERBOSE)
\d 匹配所有0-9的数字. \D 匹配除了数字外的所有字符.
^ 匹配字符串开始位置。
^
有特别的含义:非。[^abc]
的意思是:“ 除了 a
、 b
或 c
之外的任何字符”
$ 匹配字符串结束位置。
\b 匹配一个单词边界。
\d 匹配一个数字。
\D 匹配一个任意的非数字字符。
x? 匹配可选的x字符。换句话说,就是0个或者1个x字符。
x* 匹配0个或更多的x。
x+ 匹配1个或者更多x。
x{n,m} 匹配n到m个x,至少n个,不能超过m个。
(a|b|c) 匹配单独的任意一个a或者b或者c。
(x) 这是一个组,它会记忆它匹配到的字符串。你可以用re.search返回的匹配对象的groups()函数来获取到匹配的值。
\1
,它表示“嘿,记住的第一个分组呢?把它放到这里。>>> re.sub('([^aeiou])y$', r'\1ies', 'vacancy')
的
生成器
“yield” 暂停一个函数。“next()” 从其暂停处恢复其运行。
yield
是一种产生一个迭代器却不需要构建迭代器的精密小巧的方法。
类
因为__init__()
方法调用时,对象已经创建了,你已经有了一个合法类对象的引用。
迭代器就是一个定义了 __iter__()
方法的类。
文件
a_file = open('examples/chinese.txt', encoding='utf-8')
http
缓存:应该使用 httplib2
最后修改的时间
ETag:ETag
头里返回一个哈希码(如何生成哈希码完全取决于服务器,唯一的要求是数据改变时哈希码也要改变)
压缩
重定向
Cache-Control: max-age
的意思是“一个星期以内都不要来烦我。
304: Not Modified
的意思是 “不同的日子,同样的数据(same shit, different day)。
第2遍:http://www.cnitblog.com/yunshichen/archive/2009/04/01/55924.html
http://woodpecker.org.cn/abyteofpython_cn/chinese/index.html
学习了如何使用运算符、操作数和表达式——这些使任何程序的基本组成部分。
学习了如何使用三种控制流语句——if、while和for以及与它们相关的break和continue语句。
学习了函数的很多方面的知识,不过注意还有一些方面我们没有涉及。
学习了如何使用这些模块以及如何创造我们自己的模块。
详细探讨了多种Python内建的数据结构。这些数据结构将是编写程序时至关重要的部分。
学习如何创建我们自己的Python程序/脚本,以及在编写这个程序中所设计到的不同的状态。
研究了类和对象的多个内容以及与它们相关的多个术语。了解了面向对象的编程的优点和缺陷。Python是一个高度面向对象的语言
讨论了多种类型的输入/输出,及文件处理和使用储存器模块。
讨论了try..except和try..finally语句的用法。我们还学习了如何创建我们自己的异常类型和如何引发异常。
学习了Python标准库中的sys模块和os模块的一部分功能。
使用列表综合可以用一种更加精确、简洁、清楚的方法完成相同的工作。
lambda语句用来创建函数对象。本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。
repr函数用来取得对象的规范字符串表示。