Python基础知识学习笔记

转自:http://blog.csdn.net/wanghaoxi3000/article/details/51772039

http://blog.csdn.net/wanghaoxi3000/article/details/51813520

初级输入输出

通过print来输出
通过内建函数raw_input()来输出一行提示同时记录输入


列表和元组

列表和元组能保存任意数量的Python对象, 列表使用[]包裹, 元组使用()包裹.
列表的个数和元素值可以改变, 元组则不可更改(内容可变)

索引取值

可用索引运算符[]和切片运算符[:]来得到子字符串
索引:0开头,-1最后字符

列表可用range()接收一个数值范围来生成列表

for eachNum in range(3):
    ...print eachNum
  • 1
  • 2
  • 1
  • 2

配合len()来显示索引值

for i range(len(foo)):
    print foo[i], ('%d') % i
  • 1
  • 2
  • 1
  • 2

enumerate()同时循环元素和索引

for i, ch in enumerate(foo)
    print ch, '(%d)' % i
  • 1
  • 2
  • 1
  • 2

列表解析, 在一行中使用一个for循环将所有值放到一个列表

squared = [x ** 2 for x in range(4)]
    for i in squared
  • 1
  • 2
  • 1
  • 2

字典

由建-值(key-value)对构成, 使用{}包裹来定义


打开文件

open(filename, access_mode)
access_mode: 读取r 写入w 添加a 读写+ 二进制访问b


函数

函数调用前必须先定义. 没有return语句会自动返回None对象
参数通过引用调用, 参数的改变会影响到原始对象, 但只有可变对象会受此影响

函数定义, 小括号不可省略

def function(arguments):

默认参数

def foo(debug=True)


类的定义

class ClassName(base_class[es]):    #class关键字定义类, 可提供一个可选的父类或者基类, 没有就默认使用object作为基类
    "optional documentation string" #文档字符串
    static_member_declarations      #静态成员变量
    method_declarations             #方法定义
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

init()方法

当一个类实例被创建后, init()会自动执行, 类似构建函数, 但不像其它语言中会创建实例, 仅仅是创建后执行的第一个方法

self

类实例自身的引用. 类似其它语言中的this的标示符


模块

模块是一种组织形式, 是一个个包含可执行代码, 函数和类或这些东西的组合
当创建了一个python源文件, 模块名字就是不带.py后缀的文件名

导入模块

import module_name
导入完成后, 一个模块的属性(函数和变量)就可以通过.标识来访问

赋值

python中赋值语句不会有返回值

x = 1
y = (x = x + 1) #非法语句
  • 1
  • 2
  • 1
  • 2

链式赋值

y = x = x + 1

多元赋值,

x, y, z = 1, 2, 'string'      #采用此方式时, 等号两边都是元组
(x, y, z) = (1, 2, 'string')  #等同于此句
  • 1
  • 2
  • 1
  • 2

变量交换应用

x, y = 1, 2
x, y = y, x
  • 1
  • 2
  • 1
  • 2

专用下划线标示符

python用下划线作为变量缀和后缀指定特殊变量

_xxx 不用’from module import *’导入
xxx 系统定义的名字
__xxx 类中私有的变量名


代码布局

  1. 起始行 类Unix环境下使用
  2. 模块文档 可通过module.doc来访问
  3. 模块导入
  4. 变量定义
  5. 类定义语句
  6. 函数定义语句
  7. 主程序 无论是被别的模块导入还是作为脚本直接执行, 都会执行这部分代码

name指示模块应如何被加载

如果是被导入, name值为模块名字
如果是被执行, name值为’main
if __name__ == '__main__'
mian() #判断被导入还是执行来决定是否调用main()


在主程序中书写测试代码

模块理论上永远不会被直接直接执行, 因此在这个模块直接执行时进行系统测试. 利用name将测试代码写入main()中,若该模块被当成脚本运行, 就调用这个函数


引用计数

Python中内存由解释器管理, 当一个对象被创建时, 就创建了一个引用计数, 当这个对象引用计数变为0时, 它就被垃圾回收

增加引用计数的情况

  • x = 3.14 对象被创建
  • y = x 以另外的别名被创建
  • foobar(x) 作为参数传递给函数
  • myList = [123, x, ‘xyz’] 成为容器的一个对象

引用计数减小的情况

  • 本地引用离开了作用范围, 如一个函数结束, 其中局部变量被释放
  • del y 被显式的销毁
  • x = 123 对象的一个别名被赋值给其它的对象
  • myList.remove(x)对象被从一个窗口中移除
  • del myList 窗口对象本身被销毁

相关模块和开发工具

  • Debugger: pdb 调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试
  • Logger: logging 定义了一些函数和类帮助你的程序实现灵活的日志系统, 共有五级日志级别: 紧急, 错误, 警告, 信息和调试
  • Profilers: profile, hotshot, cProfile 性能测试器