1~3 chapter

开坑~ Python基础教程看了两遍了,发现有些知识还是比较模糊,讲的相对简单,完全深入不下去了,看网上介绍核心编程比较靠谱,大致看了两章,这本书比基础教程更严谨,结构更完整,许多细枝末节都补充的很好,所以准备开坑写一写笔记,以后也可以帮助回忆。

第一章

本章大部分就是介绍python多牛逼,多厉害,然后怎么安装。 比较有用的如下: 需要在命令行通过解析器执行,则可以这样:

$python script.py

有时候经常看到py文件的开头这样写:

#!/usr/local/bin/python

因为,系统有时后不明确python的解析器。#!后面接的是Python解析器的完整路径,不过还有一个更好的方案,许多linux里有一个命令叫env,它可以帮助你找到解析器的路径,于是通常写成:

#!/usr/local/env python

这样写的好处是不用显式的调用python解析器,而是直接输入脚本名(有可执行权限):

$script.py

第二章 快速入门

本章快速讲解了python的概要,算是一个通读提纲。

第三章 Python基础

3.1语句和语法

  • #:python的注释符号
  • 如果要跨行写(包括python解释器中)有以下几种办法:
    • 换行分割(\)
    • 小括号,中括号,花括号(),{},
    • 三引号(` ` `)
  • 墙裂建议不要使用制表符,即Tab键
  • 分号和多数语言一样可以在同一行书写多个语句(墙裂不建议)

3.2变量赋值

  • python没有自增自减运算(如++x,x++)
  • 多重赋值:即x = y = z = 1是可以的
  • 多元赋值:即x,y,z = 1,2,'astring'
  • 无须中间变量交换两个变量的值:即x,y = y,x

3.3标识符

3.3.1合法的标识符:

  • 第一个字符必须是字母或下划线
  • 大小写敏感

3.3.2专用下划线标识符:(重点)

一共有四种情况:

1.object #public

2.__object__ #python系统内应用,比如__init__

3.__object #private,但是会在编译过程中name mangling。

4._object #python编码风格上标记为私有,注意,仅仅是人为标记,不会被 from module import *导入。

python中只有private和public,不像java,但是python的private不是严格意义上的private,还有方法可以在类外访问(name mangling)

name mangling:其实就是python编译器更改了__object的名字变为_class__object,所以在类外可以用_class__object调用。

总结:要用私有变量双下划线和但下划线均可,都可人为是私有的,但风格要保持一致!

3.4基本风格指南

通用模板:

#(1)起始行
#!/usr/bin/env python 
#----------------------------------doc-------------------------------------

#(2)模块文档
"this is a test module" 

#---------------------------------import-----------------------------------
#(3)模块导入
import sys 
import os
#-------------------------------------------------------------------------

#(4)全局变量定义
debug = True 

#(5)类定义
class FooClass(object): 
    "Fooclass"
    pass

#(6)函数定义
def test():
    "test function"
    for = FooCalss()
    if debug:
        print 'ran test()'

#(7)主程序
if __name__ == '__main__':
    test()
  • 绝大部分的模块创建的目的是为了别人调用而不是自己独立的脚本。
  • 通常只有主程序才有大量的顶级可执行代码,所有其他被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中。

说明一下__name__,刚开始最常遇到的但是搞不明白,这里主要是为了区分别的模块调用和直接执行的情况。

  • 如果模块是被导入的,则 __name__的名字是模块名
  • 如果模块时直接执行的,__name__的名字就是__main__

3.5内存管理

3.5.1python优点之一就是不像其他语言一样要优先声明变量,而可以直接赋值。

>>>x = 'haha'

3.5.2引用计数

这个很好理解了,python每建立一个变量,空间中就生成一个变量地址来存储这个变量,而赋值等操作会增加这个变量的引用,而对象被销毁时引用就会减少,当引用变为0的时候,解析器就知道这个变量成了垃圾,进行回收!

后面书上两个程序真是丧心病狂,列表推导式,异常都弄出了,暂时不看也罢。

还有一句比较有用

核心提示:如果在一个函数中频繁使用一个属性,建议为该属性取一个本地变量的别名,增快速度!