python核心编程-第三章-我的笔记

1.语句和语法python

(1)反斜杠"\"表示语句继续。python良好的编程习惯是一行最后不超过80个字符,一行字符过多时便须用到反斜杠换行继续该语句。编程

PS:在使用小括号、中括号、大括号时能够跨行书写,无须反斜杠;三引号的字符串也能够跨行书写app

(2)分号";"能够在同一行写多个语句。虽然python支持这么作,但为了代码可读性,通常不建议这么作编辑器

( 3 )不使用跨行符也能够跨行的状况:小括号、中括号、花括号及三引号之间的内容函数

2.变量赋值oop

(1) python中,对象是引用传递的,而不是直接将值赋给对象  如:布局

>>> a = 123
>>> b = a
>>> a
123
>>> b
123
>>> a = 456
>>> a
456
>>> b
123

语句 a = 123,执行的是建立整型 123 以及变量a,并把a指向这个整型;ui

语句 b = a ,执行的是建立变量b 并把b指向a指向的整型123spa

在从新给a赋值时,a的指向发生变化,b的指向并无发生变化,因此在执行 a = 456 以后,a 的值是 456,b的值还是123code

(2)多重赋值  形如x = y = z = 1,一个对象被赋予多个变量

(3)多元赋值  这种赋值方式的等号两边都是元组

>>> x, y, z = 1, 2, 'ab'
>>> x
1
>>> y
2
>>> z
'ab'

一、二、'ab'三个对象分别赋值给x,y,z  

为了提升代码可读性,最好给两边的元组都加上括号

>>> (x, y, z) = (1, 2, 'ab')
>>> x
1
>>> y
2
>>> z
'ab'

多元赋值能够方便的用于变量交换

>>> x = 123
>>> y = 456
>>> x
123
>>> y
456
>>> (x, y) = (y, x)
>>> x
456
>>> y
123

3.标识符

①标识符只可包含字母、数字、下划线,首字符不可为数字

②定义字符时须避免python关键字和内建字符。python关键字以下图:

③python用下划线做为变量前缀和后缀指定特殊变量,对解释器有特殊意义,故建议避免用下划线做为变量名字符的开始

4.python基本风格

(1)综述

①注释是必要的,但须要注意不能过分注释,如

x = 5    #对x赋值5

这里的注释就是没必要要的,由于这是句废话

②在模块、类或函数声明中第一个没有赋值的字符串能够用属性obj.__doc__进行访问,动态得到特殊字符串。obj是模块、类或函数的名字

③良好的缩进风格是四个空格。若代码须要运行在不一样平台上或用不一样的编辑器打开,请避免用tab

③使用简短而又意义丰富的标识符名称

(2)模块结构和布局

①典型的python模块结构,如图

②除非必要,尽可能用局部变量代替全局变量

③除了真正须要执行的代码,须要导入模块时必须执行的代码,几乎全部功能代码应该都封装在函数或类里等待主程序调用

④python检测模块是被导入仍是被直接运行,用__name__系统变量:

若是模块是被导入,__name__的值为模块名字

若是模块被直接执行,__name__的值为"__main__"

5.内存管理

(1)变量定义

①python中,变量使用前无须声明名字和类型,将在变量第一次赋值时自动声明

②变量仍然须要在被建立和赋值后才能使用

③变量被赋值后。能够经过变量名直接访问

(2)引用计数

python使用"引用计数"来保持追踪内存中的对象。一个内部跟踪变量,称为一个引用计数器,每一个对象各有多少个引用,简称引用计数。对象的引用计数为0时被看成垃圾回收。

①增长引用计数

当对象被建立时,就建立了一个引用计数;当对象被赋值给1个变量时,引用计数就增长1。

当同一个对象又被赋值给其余变量,或者被做为参数传递给函数,或做为容器对象的一个元素时,对象的引用计数增长1。

x = 123      # 对象被建立并赋值,引用计数为1
y = x        #对象被引用给其余变量,引用计数加1
float(x)     #做为参数传递给函数,引用计数加1
list1 = ['ab','c',x]      #成为容器的一个元素,引用计数加1

②减小引用计数

引用计数减小包括如下情形:

一个本地引用离开了做用范围,这种状况最常出如今函数运行结束时全部局部变量都被销毁,对象的引用计数随之减小;

变量被赋值给另一个对象时,原对象的引用计数自动减1:

foo = "xyz"      #"xyz"被建立并被赋值,引用计数为1
bar = foo        #"xyz"被再次引用给其余变量,引用计数增长1变成2
for = 123        #foo 被从新赋值给其余对象,"xyz"引用计数自动减1又变为1

一个本地引用离开其做用范围时,好比函数结束时,引用计数减1

对象的别名被del显式销毁

del y      # or del x

‍对象从一个容器对象中被移除‍

list1.remove(x)

容器对象自己被销毁

del list1

6.python程序实例

makeTextFile.py

#!usr/bin/env python

'makeTextFile.py -- create text file'

import os
ls = os.linesep

# get filename
while True:
    fname = raw_input("Please enter the file name: ")
    if os.path.exists(fname):
        print "ERROR: %s already exists!" % fname
    else:
        break 

# get file content (text) lines
all = []
print "\nEnter lines ('.' by itself to quit).\n"

# loop until user terminates input
while True:
    entry = raw_input("> ")
    if entry == '.':
        break
    else:
        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])
fobj.close()
print 'DONE!'

readTextFile

#!usr/bin/env python

'readTextFile.py -- read and display text file'

# get filename
fname = raw_input('Enter filename: ')
print 

# attempt to open file for reading
try:
    fobj = open(fname, 'r')
except IOError, e:
    print "*** file open error: ", e
else:
    # display contents to the screen
    for eachline in fobj:
        print eachline,
    fobj.close()

输出:

Notes:

①坚持写简洁并有用的文档字符串

②对于频繁使用的模块变量,尽可能使用本地变量来代替,如

ls = os.linesep

   优势是提高运行效率,并且能够不用敲那么长的变量名

③while-break语法

④os.path.exists()判断一个文件是否存在,不存在返回 False,不然返回 True。

⑤try-except-else结构

结构:

try:
    pass        #try子块是但愿检测错误的代码块    
except IOError,e:
    pass    #except子块对错误作出处理,当发生错误时执行此代码块
else:
    pass    #else代码块在try子块检测无误时执行
相关文章
相关标签/搜索