Python核心编程-基础

python编码风格指南:
www.Python.org/doc/essays/styleguide.html
www.Python.org/dev/peps/pep-0007/
www.Python.org/dev/peps/pep-0008/
www.Python.org/dev/peps/pep-0020/
www.Python.org/dev/peps/pep-0257/

井号(#):  表示之后的字符为 Python 注释
换行( ):      是标准的行分隔符(通常一个语句一行)
反斜线 ( ): 继续上一行
分号 ( ; ):     将两个语句连接在一行中
冒号 ( : ) :   将代码块的头和体分开
语句(代码块)用缩进块的方式体现
不同的缩进深度分隔不同的代码块
Python 文件以模块的形式组织

_xxx 不用'from module import *'导入
__xxx__ 系统定义名字
__xxx 类中的私有变量名
核心风格:避免用下划线作为变量名的开始
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避
免用下划线作为变量名的开始。一般来讲,变量名_xxx 被看作是“私有的”,在模块或类外不
可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对
Python 来说有特殊含义,对于普通的变量应当避免这种命名风格

(1)
起始行
通常只有在类 Unix 环境下才使用起始行,有起始行就能够仅输入脚本名字来执行脚本,无需直接调用解释器。
(2)模块文档
简要介绍模块的功能及重要全局变量的含义,模块外可通过 module.__doc__ 访问这些内容。
(3)模块导入
导入当前模块的代码需要的所有模块;每个模块仅导入一次(当前模块被加载时);函数内部的模块导入代码不会被执行, 除非该函数正在执行。
(4)变量定义
这里定义的变量为全局变量,本模块中的所有函数都可直接使用。从好的编程风格角度说,除非必须,否则就要尽量使用局部变量代替全局变量,如果坚持这样做,你的代码就不但容易维护,而且还可以提高性能并节省内存。
(5)类定义语句
所有的类都需要在这里定义。当模块被导入时 class 语句会被执行, 类也就会被定义。类的文档变量是 class.__doc__。
(6)函数定义语句
此处定义的函数可以通过 module.function()在外部被访问到,当模块被导入时 def 语句会被执行, 函数也就都会定义好,函数的文档变量是 function.__doc__。
(7) 主程序
无论这个模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码。通常这里不会有太多功能性代码,而是根据执行的模式调用不同的函数。

时刻记住一个事实,那就是所有的模块都有能力来执行代码。最高级别的 Python 语句--也就是说, 那些没有缩进的代码行在模块被导入时就会执行, 不管是不是真的需要执行。由于有这样一个“特性”,比较安全的写代码的方式就是除了那些真正需要执行的代码以外, 几乎所有的功能代码都在函数当中。再说一遍, 通常只有主程序模块中有大量的顶级可执行代码,所有其它被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中

对象中有一个切片对象

当使用 Python 扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片, 多维切片,及省略切片。多维切片语法是 sequence[start1 : end1,start2 : end2], 或使用省略号, sequence[...,start1 : end1 ]. 切片对象也可以由内建函 数 slice() 来 生 成 。步进切片允许利用第三个切片元素进行步进切片,它的语法为
sequence[起始索引 : 结束索引 : 步进值]

用法:

>> foostr = 'abcde'
>>> foostr[::-1]
'edcba'
>>> foostr[::-2]

'eca'
>>> foolist = [123, 'xba', 342.23, 'abc']
>>> foolist[::-1]
['abc', 342.23, 'xba', 123]

str(),repr()和``运算在特性和功能方面都非常相似, 事实上 repr() 和 `` 做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下可以通过求值运算(使用 eval()内建函数)重新得到该对象,但 str()则有所不同。str() 致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于 eval()求值, 但很适合用于 print 语句输出。需要再次提醒一下的是, 并不是所有 repr()返回的字符串都能够用eval()内建函数得到原来的对象

标准类型分类

数据类型 存储模型  更新模型   访问模型 l
数字    Scalar        不可更改    直接访问
字符串   Scalar        不可更改     顺序访问
列表    Container  可更改         顺序访问
元组    Container  不可更改     顺序访问
字典    Container  可更改         映射访问

Python 不支持方法或函数重载, 因此你必须自己保证调用的就是你想要的函数或对象。

== 比较是通过调用对象的__eq__方法进行比较,is 是通过比较地址是否相同。

 字符串模板: Template

输出时防止字符串被转义(r),用法就在是 '' 的第一个 ' 前面加上r

str.join()

Template.substitute(key=value)

list.append()

reversed()

sorted()

enumerate()

zip()

函数:

序列操作符
seq[ind]    获得下标为 ind 的元素
seq[ind1:ind2]    获得下标从 ind1 到 ind2 间的元素集合
seq * expr   序列重复 expr 次
seq1 + seq2  连接序列 seq1 和 seq2
obj in seq   判断 obj 元素是否包含在 seq 中
obj not in seq 判断 obj 元素是否不包含在 seq 中
切片操作符 ( [], [:], [::] )

list(iter)    把可迭代对象转换为列表
str(obj)     把 obj 对象转换成字符串(对象的字符串表示法)
unicode(obj)    把对象转换成 Unicode 字符串(使用默认编码)
basestring()  抽象工厂函数,其作用仅仅是为 str 和 unicode 函数提供父类,所以不能被实例化,也不能被调用(详见第 6.2 节)
tuple(iter)      把一个可迭代对象转换成一个元组对象

enumerate(iter)  接受一个可迭代对象作为参数,返回一个 enumerate 对象(同时也是一个迭代器),该对象生成由 iter 每个元素的 index 值和 item 值组成的元组(PEP 279)
len(seq)      返回 seq 的长度
max(iter,key=None) or 

max(arg0,arg1...,key=None) 返回 iter 或(arg0,arg1,...)中的最大值,如果指定了 key,这个 key 必须是一个可以传给 sort()方法的,用于比较的回调函数.

min(iter, key=None) or 

min(arg0, arg1.... key=None) 返回 iter 里面的最小值;或者返回(arg0,arg2,...)里面的最小值;如果指定了 key,这个 key 必须是一个可以传给sort()方法的,用于比较的回调函数.

reversed(seq)  接受一个序列作为参数,返回一个以逆序访问的迭代器(PEP 322)
sorted(iter,
func=None,
key=None,
reverse=False)   接受一个可迭代对象作为参数,返回一个有序的列表;可选参数func,key 和 reverse 的含义跟 ist.sort()内建函数的参数含义一样.
sum(seq, init=0)    返回seq和可选参数init的总和,其效果等同于reduce(operator.add,seq,init)
zip([it0, it1,... itN])  返回一个列表,其第一个元素是 it0,it1,...这些元素的第一个元素组成的一个元组,第二个...,类推

字符串格式化符号

格式化字符    转换方式
%c      转换成字符(ASCII 码值,或者长度为一的字符串)
%r a    优先用 repr()函数进行字符串转换
%s     优先用 str()函数进行字符串转换
%d / %i    转成有符号十进制数
%u b    转成无符号十进制数
%o b    转成无符号八进制数
%x b /%X b  (Unsigned)转成无符号十六进制数(x/X 代表转换后的十六进制字符的大小写)
%e/%E    转成科学计数法(e/E 控制输出 e/E)
%f/%F   转成浮点数(小数部分自然截断)
%g/%G   %e 和%f/%E 和%F 的简写
%%    输出%

格式化操作符辅助指令

符号    作用
*     定义宽度或者小数点精度
-     用做左对齐
+       在正数前面显示加号( + )
<sp>    在正数前面显示空格
#     在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
0     显示的数字前面填充‘0’而不是默认的空格
%      '%%'输出一个单一的'%'
(var)     映射变量(字典参数)
m.n    m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)


方法          描述

string.capitalize()    把字符串的第一个字符大写
string.center(width)   返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0,
end=len(string))     返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

string.decode(encoding='UTF-8'
,errors='strict')     以 encoding 指定的编码格式解码 string,如果出错默认报一个ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者
'replace'
string.encode(encoding='UTF-8',
errors='strict')     以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
string.endswith(obj, beg=0,
end=len(string))     检查字符串是否以 obj 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,默认的空格数 tabsize 是 8.
string.find(str, beg=0,
end=len(string))    检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.index(str, beg=0,
end=len(string))    跟 find()方法一样,只不过如果 str 不在 string 中会报一个异常.
string.isalnum()    R 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha()    如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal()   如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit()      如果 string 只包含数字则返回 True 否则返回 False.
string.islower()       如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric()      如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()      如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()       如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()      如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq)     Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width)   返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

string.lower()     转换 string 中所有大写字符为小写.
string.lstrip()      截掉 string 左边的空格
string.partition(str)   有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把字符串string分成一个3元素的元组(string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2,
num=string.count(str1)) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,
end=len(string))    类似于 find()函数,不过是从右边开始查找.
string.rindex( str, beg=0,
end=len(string))    类似于 index(),不过是从右边开始.
string.rjust(width)   返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str)   类似于 partition()函数,不过是从右边开始查找.
string.rstrip()      删除 string 字符串末尾的空格.
string.split(str="",
num=string.count(str))  以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
string.splitlines(num=string.count(' ')) 按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行
string.startswith(obj, beg=0,
end=len(string))    检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内

string.strip([obj])    在 string 上执行 lstrip()和 rstrip()
string.swapcase()    翻转 string 中的大小写
string.title()     返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.translate(str, del="") 根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
string.upper()     转换 string 中的小写字母为大写
string.zfill(width)    返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

字典的比较:
先比较个数,在比较key,在比较值。
字典的键
字典的将两个字典合并在一起  dict.update(dict2)

集合:

f = frozenset('badboy')
s = set('badboy')
print 'b' in s
s.add('z')
s.update('qwer')
s.remove('r')
s -= set('qwer')
s = s | set('qwer')
s = s & set('badboy')
s = s ^ set('qwer')
+不是集合类型的运算

方法名            操作
s.update(t)        用 t 中的元素修改 s, 即,s 现在包含 s 或 t 的成员
s.intersection_update(t)   s 中的成员是共同属于 s 和 t 的元素。
s.difference_update(t)      s 中的成员是属于 s 但不包含在 t 中的元素
s.symmetric_difference_update(t) s 中的成员更新为那些包含在 s 或 t 中,但不是s和 t 共有的元素
s.add(obj)        在集合 s 中添加对象 obj
s.remove(obj)       从集合 s 中删除对象 obj;如果 obj 不是集合 s 中的元素(obj not in s),将引发 KeyError 错误
s.discard(obj)       如果 obj 是集合 s 中的元素,从集合 s 中删除对象 obj;
s.pop()          删除集合 s 中的任意一个对象,并返回它
s.clear()          删除集合 s 中的所有元素

原文地址:https://www.cnblogs.com/badboyf/p/6054730.html