1.基础概论
Python是一种解释型,面向对象的,带有动态语义的高级程序设计语言。
运行不像编译语言那么快,但是可以用C实现制约性能的关键部分,让他们和Python编写部分相互协作。
python交互式解释器;ctrl+D退出解释器
交互式python shell:Python集成开发环境(Python Integrated Development Environment IDLE),只要运行Python GUI就可以进入,按键F1或者选择help-python docs进入python文档
>>>:python提示符
命令行版本采用^指明错误
输入help获得帮助
Python除法:实数(浮点数float)进行运算,只要有一个数是浮点数,结果就是浮点数/Python改变除法执行方式,执行普通除法,程序前面加上如下:
from __future__ import division
//:实现整除的操作
%:取余(每10分钟xx,就可以采用取余运算%10 结果是否为0)
**:幂(乘方)运算符
长整数和整数可以混合使用,除非需要类型检查
十进制和八进制首位数字都是0
=:就是将数值赋值给了变量,或者说是变量绑定到了数值上面
变量名:包括字母,数字下划线,不能以数字开头
表达式是某件事情,语句就是做某件事情,语句改变了事物
Python3以后,print()成为函数
pow():计算幂,乘方,这类标准函数成为内建函数
abs():数的绝对值
round():浮点数四舍五入转为整数
floor():向下取整;ceil():向上取整
sqrt():计算平方根,cmath.sqrt():处理负数平方根
import:把模块想象成导入到python的扩展,然后使用模块.函数格式使用模块的函数,事实上,可以采用foo=math.sqrt()进行赋值,然后采用foo进行计算;而使用from math import sqrt形式时候,直接使用函数不用模块作为前缀。
类型转换不是普通的函数,它们是类型对象(type object)
nan:not a number
除非真的需要form形式模块导入语句,负责坚持使用普通import
Python提供了对复数的支持
#!:pound bang/shebang,其后加入用于解释脚本程序的绝对路径,如下:#!/usr/bin/env python
#!/usr/bin/python2,具体路径和系统有关,然后运行方式:chmod a+x hello.py hello.py或者./hello.py
hello.pyw:windows上专用文件类型
\:对字符串引号转义,单引号就是字符串字符,而不是结束标记
str函数:把值转换为合理形式字符串,repr函数:创建一个字符串,合法的python形式表示值;
str,repr,反引号都是将python值转换为字符串,str使得字符串更易于阅读,repr和反引号转换为合法的python表达式;
raw_input,input:前者会把所有输入当做原始数据,然后放入字符串中,后者要求用户输入字符串,所以坚持使用前者;
长字符串:三个引号代替普通引号,可以在字符串之中同时使用单引号和双引号,不需要反斜线转义
一行之中最后一个字符反斜线,换行符本身就转义,也就是被忽略了;
原始字符串:以r开头,可以放入任何字符
2.列表和元组
数据结构就是通过某种方式组织在一起的数据元素的集合,这些数据元素可是是数字或者字符,甚至可以是其他数据结构;
sequence序列:列表和元组,元组除了不能更改以外,其他性质和列表都类似
内建序列:列表和元组,字符串,Unicode字符串,buffer对象和xrange对象
序列操作:索引(indexing),分片(slicing),加(adding),乘(multiplying),以及检查某个原色是否属于序列成员(成员资格),计算序列长度,找出最大元素,最小元素内建函数;
索引:
字符串就是一个由字符组成的序列,索引0指向第一个元素;
字符串字面值能够直接使用索引,而不需要一个变量引用他们;
可以直接对返回结果进行索引操作;
分片:
访问一定范围内元素,分片通过冒号隔开两个索引来实现;
分片操作对于提取序列一部分很有用,第一个索引是要提取的第一个元素编号,最后的编号是分片以后剩余部分的第一个元素,总之,分片操作就是提供两个索引作为边界,第一个索引包含在分片内,第二个不包含在分片内;
只要分片左边序列比右边序列晚出现,就是空序列,所以,如果分片部分包含结尾元素,只需要置空最后一个索引;
复制整个序列时候,将两个序列都置空;
步长:分片操作就是按照这个步长进行逐个遍历序列元素,然后返回开始和结束处所有元素;
如果需要将每x个元素第一个提取出来,只需要步长设置为x就可以;
步长设置为负数,分片将从右向左提取元素nunber[8:3:-1],必须让开始点索引大于结束点;
对于一个正数步长,会从序列头部开始向右提取元素直到最后元素,对于负数步长,从序列尾部开始向左提取元素直到第一个元素;
序列相加:
形同类型的序列才能进行连接操作;
乘法:数字x乘以一个序列,新生成的序列为原来的序列被重复x次;
空列表通过两个中括号表示,里面什么东西都没有;
None内键值:含义是什么都没有;
成员资格:
in运算符:检查条件是否为真,为真返回true,为假返回false,返回的值叫做布尔值;检查字符是否在字符串中,检查序列是否在列表中;
长度,最小值,最大值:
len():返回序列中元素数量,min():返回最小数值,max():最大值;max和min函数的参数并不是一个序列,而是多个数字直接作为参数;
list():根据字符串创建列表,适用于所有类型的序列,不只是字符串;
‘’.join(somelist):将一个由字符串组成的列表转换为字符串,somelist为需要转换的列表;
分片赋值:一次为多个元素赋值;可以使用与原序列不等长的序列分片替换;可以在不需要替换任何原有元素的情况下插入新的元素;
方法:就是和对象密切联系的函数,对象可以是列表,数字,字符串,调用方式:对象.方法(参数);
extend和连接区别:前者修改了被扩展的序列,后者返回一个全新的列表;
index():从列表中找出某个值第一个匹配项的索引位置;
pop():移除列表中的一个元素,默认最后一个,同时返回该元素值;
remove():移除列表中某个值的第一个匹配项;
sort():原位置对列表排序,意味着改变原来的列表,而不是简单的返回一个排序的列表副本;
y=x[:]:得到包含x所有元素的分片,一种很有效率的复制整个列表的方法;y=x:只是简单赋值,这样就让x,y指向同一个列表了;
元组:
创建元组逗号分割值,就自动创建了元组;大部分通过圆括号表示;实现一个值的元组,需要加逗号;
tuple():序列作为参数转为元组;
字符串:
所有序列操作(索引,分片,乘法,判断成员资格,求长度,最大值最小值),对于字符串同样适用;
字符串格式化适用字符串格式化操作符即%实现;左侧放置一个字符串(格式化字符串),而右侧放置希望被格式化的值;如果使用列表和其他序列代替元组,序列就会被解释成一个值,只有元组和字典可以格式化多个值;
%s:转换说明符,标记了需要插入转换值的位置,s表示会被格式化为字符串;因为格式化说明符总是以表示类型的字符结束,所以精度应该放在类型字符前面;如果要在字符串里面包含%,必须使用%%,这样python就不会将百分号认为为转换说明符了;
如果右侧操作数是元组的话,其中的每一个元素都会被单独格式化,每个值都需要对应一个转换说明符;如果需要转换的元组作为转换表达式的一部分存在,必须使用圆括号括起来;
find():查找子串,返回最左侧索引;,如果没有返回-1;这个方法还可以接受起始点和结束点参数,但是包含起始点不包含结束点,python的惯例;in只能用来查找单个字符;
join():连接字符串,连接的元素必须是字符串;,‘/’.join(dirs);
lower():返回字符串小写字母版;title()和capwords()把单词首写字母大写;
replace():返回字符串的所有匹配项被替换之后得到的字符串,类似于查找和替换;
split():将字符串分割成序列,如果不提供分隔符,程序会把所有空格作为分隔符;
strip():出去两侧空格的字符串;也可以指定去除的字符串,将他们作为参数就可;和lower结合可以对比输入和存储的值;
translate():只处理单个字符替换,但是可以同时进行多个替换;
映射(mapping):
字典是python唯一内建映射类型;字典中的值并没有特殊的顺序,但是都存储在唯一特定的键key下,键可以是数字,字符串,元组;
实质就是通过查找特定的词语(键),来找出他的定义(值);
字典创建通过{}创建,由多个键和对应的值,键值对组成,每个键和值之间用:隔开,项之间用,分开,整个字典使用一对大括号括起来;空字典由两个大括号组成;
字典中的键是唯一的,而值是不唯一的;
dict():通过其他映射或者(键,值)对的序列建立字典;也可以通过关键字参数建立字典;
字典中检查键的成员资格比在列表中检查值的成员资格高效;
键是任意不可变类型;
字符串格式化说明符:右侧使用字典而不是元组,后面加上键(用圆括号括起来),后面再跟上其他说明元素;这种字符串格式化在模板系统很有用,string.Template类;
clear():清除所有项,无返回值或者说返回none;
copy():返回一个相同的键值对的新字典;
formkeys():使用给定的键值建立新的字典,每个键对应一个默认的值none;dict是所有字典的类型,采用dict.formkeys([xx,xx]);如果不想采用默认值,可以提供参数作为默认值;
get():访问字典中的项;访问一个不存在的键时,没有任何异常,而得到none值,可以定义默认值,替换none(d.get('name','N/A'));如果键存在就像普通的字典查询一样;
hash_key():检查字段中是否含有特定的键;d.hash_key(k)相当于表达式k in d;
items():将字典的所有项按照列表的形式返回,列表中的每一项都表示(键,值)对的形式,但是项在返回的时候没有遵循特定顺序;iteriems()方法类似,但是返回的是一个迭代器对象而不是列表;
keys():将字典中的键以列表的形式返回,iterkeys则是返回针对键的迭代器;
pop():获取给定键的值,然后将这个键值对从字典移除;
popitems():一个接一个移除项从字典中;
setdefault():获得与给定键关联的值;还能再字典中不含有给定键的情况下设置相应的键值;
update():利用一个字典更新另外一个字典;提供字典的项目会被添加到旧的字典中,如果有相同的键进行覆盖;
values():以列表的形式返回字典中的值,itervalues():返回值的迭代器;返回值的列表可以包含重复的元素;
对象:
object看做是数据(特性)以及由一系列可以存取,操作这些数据的方法组成的集合;
多态:不同类的对象使用同样的操作;
封装:对外部隐蔽对象的细节;
继承:通用的类为基础建立专门的类对象;
所有子类的所有实例都有这些方法,定义子类只是,也有可能重载,定义更多的方法的过程;