Python核心编程第三章笔记

井号(#)表示之后的字符为Python注释

反斜线 (\ ) 继续上一行

分号 (; )将两个语句连接在一行中

冒号 (: ) 将代码块的头和体分开



C语言赋值语句,被当成一个表达式(可以返回值)

Python的赋值语句不会返回值。

>>>x = 1

>>>y = (x = x + 1)

#assignments not expressions! File "<stdin>", line 1

y= (x = x + 1)

^

SyntaxError:invalid syntax


链式赋值没问题,(本章稍后部分会给出更多的例子):

>>>y = x = x + 1

>>>x, y

(2,2)


增量赋值

x= x + 1可以被写成:x+= 1

增量赋值相对普通赋值不仅仅是写法上的改变,最有意义的变化是第一个对象(我们例子

中的 A)仅被处理一次。可变对象会被就地修改(无修拷贝引用),不可变对象则和A= A +B 的结果一样(分配一个新对象)

>>>m = 12

>>>m %= 7

>>>m

5

>>>m **= 2

>>>m

25

>>>aList = [123, 'xyz']

>>>aList += [45.6e7]

>>>aList

[123,'xyz', 456000000.0]



多重赋值

>>>x = y = z = 1

>>>x

1

>>>y

1

>>>z

1

在上面的例子中,一个值为1的整数对象被创建,该对象的同一个引用被赋值给xy

z。也就是将一个对象赋给了多个变量。当然,Python当中,将多个对象赋给多个变量也是

可以的。


“多元”赋值

用这种方式赋值时,等号两边的对象都是元组

>>>x, y, z = 1, 2, 'a string'

>>>x

1

>>>y

2

>>>z

'astring'

相当于:

>>>(x, y, z) = (1, 2, 'a string')


/*C语言中两个变量交换*/

tmp= x;

x= y;

y= tmp;


/*python中两个变量交换*/

>>>x, y = 1, 2

>>>x

1

>>>y

2

>>>x, y = y, x

>>>x

2

>>>y

1

显然,Python在赋值之前已经事先对xy的新值做了计算。


合法的Python标识符

Python标识符字符串规则和其他大部分用C编写的高级语言相似:

第一个字符必须是字母或下划线(_)

剩下的字符可以是字母和数字或下划线

大小写敏感

标识符不能以数字开头;除了下划线,其他的符号都不允许使用。处理下划线最简单的方法是把它们当成字母字符。

大小写敏感意味着标识符 foo不同于 Foo,而这两者也不同于FOO


专用下划线标识符


_xxx不用'frommodule import *'导入

__xxx__系统定义名字

__xxx类中的私有变量名



下面就是一种非常合理的布局:

#(1)起始行(Unix)

#(2)模块文档

#(3)模块导入

#(4)变量定义

#(5)类定义

#(6)函数定义

#(7)主程序

当对象被创建并(将其引用)赋值给变量时,该对象的引用计数就被设置为1

当同一个对象(的引用)又被赋值给其它变量时,或作为参数传递给函数,方法或类实例

,或者被赋值为一个窗口对象的成员时,该对象的一个新的引用,或者称作别名,就被创建

(则该对象的引用计数自动加1)

请看以下声明:

x= 3.14

y= x

语句x=3.14创建了一个浮点数对象并将其引用赋值给xx是第一个引用,因此,对象的引用计数被设置为1。语句y=x创建了一个指向同一对象的别名y。事实上并没有为Y创建一个新对象,而是该对象的引用计数增加了1(变成了2)。这是对象引用计数增加的方式之一。还有一些其它的方式也能增加对象的引用计数,比如该对象作为参

数被函数调用或这个对象被加入到某个容器对象当中时。



对象的引用计数在

1、对象被创建

x= 3.14

2、或另外的别名被创建

y= x

3、或被作为参数传递给函数(新的本地引用)

foobar(x)

4、或成为容器对象的一个元素

myList= [123, x, 'xyz']



引用计数在以下情况会减少:一个本地引用离开了其作用范围。

1、比如foobar()(参见上一下例子)函数结束时。

2、对象的别名被显式的销毁。

dely # or del x

3、对象的一个别名被赋值给其它的对象

x= 123

4、对象被从一个窗口对象中移除

myList.remove(x)

5、窗口对象本身被销毁

delmyList # or goes out-of-scope



Unix平台,'\n',DOSwin32平台,则是'\r\n'

通过使用os.lineseq,我们不必关心程序运行在什么平台,也不必要根据不同的平台决定使用哪种行结束符。


ls=os.lineseq

all.append(entry) # write lines to file with proper line-ending

fobj= open(fname, 'w')

fobj.writelines(['%s%s'% (x, ls) for x in all]) 

发布了30 篇原创文章 · 获赞 7 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章