Python基础篇之过程型程序设计

一、Python过程型程序设计

面向过程
以指令为中心,由指令处理数据
如何组织代码解码问题
面向对象
以数据为中心,所有的处理代码都围绕数据展开
如何设计数据结构组织数据,并提供对此类数据所允许处理操作
简单方法:
1)、编译安装新版本至某特定路径
# yum install readline-devel
# tar xf Python-2.7.6.tar.xz
# ln -sv Python-2.7.6 python27
# cd python27
# ./configure --prefix=/usr/local/python27
# make && make install
# tar xf ipython-1.2.1.tar.gz
# cd ipython-1.2.1
# /usr/local/python27/bin/python27 setup.py build
# /usr/local/python27/bin/python27 setup.py install
2)、pyenv
1、python的关键要素
基本数据类型
对象引用
组合数据类型
逻辑操作符
控制流语句
算术操作符
输入/输出

函数创建和引用

2、字串是一个组合,可以只引用一个变量,是不可变类型
使用type()获取函数的类型
使用id()获取内存的位置
使用dir()获取模块的子命令
使用len()获取元素内部的个数
使用help()获取函数详细信息
dir(__builtin__)可以查看内建的函数
callable()可用于测试函数是否可以调用
每个模块都有一个名为__name__的内建变量,此变量值会根据调用时
如果模块被导入,__name__的值是模块的名字
如果模块被直接执行,__name__的值是“__main__”

二、python对象类型及其运算

程序中存储的所有数据都是对象

每个对象都有一个身份,一个类型和一个值

实例被创建之后,其身份和类型就不可改变

如果某个对象包含对其他对象的引用,则将其称之为容器

class:通常在自定义类型是使用

type:内置变量
instance:实例化
类:数据和方法
数据:变量
方法:函数
类:实例化成对象
两个对象的比较:
1).值比较:对象中的数据是否相同
2).身份比较:两个变量名引用的是否为同一对象
3).类型比较:两个对象的类型是否相同
1、核心数据类型
数字:int,long,flocat,complex,bool
字符:str,unicode
列表:list
字典:dict
元组:tuple
文件:file
其他类型:集合(set),frozenset,类类型,空(None)
其他文件类工具:管道(pipes),先进先出管道(fifos),sockets
2、类型转换:
str(),repr()和format():将非字符型数据转换为字符
str:做对象序列化的结果,强制转换
repr:做精确转换,不转换元对象
int():转换成整数
float():转换成浮点型
list(s):将字串s转换成列表
tuple(s):将字串s转换成元组
set(s):将字串s转换为集合
frozenset(s):将字串s转换为不可变集合
dict(d):根据指定的键值对创建字典,其中d必须是(key,value)的元组序列
chr(x):将整数转换为字符
ord(x):将字符转换为整数值
hex(x):将整数转换成16进制字符
bin(x):将整数转换成2进制字符
oct(x):将整数转换成8进制字符
3、数字类型:                                                不可变类型
python的数字字面量:布尔型,整数,浮点型,负数
True:1
False:0
支持算术操作,比较操作                                                                   math模块可以实现算术的高级运算
4、序列类型:
1)字符类型
字符串字面量:把文本放入单引号、双引号或三引号中:前后要一致
如果要使用unicode编码,则在字符之前使用字符u进行标识,如u“mageedu”
文档字符串:模块、类或函数的第一条语句是一个字符的话,该字符串就成为文档字符串,可以使用__doc__来引用
运算符:
索引运算符:[i]可以使用负数,即倒着取值
切片运算符:[i:j]
扩展切片:[i:j:stride]
支持运算
索引,切片,min(),max(),len()等
支持操作

对象自有的操作

2)列表
容器类型                   [ ]
            任意对象的有序集合,通过索引访问其中的元素,可变对象
            异构,任意嵌套
支持在原处修改:
              修改指定的索引元素,修改指定的分片,删除语句,内置方法
              l1 + l2:合并两个列表,返回一个新的列表,不会修改原列表
              l1 * n:把l1重复N次,返回一个新列表
              in:成员关系判断字符,用法 obj in container
              not in: obj not in container
列表解析:[]
列表复制方法:
             l1=[1,2,3,4]
浅复制
              l2=l1
深度复制
              import copy
               l2=copy.deepcopy(l1)
               l2=l1[:]
3)元组
表达式符号:()
容器类型
任意对象的有序集合,通过索引访问其中的元素,不可变对象,长度固定
支持异构,嵌套
常见操作:
()
(1,)
(1,2)
t1 + t2
t1 * n
in:
not in:
虽然元组本身不可变,但如果元组内嵌套了可变类型的元素,那么此类元素的修改不会返回元组
4)字典:dict
字典在其他编程语言中又称为关联数组或散列表
通过键实现元素存取,无序集合,可变类型容器,长度可变,异构,嵌套
{key1:value1,key2:value2,….}
{}:空字典
字典复制:d2=d1.copy()

d1.iteritems:返回一个迭代器对象

5)集合:无序排列的可以hash的值
支持集合关系测试:
成员关系测试:
in:
not in:
迭代
不支持:索引、元素获取、切片
集合的类型:set(),frozenset()
没有特定的语法格式,只能通过工厂函数创建
可以使用l1=set([1,2,3,4])
6)容器、类型、对象
(1).列表,元素,字典可以跨行定义,最后一个允许使用逗号
(2).所有对象都有引用计数,可以使用sys.getrefcount查看引用次数,使用del删除一个计数引用
(3).列表、字典都支持浅复制和深复制:深复制的方法可以使用copy模块中的deepcopy()实现
(4).python中的所有对象都是“第一类的”,这意味着使用标识符命名的所有对象具有相同状态,于是,能够命名所有对象都可以直接当数据进行处理
(5).所有序列(所有非负整数的有序集合)都支持迭代
(6).所有序列都支持的操作和方法:
s[i]:
s[i:j]:切片
s[i:j:stride]
len(s):长度
max(S)
sum(s)
all(S):所有为true
any(s):任意项为true
s1 + s2:连接
s1 * n:重复
obj in s1:成员关系判断
obj not in s1
(7).可变序列的操作
s1[index] = value:元素赋值
s1[i:j] =t :切片赋值
del s1[index]:删除元素
del s1[i:j]:删除求片
del s1[i:j:stride]

三、Python的表达式和语句

 表达式:由一个或多个操作数以及操作符所组成的序列
语句:用来实现的操作,常见的操作有声明变量
1、python中的常用的表达式操作符:
x * y ,  x /y ,   x+y ,    x-y ,  x//y,        x%y
逻辑运算:
x or y, x and y, not x
成员关系运算:
x in y , x noy in y
对象实例测试
x is y x not is y
比较运算:
x < y,x > y x <= y,x >= y,x == y,x != y
位运算:
x|y x& y x^y x<<y,x>>y
一元运算:
-x,+x,~x
幂运算:
x ** y
索引和分片
x[i],x[i:j],x[i:j:stride]
调用
x(….)
取属性:
x.attribute
元组:(….)
序列: […]
字典:{…}
三元选择表达式:x if y else z
匿名函数: lambda args:expression
生成器函数发动协议: yield x
运算优先级:
(….),[….],{…..}
s[i],s[i:j]
s.attribute
s(….)
+x,-x,~x
x**y
* / // %
+ —
<< >>
&
^
|
< <= > >= == !=
is not is
in not in
not
and
or
lambda
2、语句:
赋值语句
调用
print:打印对象
if/elif/else:条件判断
for/else:序列迭代
while/else:普通循环
pass:占位符
break:
continue
def
return
yield
global:命名空间
raise:触发异常
import:
form:模块属性访问
class:类
try/except/finally:捕获异常
del:删除引用
assert:调试检查
with/as:环境管理器
赋值语句:
          隐式赋值:import,from,def,class,for,函数参数
          元组和列表分解赋值,当赋值符号(=)的左侧为元组或列表时,python会按照位置把右边的对象和左边的目标  自左向右逐一进行配对,个数不同时会出异常,此时可以进行切片处理
          多重目标赋值
         增强赋值:+=,-=,*=,/=,//=,%=,
3、条件测试:
3.1 if 条件测试表达式
python中的真假:
1.任何非0数字和非空对象都为真
2.数字0、空对象和特殊对象None都为假
3.比较合相等测试会递归地应用于数据结构中
4.返回值为True或False
组合条件测试
X and Y:与运算
X or Y :或运算
not x: 非运算
A=X if Y else Z
if Y:
A=X
else:
A=Z
3.2while语句:
  while bool_expression:
  while_suite
  else:
  else_suite
  break:跳出最内层的循环
  continue:跳到所处的最近层循环的开始处
  pass:点位语句
  else代码库:循环正常终止才会执行,如果循环终止是由break跳出导致的,则else不会执行
  while true:死循环
3.3  for语句
  for  exprssion in object:
  while_suite
  if boolean_esprssion2:contine
  if boolean_esprssion3:break
  else
  else_suite

四、文件对象:

文件都是字节序列
var_name = open (file_name[mode,[bufsize]])
mode: r   w    a      r+     w+       a+
b表示已二进制模式打开文件
rb
wb
ab
rb+
wb+
ab+
[bufsize]缓存:
0表示不使用缓存
负数表示使用系统默认的缓存
1表示使用缓存
整数表示使用大小的缓冲区
file.seek(offset[whence])
whence:起点
0:从文件头
1:从当前位置
2:从文件尾
offset:偏移量
文件系统模块:os
目录:
chdir():切换工作目录
chroot():设定当前进程的根目录
listdir():列出指定目录下的所有文件名
mkdir():创建指定目录
makedirs():创建多级目录
getcwd():获取工作目录
rmdir():删除目录
removedirs():删除多级目录
文件:
mkfifo():创建管道
mknod():创建设备文件
remove():删除文件
unlink():删除链接文件
rename():重命名
stat():放回文件的状态信息
symlink():创建符号链接文件
utime():更新时间戳
tmpfile():创建并打开(w+b)一个新的临时文件
walk():创建目录树

访问权限相关的
access():检验某个用户或用户组的权限模式
chmod():修改权限
chown():修改属主和属组
umask():设置默认权限模式

文件描述符:
open():底层操作系统的open()
read():
write():

设备文件:
makedev():
major():获取主设备号
minor():获取次设备号
路径管理:
import os.path

basename():路径基名
dirname():路径目录名
join():整合文件名
split():返回dirname(),basename()元组
splitext():返回(filename,extension)元组

信息:
getatime():最近访问时间
getctime()
getmtime()
getsize():返回文件的大小

查询
exists():判断指定文件是否存在
isabs():判断指定的路径是否为绝对路径
isdir():是否为目录
isfile():是否为文件
islink():是否为符号链接
ismount():是否为挂载点
samefile():两个路径是否指向了同一个文件

练习:判断文件是否存在,存在则打开,让用户通过键盘反复输入多行数据追加保存至此文件中
#!/usr/bin/python

import os
import os.path
filename=raw_input('plz a file name:')
if os.path.isfile(filename):
    openname= open(filename,'a+')
while True:
    newline=raw_input('plz a line:')
    if newline == 'q' or newline =='quit':
         break
    else:
        openname.write(newline+'\n')
openname.close()
对象持久存储
pickle

marshal

五、python的正则表达式:

元字符
.
[.....]
[^.....]
?:匹配字符0次或1次
+:匹配自符1次以上
{m}
{m,n}
{0,n}
{m,}
^:行首锚定
$
pat1|pat2
(.....):分组
\b
[0-9]:\b:任意数
[0-9a-zA-Z]:\w,\W对\w取反
\s:任意空白字符,[\n\t\f\v\r],\S
\nn:后向引用
(*|+|?|{})?:使用非贪婪模式
match对象:
可以指定起始位置,结束位置,匹配到的字符等
search只返回第一次匹配到的结果
re.search:返回一个macth对象
flags:
I或IGNORECASE:忽略字符大小写
M或MULTILINE:多行匹配
A或ASCII:仅执行8位ASCII码匹配
U或UNICODE:

六、Python函数

return返回值类型:
效果:只能返回一次值,终止函数的执行
无return 默认 None;     return返回值:如果只有一个则返回本身,多个值则为元组形式
参数传递形式
位置参数:从左向右
关键字参数:按关键名称匹配
        混用上面两种方式时,所有位置参数,所有的关键字参数
定义函数时使用默认参数:有默认值的参数
        混用有默认和无默认值的参数时,无默认值的应该放在前面
调用函数时使用可变参数要求:
        使用*:收集位置参数

        使用**:收集关键字参数

python闭包:闭包叫lexical closure
函数中使用yield,会返回一个生成器对象
装饰器:
1.装饰器本身是一个函数 ,用于装饰其他函数
2.功能:增强被装饰函数的功能
装饰器一般接受一个函数对象作为参数,
使用@调用函数
def deco(func):
    def wrapper():
        print "please say something: "
        func()
        print "no zuo no die"
    return wraaper
@deco
def show():
    return "somethings."
递归:
递归需要边界条件,递归前进段和递归返回段
函数的设计规范
耦合性
       1.通过参数接受输入,已经通过return产生输出以保证函数的独立性
       2.尽量减少使用全局变量进行函数间通信
       3.不要再函数中修改可变类型的参数
       4.避免直接改变定义在另外一个模块中的变量
集合性
       1.每个函数都应该有一个单一的、统一的目标
       2.每个函数的功能都应该相对简单
更多内容可见:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/91022

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班