byteofpython.info_OK - 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. 字符串是不可变的 -  中,讨论“字符串连接”问题时,使用"+"不是好主意,使用join()更为有效率。

6. 按字面意义级连字符串 - 以前不知道,简单地说:两个字符串相邻放着就会自动拼接成一个字符串.

>>> print 'what\'s' 'your name?'what's your name?

>>> strTest = 'hello' 'power'

>>>strTest'hellopower'

7. python中没有char类型 - 中,’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:printi,

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"", line 1SyntaxError: 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 inab.items():print 'Contact %s at %s' % (name, address)

33. 列表、元组和字符串都是序列,序列的两个主要特点是索引操作符和切片操作符。

34.  reference. 书中翻译是‘参考’,C++中应该是‘引用’,就直接写英文好了。 此处不清楚,与的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!

delshoplist[0]print 'shoplist is', shoplistprint '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', shoplistprint 'mylist is', mylist#notice that now the two lists are different

35. 程序中使用的字符串都是str类的对象。

36. 调用系统命令 - 很容易引发严重错误,不推荐。

importos

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"", line 1, in TypeError: eval() arg1 must be a string orcode object>>> eval('2^3')1

51.assert语句用来声明某个条件是真的。例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。

P.S: 我记得这玩意叫 断言??

>>> mylist = ['item']>>> assert len(mylist) >= 1

>>>mylist.pop()'item'

>>> assert len(mylist) >= 1Traceback (most recent call last):

File"", line 1, in?

AssertionError

52. repr函数用来取得对象的规范字符串表示。 P.S: 最好不要用 反引号。注意,在大多数时候有eval(repr(object)) == object。

53. One more: python 可变数量的参数

def test(*argv, **argv1):printargvprintargv1

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), '}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值