OK - A byte of python - 读书笔记
看这本书的目的:再熟悉基本概念。
大部分都是知道,但是需要 明确 出来的 概念。 - 欢迎吐槽错误,非常感谢。
<A byte of python> - THIS
1. 组织行 - 形式:#! /usr/bin/python - 告诉linux通过哪个解释器去运行 源文件。
2. print实际上是一个操作符。
3. 自然字符串(又,原始字符串) - r 或 R, 我猜 r = raw - 完全地直接输出,即使是转义符也直接输出了
>>> print r'\n\nhello'
'\n\nhello'
4. Unicode字符串 - 书写国际文本的标准方法。 EX: u'This is a unicode.'
5. 字符串是不可变的 - <Python cookbook> 中,讨论“字符串连接”问题时,使用"+"不是好主意,使用join()更为有效率。
6. 按字面意义级连字符串 - 以前不知道,简单地说:两个字符串相邻放着就会自动拼接成一个字符串.
>>> print 'what\'s ' 'your name?'
what's your name?
>>> strTest = 'hello' 'power'
>>> strTest
'hellopower'
7. python中没有char类型 - <Python cookbook>中,’python中,字符(char)就是长度为1的字符串',这个阐述得很明白了
8. 一定要用 自然字符串 处理 正则表达式。 - 否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\\1'或r'\1'。
- Django中,URL 到 视图函数 的 映射是通过 正则表达式 完成的。这也就是为什么,settings.py - URLConf 都会使用'r'的原因。
9. 变量,一部分内存。 - 内存空间中的程序 - 自己能翻译吗??
10. Python把在程序中用到的任何东西都称为 对象 - 就每一个东西包括数、字符串甚至函数都是对象 - 具体不清楚,函数也是对象是怎么回事。
11. 每个物理行只写一句逻辑行. - 物理行就是我们想法中的一行。逻辑行就是一个python语句了。这样的分类很有趣。
12. 请使用4空格进行缩进。 - 就是为了跨平台,就是不要混用空格和制表符,最好也不要使用制表符。
- 用vim的时候,:set expandtab 空格 代替 制表符。 :set tabstop=4,就是4个空格呗。 :set list,显示出tab制表符。
13. 运算符 中,//,取整除,返回商的整数部分。 eg:
>>> 4.0 // 3.0
1.0
14. lambda,是 运算符, - -!运算符 和 操作符 有什么区别? operator。不纠结,继续。
15. 在Python中没有switch语句。
16. while语句有一个可选的else从句。
【else块事实上是多余的,因为你可以把其中的语句放在同一块(与while相同)中,跟在while语句之后,这样可以取得相同的效果。】 - 这是用来搞笑的吗!?还是为了紧凑啊!!?
17. 哈哈哈哈哈哈,大哥!!我刚刚写了这个语句:
>>> i = 9
>>> --i
>>> # 我把自己逗笑了
18. 如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。 对NO.16的回答。
i = 10 while i > 0:
print i,
i -= 1
if 5 == i:
break
else:
print 'when the statement become False, so u saw this.' print 'End'
19. 函数是重用的程序段。 - 说得好。
20. 只有在形参表末尾的那些参数可以有默认参数值.
>>> def test(a = 1, b):
... print 'a:', a, 'b:', b
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
21. 关键字参数。 1. 更灵活。不用在乎参数位置了。 2. 更易读。 - 与之对应的是,位置参数。
<中间丢了一部分>
30. dir()提供一个模块名的时候,它返回模块定义的名称列表(变量/名称)。如果不提供参数,它返回当前模块中定义的名称列表。
31. 含有0个或1个项目的元组。
0: 一个空的元组由一对空的圆括号组成,如myempty = ()。
1: 含有单个元素的元组在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象。
32. 遍历 字典:
ab = { 'Swaroop' : 'swaroopch@byteofpython.info',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}
for name, address in ab.items():
print 'Contact %s at %s' % (name, address)
33. 列表、元组和字符串都是序列,序列的两个主要特点是索引操作符和切片操作符。
34. reference. 书中翻译是‘参考’,C++中应该是‘引用’,就直接写英文好了。 此处不清楚,与<python cookbook>的4.1中,深浅拷贝 的区别。
#!/usr/bin/python
# Filename: reference.py print 'Simple Assignment'
shoplist = ['apple', 'mango', 'carrot', 'banana']
mylist = shoplist # mylist is just another name pointing to the same object! del shoplist[0] print 'shoplist is', shoplist
print 'mylist is', mylist
# notice that both shoplist and mylist both print the same list without
# the 'apple' confirming that they point to the same object print 'Copy by making a full slice'
mylist = shoplist[:] # make a copy by doing a full slice
del mylist[0] # remove first item print 'shoplist is', shoplist
print 'mylist is', mylist
# notice that now the two lists are different
35. 程序中使用的字符串都是str类的对象。
36. 调用系统命令 - 很容易引发严重错误,不推荐。
import os
os.system('ls')
37. os.sep: 目录分隔符,即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':'。
38. “软件是长出来的,而不是建造的。”
39. self。
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。
这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。
40. __init__方法。 __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。
41. 下划线:
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如
__privatevar,Python的名称管理体系会有效地把它作为私有变量。这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。同样,注意
__del__方法与 destructor 的概念类似。
42. 一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可以被视作是父类的实例,这种现象被称为多态现象。
43. Python不会自动调用基本类的Father.__init__(),即constructor,特别地,亲自专门调用它。
44. 如果在继承元组中列了一个以上的类,那么它就被称作 多重继承 。
45. 储存器(存储\取存储) - cPickle. pickle - 使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。
46. 命令行参数 - sys.argv
47.
os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
os.getenv()和os.putenv()函数分别用来读取和设置环境变量。 http://docs.python.org/2/library/os.html http://en.wikipedia.org/wiki/Environment_variable#Unix
os.listdir()返回指定目录下的所有文件和目录名。
os.remove()函数用来删除一个文件。
os.system()函数用来运行shell命令。
os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
os.path.split()函数返回一个路径的目录名和文件名。
48. 一些特殊的方法,虽然我不知道什么时候用到,但是还是记下了。
| 名称 | 说明 |
|---|---|
| __init__(self,...) | 这个方法在新建对象恰好要被返回使用之前被调用。 |
| __del__(self) | 恰好在对象要被删除之前调用。 |
| __str__(self) | 在我们对对象使用print语句或是使用str()的时候调用。 |
| __lt__(self,other) | 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。 |
| __getitem__(self,key) | 使用x[key]索引操作符的时候调用。 |
| __len__(self) | 对序列对象使用内建的len()函数的时候调用。
|
49. exec语句用来执行储存在字符串或文件中的Python语句。
>>> exec 'import os'
>>> exec 'os.name'
>>> exec 'print os.name'
posix
50. eval语句用来计算存储在字符串中的有效Python表达式。
>>> eval(2^3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: eval() arg 1 must be a string or code object
>>> eval('2^3')
1
51. assert语句用来声明某个条件是真的。例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。
P.S: 我记得这玩意叫 断言??
>>> mylist = ['item']
>>> assert len(mylist) >= 1
>>> mylist.pop()
'item'
>>> assert len(mylist) >= 1
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError
52. repr函数用来取得对象的规范字符串表示。 P.S: 最好不要用 反引号。注意,在大多数时候有eval(repr(object)) == object。
53. One more: python 可变数量的参数
def test(*argv, **argv1):
print argv
print argv1 test(2, 3, 4, a=2) # This is normally right.
test(2, 3, 4, { 1:2}) # calling **argv1 should not be used like this
test(2, 3, 4, { 1:2}, a=2, 2) # This is error.
补充:
1. Modules vs Package
THIS explains very clearly.
Module THIS
Package THIS
In a word, Package = Module * n (n>=1)
>>> print '{', 'OK'.center(20), '}'
OK - A byte of python - 读书笔记的更多相关文章
- Web Scraping with Python读书笔记及思考
Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...
- python读书笔记-《A Byte of Python》中文第三版后半部分
编辑器:windows,linux 不要用notepad,缩进糟糕 -------------- 5.18缩进 同一层次的语句必须有相同的缩进.每一组这样的语句称为一个块. i = 5 2 prin ...
- 流畅的Python读书笔记(二)
2.1 可变序列与不可变序列 可变序列 list. bytearray. array.array. collections.deque 和 memoryview. 不可变序列 tuple. str 和 ...
- 流畅的python 读书笔记 第二章 序列构成的数组 列表推导
列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会. 2.2.1 列表推 ...
- 【updating】python读书笔记-The Django Book2.0(for django1.4)
原文:http://www.djangobook.com/en/2.0/frontmatter.html 译文:http://djangobook.py3k.cn/2.0/ 或者http://docs ...
- python读书笔记-《简明python教程》上
1月15日 <简明python教程>上 基本结构: 基础概念+控制流+函数+模块+数据结构+面向对象+I/O+异常+标准库+其他 1.概念 1-0 退出python linux: ...
- Head First Python 读书笔记
记录一下这段时间看<Head First Python>记录的一些小知识,只是记了很少一部分,有需要的话以后再添加吧. for循环的使用: for 目标标识符 in 列表: 处理代码 if ...
- Effective Python读书笔记
有些位置可能翻译理解的不到位,各位看官如有疑问,欢迎留言赐教. Pythonic Thinking 大家经常用Pythonic来形容python语法风格的编程方式:简单优美,没有之一:通过import ...
- 流畅的python读书笔记-第十章-继承优缺点
继承的优缺点 推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架.--Alan Kay 子类化内置类型很麻烦 (如 list 或 dict)) ,别搞这种 直接子类化内置类型(如 dict.li ...
随机推荐
- 物理地址 = 段地址*10H + 偏移地址
程序如何执行: CPU先找到程序在内存中的入口地址 -- 地址总线 (8086有20根地址总线,每一根可以某一时传0或1, 20位的二进制数字可以表示的不同的数字的个数是2^20=1048576 10 ...
- Firefox下网页缩放时防止div被挤到下一层
http://wu110cheng.blog.163.com/blog/static/13334965420121120102439190/ Firefox下网页缩放时防止div被挤到下一层 问题:三 ...
- 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...
- C# foreach循环绑定key数组和value 数组(备用)
<div class="ContextualTab inner_warp clearfix" data-max="2" data-blur=false d ...
- hdu 4586 Play the Dice
思路:设期望值为s,前m个是再来一次机会,则有 s=(a[1]+s)/n+(a[2]+s)/n+……+(a[m]+s)/n+a[m+1]/n…… 化简:(n-m)s=sum 当sum=0时,为0: 当 ...
- C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- 自旋锁spin_lock和raw_spin_lock
自旋锁spin_lock和raw_spin_lock Linux内核spin_lock.spin_lock_irq 和 spin_lock_irqsave 分析 http://blog.csdn.ne ...
- Windows下Subversion和Apache的安装及配置(一)
1.序 Subversion可谓版本控制软件中的佼佼者,其开源性,易用性已受到众多软件开发者首选的版本控制软件.在这里我想记录我安装Subversion和Apache的过程.注意,Subversion ...
- C编译过程概述
转自:http://my.oschina.net/apeng/blog/105245 C 编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection), ...
- tomcat升级问题
在本地开发使用myeclipse6.5自带tomcat,部署到服务器上是7.x,导致jsp页面无法解析. 所以想着在本地也使用tomcat7部署,myeclipse6.5不支持tomcat7.x,到网 ...