Python简介

1.Python的说明:

  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言;
  • Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码;
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术;
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏;

2.Python的版本区别:初学者直接使用Python3即可

  • Python2:
  • Python3:

Python的基本语法

1.编程方式:

  • 交互式编程:交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码;
  • 脚本编程:通过脚本参数调用解释器开始执行脚本,直到脚本执行完毕。当脚本执行完成后,解释器不再有效,Python的后缀名一般以py结尾;

2.行和缩进:Python不使用{}来进行逻辑包裹,而是使用缩进来进行编写模块,缩进的空白数必须严格执行;

3.多行语句:

  • Python语句中一般以新行作为语句的结束符,但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下1所示;
  • 语句中包含 [], {} 或 () 括号就不需要使用多行连接符。如下2实例;
  • Python同一行显示多条语句是可以用;作为分割的,这和其他语言语法一致;
    1.示例一
    total = item_one + \
            item_two + \
            item_three
            
    2.示例二
    days = ['Monday', 'Tuesday', 'Wednesday',
            'Thursday', 'Friday']

4.Python引号:Python 可以使用引号( ‘ )、双引号( “ )、三引号( ‘’’ 或 “”” ) 来表示字符串,引号的开始与结束必须是相同类型的,其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释;

1.示例一
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""

5.Python注释:

  • 单行注释使用#;
  • 多行注释使用”””或者’’’;

6.Python空行:函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始,空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。(记住:空行也是程序代码的一部分)

7.用户输入和输出:

  • 输入:该语句 raw_input(“按下 enter 键退出,其他任意键显示…\n”),其中\n 实现换行。一旦用户按下 enter(回车) 键退出,其它键显示;
  • 输出:print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 ,;

Python变量类型

基本变量类型说明

1.Numbers(数字):

  • 包括了int、long、float、complex类型;
  • 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象,当你指定一个值时,Number 对象就会被创建;
  • 可以使用del语法进行删除引用;

2.String(字符串):

  • 由数字、字母、下划线组成的一串字符;
  • python的字串列表有2种取值顺序,从左到右索引默认0开始的,最大范围是字符串长度少1,从右到左索引默认-1开始的,最大范围是字符串开头;
    -以下 实例一是对字符串的一些操作;
    1.示例一
    str = 'Hello World!'
     
    print str           # 输出完整字符串
    print str[0]        # 输出字符串中的第一个字符
    print str[2:5]      # 输出字符串中第三个至第六个之间的字符串
    print str[2:]       # 输出从第三个字符开始的字符串
    print str * 2       # 输出字符串两次
    print str + "TEST"  # 输出连接的字符串

3.List(列表):

  • 列表用 [ ] 标识,是 python 最通用的复合数据类型,列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套),只有当个值时后面也要加逗号;
  • 索引和字符串类似,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾
  • 如下示例一代表对列表的操作:
    1.示例一
    list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
    tinylist = [123, 'john']
     
    print list               # 输出完整列表
    print list[0]            # 输出列表的第一个元素
    print list[1:3]          # 输出第二个至第三个元素 
    print list[2:]           # 输出从第三个开始至列表末尾的所有元素
    print tinylist * 2       # 输出列表两次
    print list + tinylist    # 打印组合的列表

4.Tuple(元组)

  • 元组是另一个数据类型,类似于 List(列表),元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表,这点很重要,只有当个值时后面也要加逗号;
  • 如下示例一代表对元组的操作:
    1.实例一
    tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
    tinytuple = (123, 'john')
     
    print tuple               # 输出完整元组
    print tuple[0]            # 输出元组的第一个元素
    print tuple[1:3]          # 输出第二个至第四个(不包含)的元素 
    print tuple[2:]           # 输出从第三个开始至列表末尾的所有元素
    print tinytuple * 2       # 输出元组两次
    print tuple + tinytuple   # 打印组合的元组

5.Dictionary(字典)

  • 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型,列表是有序的对象集合,字典是无序的对象集合;
  • 两者之间的区别在于字典当中的元素是通过键来存取的,而不是通过偏移存取;
  • 字典用”{ }”标识。字典由索引(key)和它对应的值value组成;
  • 以下示例一代表对字典的操作
    1.示例一
    dict = {}
    dict['one'] = "This is one"
    dict[2] = "This is two"
     
    tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'}
     
     
    print dict['one']          # 输出键为'one' 的值
    print dict[2]              # 输出键为 2 的值
    print tinydict             # 输出完整的字典
    print tinydict.keys()      # 输出所有键
    print tinydict.values()    # 输出所有值

数据类型的转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可,以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值;

函数 描述
int(x [,base]) 将x转换为一个整数
long(x [,base] ) 将x转换为一个长整数
float(x) 将x转换到一个浮点数
complex(real [,imag]) 创建一个复数
str(x) 将对象 x 转换为字符串
repr(x) 将对象 x 转换为表达式字符串
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) 将序列 s 转换为一个元组
list(s) 将序列 s 转换为一个列表
set(s) 转换为可变集合
dict(d) 创建一个字典。d 必须是一个序列 (key,value)元组。
frozenset(s) 转换为不可变集合
chr(x) 将一个整数转换为一个字符
unichr(x) 将一个整数转换为Unicode字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串

Python运算符

算数运算符

运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分(向下取整 >>> 9//24>>> -9//2-5

关系运算符

运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
<> 不等于 - 比较两个对象是否不相等。python3 已废弃。 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

赋值运算符

= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a

位运算符

运算符 描述 实例
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101
^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。
<< 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
>> 右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1

逻辑运算符

运算符 逻辑表达式 描述 实例
and x and y 布尔”与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔”或” - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

成员运算符

运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

身份运算符

运算符 描述 实例
is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 **id(a) != id(b)**。如果引用的不是同一个对象则返回结果 True,否则返回 False。

运算符优先级

运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 ‘AND’
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符

Python分支语句

1.语法格式
num = 5     
if num == 3:            # 判断num的值
    print 'boss'        
elif num == 2:
    print 'user'
elif (num >= 0 and num <= 5) or (num >= 10 and num <= 15):
    print 'worker'
elif num < 0:           # 值小于零时输出
    print 'error'
else:
    print 'roadman'     # 条件均不成立时输出

Python循环语句:

While循环语句

1.语法格式
count = 0
while count < 5: //
   print count, " is  less than 5"
   count = count + 1
else: #循环条件为 false 时执行 else 语句块
   print count, " is not less than 5"

For循环语句

1.语法格式
for num in range(10,20):  # 迭代 10 到 20 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print ('%d 等于 %d * %d' % (num,i,j))
         break            # 跳出当前循环
   else:                  # 循环的 else 部分
      print ('%d 是一个质数' % num)

Python数字详解

1.math和cmath模块说明:Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中,Python math 模块提供了许多对浮点数的数学运算函数,Python cmath 模块包含了一些用于复数运算的函数,cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算,要使用 math 或 cmath 函数必须先导入 Import math 或者 import cmath;

2.Python数学函数:

函数 返回值 ( 描述 )
abs(x) 返回数字的绝对值,如abs(-10) 返回 10
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,…) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,…) 返回给定参数的最小值,参数可以为序列。
modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y) x**y 运算后的值。
[round(x ,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x) 返回数字x的平方根

3.Python随机数函数:随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性:

函数 描述
choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
[randrange (start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
random() 随机生成下一个实数,它在[0,1)范围内。
[seed(x]) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
shuffle(lst) 将序列的所有元素随机排序
uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。

4.Python三角函数:

函数 描述
acos(x) 返回x的反余弦弧度值。
asin(x) 返回x的反正弦弧度值。
atan(x) 返回x的反正切弧度值。
atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值。
cos(x) 返回x的弧度的余弦值。
hypot(x, y) 返回欧几里德范数 sqrt(xx + yy)。
sin(x) 返回的x弧度的正弦值。
tan(x) 返回x弧度的正切值。
degrees(x) 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x) 将角度转换为弧度

5.Python数学常量:

常量 描述
pi 数学常量 pi(圆周率,一般以π来表示)
e 数学常量 e,e即自然常数(自然常数)。

Python字符串详解

1.转义字符:在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符:

转义字符 描述
(在行尾时) 续行符
\ 反斜杠符号
' 单引号
" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
\xyy 十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

2.字符运算符

操作符 描述 实例
+ 字符串连接 >>>a + b’HelloPython’
* 重复输出字符串 >>>a * 2’HelloHello’
[] 通过索引获取字符串中字符 >>>a[1]’e’
[ : ] 截取字符串中的一部分 >>>a[1:4]’ell’
in 成员运算符 - 如果字符串中包含给定的字符返回 True >>>”H” in aTrue
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True >>>”M” not in aTrue
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母”r”(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 >>>print r’\n’\n>>> print R’\n’\n
% 格式字符串 下节点详细说明

3.Python格式化字符串:

  • 语法格式实例:print “My name is %s and weight is %d kg!” % (‘Zara’, 21)

  • 也可以使用str.format(),它增强了字符串格式化功能;

  • 字符串格式化符号

    描述 符 号
    格式化字符及其ASCII码 %c
    格式化字符串 %s
    格式化整数 %d
    格式化无符号整型 %u
    格式化无符号八进制数 %o
    格式化无符号十六进制数 %x
    格式化无符号十六进制数(大写) %X
    格式化浮点数字,可指定小数点后的精度 %f
    用科学计数法格式化浮点数 %e
    作用同%e,用科学计数法格式化浮点数 %E
    %f和%e的简写 %g
    %F 和 %E 的简写 %G
    用十六进制数格式化变量的地址 %p
  • 格式化操作符辅助指令

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

4.字符串内建函数:这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的;

方法 描述
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 符号转为空格,tab 符号默认的空格数是 8。
string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format() 格式化字符串
string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isalnum() 如果 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) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower() 转换 string 中所有大写字符为小写.
string.lstrip() 截掉 string 左边的空格
string.maketrans(intab, outtab) maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
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() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。
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+1 个子字符串
[string.splitlines(keepends]) 按照行(‘\r’, ‘\r\n’, ‘\n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
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

Python列表详解

1.列表脚本操作符:列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表;

Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
[‘Hi!’] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代

2.列表截取:

Python 表达式 结果 描述
L[2] ‘Taobao’ 读取列表中第三个元素
L[-2] ‘Runoob’ 读取列表中倒数第二个元素
L[1:] [‘Runoob’, ‘Taobao’] 从第二个元素开始截取列表

3.列表函数:

序号 函数
1 cmp(list1, list2)比较两个列表的元素
2 len(list)列表元素个数
3 max(list)返回列表元素最大值
4 min(list)返回列表元素最小值
5 list(seq)将元组转换为列表

4.列表方法

序号 方法
1 list.append(obj)在列表末尾添加新的对象
2 list.count(obj)统计某个元素在列表中出现的次数
3 list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4 list.index(obj)从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj)将对象插入列表
6 [list.pop(index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj)移除列表中某个值的第一个匹配项
8 list.reverse()反向列表中元素
9 list.sort(cmp=None, key=None, reverse=False)对原列表进行排序

Python元组详解

1.元组运算符:与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组;

Python 表达式 结果 描述
len((1, 2, 3)) 3 计算元素个数
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 连接
(‘Hi!’,) * 4 (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) 复制
3 in (1, 2, 3) True 元素是否存在
for x in (1, 2, 3): print x, 1 2 3 迭代

2.元组索引和截取:因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素;

Python 表达式 结果 描述
L[2] ‘SPAM!’ 读取第三个元素
L[-2] ‘Spam’ 反向读取,读取倒数第二个元素
L[1:] (‘Spam’, ‘SPAM!’) 截取元素

3.无关闭分隔符:任意无符号的对象,以逗号隔开,默认为元组,例如 print ‘abc’, -4.24e93, 18+6.6j, ‘xyz’ 和 x, y = 1, 2;

4.元组内置函数

序号 方法及描述
1 cmp(tuple1, tuple2)比较两个元组元素。
2 len(tuple)计算元组元素个数。
3 max(tuple)返回元组中元素最大值。
4 min(tuple)返回元组中元素最小值。
5 tuple(seq)将列表转换为元组。

Python字典详解

1.字典内置函数:

序号 函数及描述
1 cmp(dict1, dict2)比较两个字典元素。
2 len(dict)计算字典元素个数,即键的总数。
3 str(dict)输出字典可打印的字符串表示。
4 type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。

2.字典内置方法:

序号 函数及描述
1 dict.clear()删除字典内所有元素
2 dict.copy()返回一个字典的浅复制
3 [dict.fromkeys(seq, val])创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4 dict.get(key, default=None)返回指定键的值,如果值不在字典中返回default值
5 dict.has_key(key)如果键在字典dict里返回true,否则返回false
6 dict.items()以列表返回可遍历的(键, 值) 元组数组
7 dict.keys()以列表返回一个字典所有的键
8 dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 dict.update(dict2)把字典dict2的键/值对更新到dict里
10 dict.values()以列表返回字典中的所有值
11 [pop(key,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem()返回并删除字典中的最后一对键和值。

Python日期和时间

1.time时间模块内置函数:

  • 既有时间处理,也有转换时间格式的;
  • 包含俩个重要属性,如下
    • time.timezone : 是当时时区距离0时区的偏移秒数;
    • time.tzname:包含一对根据情况的不同而不同的字符串;
序号 函数及描述
1 time.altzone返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
2 [time.asctime(tupletime])接受时间元组并返回一个可读的形式为”Tue Dec 11 18:07:14 2008”(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
3 time.clock( )用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
4 [time.ctime(secs])作用相当于asctime(localtime(secs)),未给参数相当于asctime()
5 [time.gmtime(secs])接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0
6 [time.localtime(secs])接收时间戳(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
7 time.mktime(tupletime)接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)。
8 time.sleep(secs)推迟调用线程的运行,secs指秒数。
9 [time.strftime(fmt,tupletime])接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
10 time.strptime(str,fmt=’%a %b %d %H:%M:%S %Y’)根据fmt的格式把一个时间字符串解析为时间元组。
11 time.time( )返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
12 time.tzset()根据环境变量TZ重新初始化时间相关设置。

2.calendar日历模块:

  • 此模块的函数都是日历相关的,例如打印某月的字符月历;
  • 星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数;
序号 函数及描述
1 *calendar.calendar(year,w=2,l=1,c=6)**返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21 W+18+2* C。l是每星期行数。
2 **calendar.firstweekday( )**返回当前每周起始日期的设置。默认情况下,首次载入 calendar 模块时返回 0,即星期一。
3 **calendar.isleap(year)**是闰年返回 True,否则为 False。>>> import calendar>>> print(calendar.isleap(2000))True>>> print(calendar.isleap(1900))False
4 **calendar.leapdays(y1,y2)**返回在Y1,Y2两年之间的闰年总数。
5 *calendar.month(year,month,w=2,l=1)**返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7 w+6。l是每星期的行数。
6 **calendar.monthcalendar(year,month)**返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
7 **calendar.monthrange(year,month)**返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
8 **calendar.prcal(year,w=2,l=1,c=6)**相当于 **print calendar.calendar(year,w=2,l=1,c=6)**。
9 calendar.prmonth(year,month,w=2,l=1)**相当于 **print calendar.month(year,month,w=2,l=1)
10 **calendar.setfirstweekday(weekday)**设置每周的起始日期码。0(星期一)到6(星期日)。
11 **calendar.timegm(tupletime)**和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间戳(1970纪元后经过的浮点秒数)。
12 **calendar.weekday(year,month,day)**返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

python函数

1.用户自定义函数:以下是定义函数的规则

  • 函数代码以def关键词开头,后接函数标识符名词和圆括号();
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数;
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明;
  • 函数内容以冒号起始,并且缩进;
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None;

2.参数传递:Python中类型属于对象,变量没有类型,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象;

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身;
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象;

3.参数类型:

  • 必备参数:定义形参时只有参数名,传入实参时只有参数值,必须按顺序输入;
  • 关键字参数:定义形参时只有参数名,传入实参时有参数名并且有参数值,可以不按顺序输入;
  • 默认参数:在定义形参时,定义参数名并且有参数值;
  • 不定长参数:定义形参时,可以在参数名前加*,相当于C#的不定长参数,取值时遍历取出;

4.匿名函数:

  • 语法:lambda [arg1 [,arg2,…..argn]] :表达式;
  • lambda只是一个表达式,而不是一个代码块,函数体比def简单很多,仅仅能在lambda表达式中封装有限的逻辑进去;
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数;
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率;

Python模块

1.模块的说明:是一个Python文件,以.py结尾,模块能定义函数、类和变量;

2.模块引入说明:

  • import语句语法:import module1[, module2[,… moduleN]];
  • from…import语句语法:from modname import name1[, name2[, … nameN]];
  • from…import:将一个模块所有内容都导入就是在后面加\;

3.搜索路径:模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录,当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

  • 1:当前目录
  • 2:如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
  • 3:如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

4.PYTHONPATH:环境变量,由装在一个列表里的许多目录组成;

  • Windows 系统路径:set PYTHONPATH=c:\python27\lib;
  • UNIX 系统路径:set PYTHONPATH=/usr/local/lib/python;

5.命名空间和作用域:命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典;如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量,每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样;函数内部会优先访问局部变量,如果函数要访问全局变量,需要加global关键字;

  • 内置命名空间:启动解释器时自动加载内存的各种名字所在的空间;
  • 全局命名空间:从上到下定义的变量名和函数名;
  • 局部命名空间:函数内部执行开辟的空间,存放了各种函数内部的各种名字;

6.模块关键函数:

  • dir()函数:一个排好序的字符串列表,返回的列表容纳了在一个模块里定义的所有模块;
  • globals()函数:返回的字典是所有在该函数里能访问的全局名字;
  • 返回的字典是所有能在该函数里访问的命名
  • reload()函数:当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块,参数传的是模块名字,而并非字符串;

7.包:包其实就是文件夹,但是文件夹下面必须存在_init_.py文件,文件内容可以为空,该文件只是标志当前文件夹是一个包,导入包下的模块时,只需要通过包名点出模块名即可;

Python文件I/O流

File文件

1.基础的输入和输出:

  • print()内置函数:最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式;
  • raw_input()内置函数:标准输入读取一个行,并返回一个字符串(去掉结尾的换行符);
  • input()内置函数: input 和raw_input不同的是可以接收一个Python表达式作为输入,并将运算结果返回

2.open()函数:用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写

  • file_name:file_name变量是一个包含了你要访问的文件名称的字符串值;
  • access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r);
  • buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认;
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

mode 参数有:

模式 描述
t 文本模式 (默认)。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写)。
U 通用换行模式(不推荐)。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

3.close()方法:

  • 语法:flie变量.close();
  • 刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入;

4.write()方法:

  • 语法:flie变量.write(string);
  • write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字,write()方法不会在字符串的结尾添加换行符(‘\n’);

5.read()方法:

  • 语法:file.read([count])
  • 从一个打开的文件读取一个字符串,字符串亦可以是二进制数据与;

6.文件定位:

  • tell()方法:获取当前打开文件的位置下标;
  • seek()方法:改变当前文件夹的位置,第一个参数Offset变量表示要移动的字节数。第二个参数From变量指定开始移动字节的参考位置;如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置;

7.重命名和删除文件:

  • rename()方法:第一个参数当前文件名和新文件名(这样有点离谱);
  • remove()方法:提供文件名参数来作为删除;

8.file对象函数:

序号 方法及描述
1 file.close()关闭文件。关闭后文件不能再进行读写操作。
2 file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
3 file.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
4 file.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。
5 file.next()返回文件下一行。
6 [file.read(size])从文件读取指定的字节数,如果未给定或为负则读取所有。
7 [file.readline(size])读取整行,包括 “\n” 字符。
8 [file.readlines(sizeint])读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
9 [file.seek(offset, whence])设置文件当前位置
10 file.tell()返回文件当前位置。
11 [file.truncate(size])截取文件,截取的字节通过size指定,默认为当前文件位置。
12 file.write(str)将字符串写入文件,返回的是写入的字符长度。
13 file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

OS目录

序号 方法及描述
1 os.access(path, mode)检验权限模式
2 os.chdir(path)改变当前工作目录
3 os.chflags(path, flags)设置路径的标记为数字标记。
4 os.chmod(path, mode)更改权限
5 os.chown(path, uid, gid)更改文件所有者
6 os.chroot(path)改变当前进程的根目录
7 os.close(fd)关闭文件描述符 fd
8 os.closerange(fd_low, fd_high)关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9 os.dup(fd)复制文件描述符 fd
10 os.dup2(fd, fd2)将一个文件描述符 fd 复制到另一个 fd2
11 os.fchdir(fd)通过文件描述符改变当前工作目录
12 os.fchmod(fd, mode)改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
13 os.fchown(fd, uid, gid)修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
14 os.fdatasync(fd)强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
15 [os.fdopen(fd, mode[, bufsize]])通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
16 os.fpathconf(fd, name)返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
17 os.fstat(fd)返回文件描述符fd的状态,像stat()。
18 os.fstatvfs(fd)返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()
19 os.fsync(fd)强制将文件描述符为fd的文件写入硬盘。
20 os.ftruncate(fd, length)裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21 os.getcwd()返回当前工作目录
22 os.getcwdu()返回一个当前工作目录的Unicode对象
23 os.isatty(fd)如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
24 os.lchflags(path, flags)设置路径的标记为数字标记,类似 chflags(),但是没有软链接
25 os.lchmod(path, mode)修改连接文件权限
26 os.lchown(path, uid, gid)更改文件所有者,类似 chown,但是不追踪链接。
27 os.link(src, dst)创建硬链接,名为参数 dst,指向参数 src
28 os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。
29 os.lseek(fd, pos, how)设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
30 os.lstat(path)像stat(),但是没有软链接
31 os.major(device)从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
32 os.makedev(major, minor)以major和minor设备号组成一个原始设备号
33 [os.makedirs(path, mode])递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
34 os.minor(device)从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
35 [os.mkdir(path, mode])以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
36 [os.mkfifo(path, mode])创建命名管道,mode 为数字,默认为 0666 (八进制)
37 [os.mknod(filename, mode=0600, device])创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
38 [os.open(file, flags, mode])打开一个文件,并且设置需要的打开选项,mode参数是可选的
39 os.openpty()打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
40 os.pathconf(path, name)返回相关文件的系统配置信息。
41 os.pipe()创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
42 [os.popen(command, mode[, bufsize]])从一个 command 打开一个管道
43 os.read(fd, n)从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
44 os.readlink(path)返回软链接所指向的文件
45 os.remove(path)删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
46 os.removedirs(path)递归删除目录。
47 os.rename(src, dst)重命名文件或目录,从 src 到 dst
48 os.renames(old, new)递归地对目录进行更名,也可以对文件进行更名。
49 os.rmdir(path)删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
50 os.stat(path)获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
51 [os.stat_float_times(newvalue])决定stat_result是否以float对象显示时间戳
52 os.statvfs(path)获取指定路径的文件系统统计信息
53 os.symlink(src, dst)创建一个软链接
54 os.tcgetpgrp(fd)返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
55 os.tcsetpgrp(fd, pg)设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
56 [os.tempnam(dir[, prefix]])返回唯一的路径名用于创建临时文件。
57 os.tmpfile()返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
58 os.tmpnam()为创建一个临时文件返回一个唯一的路径
59 os.ttyname(fd)返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
60 os.unlink(path)删除文件路径
61 os.utime(path, times)返回指定的path文件的访问和修改的时间。
62 [os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])](https://www.runoob.com/python/os-walk.html)输出在文件夹中的文件名通过在树中游走,向上或者向下。
63 os.write(fd, str)写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
64 os.path 模块获取文件的属性信息。

Python异常处理