进击的Python【第二章】:Python基础(二)

时间:2023-03-08 17:18:40

Python基础(二)

本章内容

  1. 数据类型
  2. 数据运算
  3. 列表与元组的基本操作
  4. 字典的基本操作
  5. 字符编码与转码
  6. 模块初探
  7. 练习:购物车程序

一、数据类型

  Python有五个标准的数据类型:

  • Numbers(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

  1. Number(数字)

  number类型用来专门存储数字数据,他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象

  Python支持四种不同的数字类型:

  • int(有符号整型)
  • long(长整型[也可以代表八进制和十六进制])
  • float(浮点型)
  • complex(复数)

  实例

  一些数值类型的实例:

int long float complex
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEl 32.3+e18 .876j
-0490 535633629843L -90. -.6545+0J
-0x260 -052318172735L -32.54e100 3e+26J
0x69 -4721885298529L 70.2-E12 4.53e-7j
  • 长整型也可以使用小写"L",但是还是建议您使用大写"L",避免与数字"1"混淆。Python使用"L"来显示长整型。
  • Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。在Python中虚数部分用的是j,是因为Python沿用了工程领域的规范,这块和咱们上学时用的i有所不同。

  2.string(字符串)

  在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:

 >>> print('I am 成怡强')
I am 成怡强

  3.list(列表)

  List(列表) 是 Python 中使用最频繁的数据类型。

  列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

  列表用[ ]标识。是python最通用的复合数据类型。看这段代码就明白。

  列表中的值得分割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。

  实例

 name_list = ['tom', 'lili', 'tim']
num_list = [1, 2, 3, 4]

  4.tuple(元组)

  元组是另一个数据类型,类似于List(列表)。

  元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

  实例

 tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 )

  5.字典

  字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。

  两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

  字典用"{ }"标识。字典由索引(key)和它对应的值value组成。

  实例

 person = {"name": "mr.wu", 'age': 18}

person = dict({"name": "mr.wu", 'age': 18})

二、数据运算

简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符。 Python语言支持操作者有以下几种类型。

  • 算术运算符

  • 比较(即关系)运算符

  • 赋值运算符

  • 逻辑运算符

  • 位运算符

  • 成员操作符

  • 标识操作符

  • Python运算符优先级

让我们逐一看看所有的运算符。

1.算术运算符

操作符 描述符 例子
+ 加法 - 对操作符的两侧增加值 a + b = 30
- 减法 - 减去从左侧操作数右侧操作数 a - b = -10
* 乘法 - 相乘的运算符两侧的值 a * b = 200
/ 除 - 由右侧操作数除以左侧操作数 b / a = 2
% 模 - 由右侧操作数和余返回除以左侧操作数 b % a = 0
** 指数- 执行对操作指数(幂)的计算 a**b = 10 的幂 20
// 地板除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。 9//2 =  4 而 9.0//2.0 = 4.0

示例:

 #!/usr/bin/python

 a = 21
b = 10
c = 0 c = a + b
print "Line 1 - Value of c is ", c c = a - b
print "Line 2 - Value of c is ", c c = a * b
print "Line 3 - Value of c is ", c c = a / b
print "Line 4 - Value of c is ", c c = a % b
print "Line 5 - Value of c is ", c a = 2
b = 3
c = a**b
print "Line 6 - Value of c is ", c a = 10
b = 5
c = a//b
print "Line 7 - Value of c is ", c

结果:

 Line 1 - Value of c is 31
Line 2 - Value of c is 11
Line 3 - Value of c is 210
Line 4 - Value of c is 2
Line 5 - Value of c is 1
Line 6 - Value of c is 8
Line 7 - Value of c is 2

2.比较(即关系)运算符

运算符 描述 示例
== 检查两个操作数的值是否相等,如果是,则条件变为真。 (a == b) 不为 true.
!= 检查两个操作数的值是否等相等,如果值不相等,则条件变为真。 (a != b) 为 true.
<> 检查两个操作数的值是否等相等,如果值不相等,则条件变为真。 (a <> b) 结果为true。这类似于!=运算符。
> 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 (a > b) 为  true.
< 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 (a < b) 为true.
>= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 (a >= b) 不为 true.
<= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 (a <= b) 为 true.

示例:

 #!/usr/bin/python

 a = 21
b = 10
c = 0 if ( a == b ):
print "Line 1 - a is equal to b"
else:
print "Line 1 - a is not equal to b" if ( a != b ):
print "Line 2 - a is not equal to b"
else:
print "Line 2 - a is equal to b" if ( a <> b ):
print "Line 3 - a is not equal to b"
else:
print "Line 3 - a is equal to b" if ( a < b ):
print "Line 4 - a is less than b"
else:
print "Line 4 - a is not less than b" if ( a > b ):
print "Line 5 - a is greater than b"
else:
print "Line 5 - a is not greater than b" a = 5;
b = 20;
if ( a <= b ):
print "Line 6 - a is either less than or equal to b"
else:
print "Line 6 - a is neither less than nor equal to b" if ( b >= a ):
print "Line 7 - b is either greater than or equal to b"
else:
print "Line 7 - b is neither greater than nor equal to b"

结果:

 Line 1 - a is not equal to b
Line 2 - a is not equal to b
Line 3 - a is not equal to b
Line 4 - a is not less than b
Line 5 - a is greater than b
Line 6 - a is either less than or equal to b
Line 7 - b is either greater than or equal to b

3、赋值运算符

运算符 描述 示例
= 简单的赋值运算符,赋值从右侧操作数左侧操作数 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

示例:

 #!/usr/bin/python

 a = 21
b = 10
c = 0 c = a + b
print "Line 1 - Value of c is ", c c += a
print "Line 2 - Value of c is ", c c *= a
print "Line 3 - Value of c is ", c c /= a
print "Line 4 - Value of c is ", c c = 2
c %= a
print "Line 5 - Value of c is ", c c **= a
print "Line 6 - Value of c is ", c c //= a
print "Line 7 - Value of c is ", c

结果:

 Line 1 - Value of c is 31
Line 2 - Value of c is 52
Line 3 - Value of c is 1092
Line 4 - Value of c is 52
Line 5 - Value of c is 2
Line 6 - Value of c is 2097152
Line 7 - Value of c is 99864

4.逻辑运算符

and 所谓逻辑与运算符。如果两个操作数都为真,则条件为真。 (a and b) 为 true.
or 所谓逻辑OR运算符。如果有两个操作数都为非零,则条件变为真。 (a or b) 为 true.
not 所谓逻辑非运算符。用反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将为false。 not(a and b) 为 false.

示例:

 #!/usr/bin/python

 a = 10
b = 20
c = 0 if ( a and b ):
print "Line 1 - a and b are true"
else:
print "Line 1 - Either a is not true or b is not true" if ( a or b ):
print "Line 2 - Either a is true or b is true or both are true"
else:
print "Line 2 - Neither a is true nor b is true" a = 0
if ( a and b ):
print "Line 3 - a and b are true"
else:
print "Line 3 - Either a is not true or b is not true" if ( a or b ):
print "Line 4 - Either a is true or b is true or both are true"
else:
print "Line 4 - Neither a is true nor b is true" if not( a and b ):
print "Line 5 - Either a is not true or b is not true"
else:
print "Line 5 - a and b are true"

结果:

 Line 1 - a and b are true
Line 2 - Either a is true or b is true or both are true
Line 3 - Either a is not true or b is not true
Line 4 - Either a is true or b is true or both are true
Line 5 - Either a is not true or b is not true

5.位运算符

运算符 描述 示例
& 二进制AND操作复制一位到一个结果数,如果存在两个操作数。 (a & b) = 12 即  0000 1100
| 二进制或复制操作了一个比特,如果它存在一个操作数中。 (a | b) = 61  即 0011 1101
^ 二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。 (a ^ b) = 49  即 0011 0001
~ 二进制的补运算符是一元的,并有“翻转”位的效果。 (~a ) =  -61  即 1100 0011 以2的补码形式由于带符号二进制数。
<< 二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。 a << 2 = 240 即 1111 0000
>> 二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。 a >> 2 = 15 即  0000 1111

示例:

 #!/usr/bin/python

 a = 60            # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0 c = a & b; # 12 = 0000 1100
print "Line 1 - Value of c is ", c c = a | b; # 61 = 0011 1101
print "Line 2 - Value of c is ", c c = a ^ b; # 49 = 0011 0001
print "Line 3 - Value of c is ", c c = ~a; # -61 = 1100 0011
print "Line 4 - Value of c is ", c c = a << 2; # 240 = 1111 0000
print "Line 5 - Value of c is ", c c = a >> 2; # 15 = 0000 1111
print "Line 6 - Value of c is ", c

结果:

 Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is 49
Line 4 - Value of c is -61
Line 5 - Value of c is 240
Line 6 - Value of c is 15

6.成员运算符

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

示例:

 #!/usr/bin/python
# -*- coding: UTF-8 -*- a = 10
b = 20
list = [1, 2, 3, 4, 5 ]; if ( a in list ):
print "1 - 变量 a 在给定的列表中 list 中"
else:
print "1 - 变量 a 不在给定的列表中 list 中" if ( b not in list ):
print "2 - 变量 b 不在给定的列表中 list 中"
else:
print "2 - 变量 b 在给定的列表中 list 中" # 修改变量 a 的值
a = 2
if ( a in list ):
print "3 - 变量 a 在给定的列表中 list 中"
else:
print "3 - 变量 a 不在给定的列表中 list 中"

结果:

 1 - 变量 a 不在给定的列表中 list 中
2 - 变量 b 不在给定的列表中 list 中
3 - 变量 a 在给定的列表中 list 中

7.标识操作符

运算符 描述 示例
is 计算结果为true,如果操作符两侧的变量指向相同的对象,否则为false。 x是y,这里结果是1,如果id(x)的值为id(y)。
is not 计算结果为false,如果两侧的变量操作符指向相同的对象,否则为true。 x不为y,这里结果不是1,当id(x)不等于id(y)。

示例:

 #!/usr/bin/python

 a = 20
b = 20 if ( a is b ):
print "Line 1 - a and b have same identity"
else:
print "Line 1 - a and b do not have same identity" if ( id(a) == id(b) ):
print "Line 2 - a and b have same identity"
else:
print "Line 2 - a and b do not have same identity" b = 30
if ( a is b ):
print "Line 3 - a and b have same identity"
else:
print "Line 3 - a and b do not have same identity" if ( a is not b ):
print "Line 4 - a and b do not have same identity"
else:
print "Line 4 - a and b have same identity"

结果:

 Line 1 - a and b have same identity
Line 2 - a and b have same identity
Line 3 - a and b do not have same identity
Line 4 - a and b do not have same identity

8.Python运算符优先级

  运算符优先级来确定条件的表达式中的分组。这会影响一个表达式如何计算。某些运算符的优先级高于其他;例如,乘法运算符的优先级比加法运算更高。

  例如x=7 + 3* 2;这里,x被赋值13,而不是20,因为运算符*的优先级比+更高,所以它首先乘以3 * 2,然后加7。

  这里,具有最高优先级运算符出现在表格上方,那些最低的显示在底部。在一个表达式,更高的优先级运算符将首先计算。

运算符 描述
** 幂(指数)
~ + - 补码,一元加号和减号(方法名的最后两个+@和 - @)
* / % // 乘,除,取模和地板除
+ - 加法和减法
>> << 左,右按位转移
& 按位“与”
^ | 按位异或`'和`定期'或'
<= < > >= 比较运算符
<> == != 等式运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 运算符标识
in not in 成员运算符
not or and 逻辑运算符

示例:

 #!/usr/bin/python

 a = 20
b = 10
c = 15
d = 5
e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5
print "Value of (a + b) * c / d is ", e e = ((a + b) * c) / d # (30 * 15 ) / 5
print "Value of ((a + b) * c) / d is ", e e = (a + b) * (c / d); # (30) * (15/5)
print "Value of (a + b) * (c / d) is ", e e = a + (b * c) / d; # 20 + (150/5)
print "Value of a + (b * c) / d is ", e

结果:

 Value of (a + b) * c / d is 90
Value of ((a + b) * c) / d is 90
Value of (a + b) * (c / d) is 90
Value of a + (b * c) / d is 50

三、列表与元组的基本操作

列表:

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.切片与索引

 list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7] print("list1[0]: ", list1[0]) #拿第一个元素
print("list2[1:5]: ", list2[1:5]) #顾头不顾尾,切片
print("list1[0]:", list1[::2]) #每两个步长取一个元素

结果:

 list1[0]:  physics
list2[1:5]: [2, 3, 4, 5]
list1[0]: ['physics', 1997]

3.更新列表

 #!/usr/bin/python

 list = ['physics', 'chemistry', 1997, 2000];

 print "Value available at index 2 : "
print list[2];
list[2] = 2001;
print "New value available at index 2 : "
print list[2];

结果:

 Value available at index 2 :
1997
New value available at index 2 :
200

4.删除列表中的元素

要删除列表的元素,可以使用del语句,如果知道哪些元素要删除;或如果你不知道那么使用remove()方法。下面是一个简单的例子:

 #!/usr/bin/python

 list1 = ['physics', 'chemistry', 1997, 2000];

 print list1;
del list1[2];
print "After deleting value at index 2 : "
print list1;

结果:

 ['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]

5.内置函数列表及方法

Python中包括下面的列表函数功能:

进击的Python【第二章】:Python基础(二)

Python中包括下面的列表的方法:

进击的Python【第二章】:Python基础(二)

元组

  元组是不可变的Python对象序列。元组的序列就像列表。唯一的区别是,元组不能被改变,即元组是不可被修改。元组使用小括号,而列表使用方括号。

  元组的方法只有两个:

 list.count(obj)
list.index(index, obj)

四、字典的基本操作

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

 dict = {'Alice': '', 'Beth': '', 'Cecil': ''}

也可以用上面的代码来创建一个字典。

键在一个字典中是唯一的,而值可能不是。字典的值可以是任何类型的,但键必须是不可变的数据类型,例如字符串,数字,或元组。

1.访问一个字典的值:

要访问字典元素,您可以使用熟悉的方括号一起的关键,获得它的值。下面是一个简单的例子:

 #!/usr/bin/python

 dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

 print "dict['Name']: ", dict['Name'];
print "dict['Age']: ", dict['Age'];

结果:

 dict['Name']:  Zara
dict['Age']: 7

2.更新字典:

可以通过添加一个新条目或项目(即一个键 - 值对),修改现有条目或删除。作为简单的例子,如下图所示在现有条目更新字词:

 #!/usr/bin/python

 dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

 dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];

结果:

 dict['Age']:  8
dict['School']: DPS School

3.删除字典元素:

可以删除单个字典元素或清除字典中的全部内容。也可以删除整个字典在一个单一的操作。

要删除整个字典,只要用del语句。下面是一个简单的例子:

 #!/usr/bin/python

 dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

 del dict['Name']; # remove entry with key 'Name'
dict.clear(); # remove all entries in dict
del dict ; # delete entire dictionary print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];

这将产生以下结果。注意引发异常,这是因为经过del dict删除,字典已经不存在了:

 dict['Age']:
Traceback (most recent call last):
File "test.py", line 8, in <module>
print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

4.字典的键的属性

字典值没有限制。它们可以是任意Python对象,无论是标准的对象或用户定义的对象。但是作为键,是不可以这样的。

要记住字典中的键的两个要点:

(一)不准一个键对应多个条目。这意味着不能有重复的键。当有重复的键,在分配过程中以最后分配的为准。下面是一个简单的例子:

 #!/usr/bin/python

 dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};

 print "dict['Name']: ", dict['Name'];

当执行上面的代码,产生以下结果:

 dict['Name']:  Manni

(二)键的值字必须是不可变的。这意味着可以使用字符串,数字或元组作为字典的键,但像['key']是不允许的。下面是一个简单的例子:

 #!/usr/bin/python

 dict = {['Name']: 'Zara', 'Age': 7};

 print "dict['Name']: ", dict['Name'];

结果:

 Traceback (most recent call last):
File "test.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7};
TypeError: list objects are unhashable

5.内置字典功能和方法

Python中包括以下字典功能:

进击的Python【第二章】:Python基础(二)

Python中包括以下字典方法:

进击的Python【第二章】:Python基础(二)

五、字符编码与转码

Python2.X中默认的字符编码为Unicode

Python3.X中默认字符编码为Utf-8

下面举例说明:

Python3.X

msg = "我爱北京*"
#msg_gb2312 = msg.decode("utf-8").encode("gb2312")
msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
gb2312_to_unicode = msg_gb2312.decode("gb2312")
gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") print(msg)
print(msg_gb2312)
print(gb2312_to_unicode)
print(gb2312_to_utf8)

结果:

utf-8
我爱北京*
b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
我爱北京*
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'

六、模块初探

一个模块可以在逻辑上组织Python代码。将相关的代码到一个模块中,使代码更容易理解和使用。模块是可以绑定和借鉴任意命名属性的Python对象。

简单地说,一个模块是由Python代码的文件。一个模块可以定义函数,类和变量。模块还可以包括可运行的代码。

sys模块

导入sys模块,调用argv方法

#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys print(sys.argv)

输出结果:

E:\learn_python\day02>D:\python3.5\python.exe blog.py 1 2 3
['blog.py', '1', '2', '3']

os模块

#!/usr/bin/env python
# -*- coding: utf-8 -*- import os os.system("df -h") #调用系统命令