编程分为两大类:


面向对象:

以指令为中心,由指令处理数据.

如何组织代码解决问题.

面向过程:

以数据为中心,所有的处理代码都围绕数据展开.

如何设计数据结构组织数据,并提供对此类数据所允许处理操作.


platform 平台:

>>> import platform

>>> print platform.uname()

('Linux', 'web2', '2.6.32-431.el6.x86_64', '#1 SMP Fri Nov 22 03:15:09 UTC 2013', 'x86_64', 'x86_64')


dir 显示模块的内置函数.

>>> dir(platform)

['__builtins__', '__copyright__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_abspath', '_architecture_split', '_bcd2str', '_default_architecture', '_dist_try_harder', '_follow_symlinks', '_ironpython_sys_version_parser', '_java_getprop', '_jython_sys_version_parser', '_libc_search', '_lsb_release_version', '_mac_ver_gestalt', '_mac_ver_lookup', '_mac_ver_xml', '_node', '_norm_version', '_parse_release_file', '_platform', '_platform_cache', '_popen', '_release_filename', '_release_version', '_supported_dists', '_sys_version', '_sys_version_cache', '_sys_version_parser', '_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_test_parse_release_file', '_test_sys_version', '_uname_cache', '_ver_output', '_win32_getvalue', 'architecture', 'dist', 'java_ver', 'libc_ver', 'linux_distribution', 'mac_ver', 'machine', 'node', 'os', 'platform', 'popen', 'processor', 'python_branch', 'python_build', 'python_compiler', 'python_implementation', 'python_revision', 'python_version', 'python_version_tuple', 're', 'release', 'string', 'sys', 'system', 'system_alias', 'uname', 'version', 'win32_ver']


id()打印变量内存空间位置:

>>> num=2
>>> id(num)
28369696
>>> num=3
>>> id(num)
28369672

type 查看变量类型:

>>> num=3
>>> id(num)
28369672
>>> type(num)

>>> name="tom"
>>> type(name)

对象引用(变量)

内建函数type()用于返回给定数据项的数据类型

"=" 用于将变量名与内存中的某对象绑定:如果对象事先存在,就直接进行绑定;否则,则由"="创建引用对象.

>>> id(name)
139896314219616
>>> test="tom"
>>> id(test)
139896314219616


变量命名规则

1、只能包含字母、数字和下划线,且不能以数字开头

2、区分字母大小写

3、禁止使用保留字


命令管理

1、以单一下划线开头变量名(_X)不会被from module import *语句导入

2、前后有下划线的变量名(_x_)是系统定义的变量名,对python解释器有特殊意义

3、以两个下划线开头但结尾没有下划线的变量名(__x)是类的本地变量

4、交互模式下,变量名"_"用于保存最后表达式结果.

>>> 1+1
2
>>> print _
2


注意:变量名没有类型,对象才有

例如:name = "tom" name = 3.14 name是变量名,没有类型,有类型的是它引用的对象("tom",3.14)


组合数据类型:

Python常用的组合数据类型:

序列类型:

列表:使用[]创建,如['call','me','install']

元组:使用()创建,如('one','two')

字符串也属于序列类型

列表是可变对象,支持原处修改.

>>> a1 = ['this','is','a','pig']
>>> a1[0]
'this'
>>> a1[0][0]
't'

列表是可变对象:在原有的可以直接修改内存中的值.

>>> id(a1)
139896212570264
>>> a1[3]="apple"
>>> print a1
['this', 'is', 'a', 'apple']
>>> id(a1)
139896212570264

元组是不可变对象:

>>> b1=("this","is")
>>> b1[1]
'is'
>>> b1[1]="a"
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'tuple' object does not support item assignment

字符串切片:最后一个单位不被显示.

>>> name = "herry"
>>> name[0:1]
'h'
>>> name[0:2]
'he'
>>> name[:2]
'he'
>>> name[2:]
'rry'
>>> name="jerry"
>>> name[:4:2]从0开始可以不写,到第4个值,步进为2,每次跳过两个值
'jr'

实质上列表和元组并不直接存储数据,而是存放对象引用.


变量的长度可以使用len()测量:

>>> name = "herry"
>>> len(name)
5

Python的4种逻辑操作符

身份操作符:

is:判断左端对象引用是否相同于右端对象引用;也可以与none进行;

>>> type(name) is type(test)True
>>> name="TOm"
>>> test="jerry"
>>> name is test
False

比较操作符:

< > <= >= != ==

成员操作符:

in或not in,测试成员关系

逻辑运算符:

and、or、not


Python常见的控制流语句:

if

while

for...in...

try


Python提供了完整的算数操作集

很多的python数据类型也可以使用增强的赋值操作符,如+=、-==等;

同样的功能,使用增强型赋值操作符性能比较好。

Python的int类型时不可变的,因此,增强型赋值的实际过程时创建了一个新的对象来存储结果后将变量名执行了重新绑定.


Python的输入/输出

输出:

Python3:print()

Python2:print语句


输入:

input()

raw_input()

>>> raw_input("please input a num:")
please input a num:1
'1'

print接受一个逗号分割的对象列表,并为行尾自动添加一个换行符,如果不需要,则在最后一个元素后添加逗号.

>>> a=1
>>> b=2
>>> v=3
>>> print a,b,v
1 2 3

数据类型转换:

>>> name="jerry"
>>> print "the name is %s" % name
the name is jerry
>>>

类型转换方法:

>>> name="tom"
>>> name.upper()
'TOM'

输入/输出修饰符

下面标志中的一个或多个

-:表示左对齐

+:表示包含数字符号,正数也会带

0:表示一个零填充.


一个指定最小宽度的数字

一个小数点,用于按照精度分割字段的宽度

一个数字,指定要打印字符串中的最大字符个数,浮点数中小数点之后的哪个位数,或者证书的最小位数.


字典就是键值对的集合

>>> al={'a':21,'b':32}
>>> al["a"]
21

字符串的引用是要加""号的,但是数字的引用时不需要的.

>>> a1={1:21,2:32}
>>> a1[1]
21

函数的创建与调用

Python使用def语句定义函数

函数可以参数化,通过传递不同的参数来调用

每个Python函数都有一个返回值,默认为None,也可以使用"return value"明确定义返回值

def语句会创建一个函数对象,并同时创建一个指向函数的对象引用


函数也是对象,可以存储在组合数据类型中,也可以作为参数传递给其他函数

callable()可用于测试函数是否可调用.


定义函数printName,传入参数name,主要做打印name参数;

def printName(name):
    print name

使用printName函数.由于lisi是字符串,所以要加上引号.

printName("lisi")

由于test时变量,所以不需要加引号.

def printName(name):
    print name
test="tom"
printName(test)

callable测试一个内存对象是否可被调用.

>>> def printName(name):
...     print name
... 
>>> callable(printName)
True

python有众多内置函数,可以使用查看.

>>> dir(__builtins__)

查看帮助help(range),step步进值.

range(...)
    range([start,] stop[, step])

生成序列:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

最后一位默认不显示,显示到前一位.

>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

生成随机数的:

>>> import random
>>> random.random()
0.056007492238391188

random.choisc 从列表中随机选择一个:

import random
s=['a','b','c','d']
t=random.choice(s)
print t

注释:

#: 可以从一行的任何地方开始

续行:

\:

''':闭合操作符,单一语句跨多行

;做行分隔符,同一行放置多个语句.


python标示符:

第一个字符只能使用字母或者下划线

余下的字符可以使用字母、数字、下划线

区分字符大小写


python基本变成风格

注释

既不能缺少注释,亦要避免过多注释

文档

python允许通过_doc_动态获取得文档字串

缩进

统一缩进4个字串

标示符名称:

见名知义

python命名管理:

1、以单一下划线开头的变量名不会被from module import * 语句导入

2、前后有下划线的变量名(_x_)是系统变量名,对解释器有特殊意义

3、以两个下划线开头、但结尾没有下划线的变量名(__x)是类的本地变量.


主程序:

无论当前模块是被别的模块导入还是直接执行,都会执行这部分代码.


注意:所有的模块都有能力执行代码


最高级别的python语句(没有缩进的)在模块被导入时就会执行,无论是否真的需要执行.

妥当的做法:除了那些真正需要执行的代码以外,所有的功能代码都通过函数建立.

仅在主程序模块中编写大量的顶级可执行代码.

用于被导入的模块只应该存在较少的顶级执行代码.


__name__指示模块应该如何被加载:

如果模块时被导入的,__name__的值时模块的名字.

如果模块时直接执行,__name__的值时'__main__'.