Python学习--03变量类型

@date:2017-01-04 18:58:00

变量赋值 #

  • Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。
  • 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
  • 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
  • 等号(=)用来给变量赋值。
  • 等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

例如:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

counter = 100 # 赋值整型变量
miles = 1000.0 # 浮点型
name = "John" # 字符串

print(counter)
print(miles)
print(name)

多个变量赋值 #

Python允许你同时为多个变量赋值。例如:

a = b = c = 1

以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
您也可以为多个对象指定多个变量。例如:

a, b, c = 1, 2, "john"

以上实例,两个整型对象1和2的分配给变量a和b,字符串对象"john"分配给变量c。

常量 #

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。通常用大写字母表示常量。示例:

PI = 3.14159265359

与PHP、JAVA的常量不一样,Python本身并没有提供常量这一机制。也就是说,在Python里,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

数据类型 #

Python提供的基本数据类型主要有:布尔类型、整型、浮点型、字符串、列表、元组、集合、字典等等。

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

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

数字(number) #

Python数字类型是不可改变的数据类型。

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

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

# 浮点数
float=2.3;

print(int)
print(float)
print(pow(2,5))
print(2**5)

输出:

20
2.3
32
32

字符串(str) #

a、使用单引号(')
用单引号括起来表示字符串,例如:

str='this is string';
print(str);

b、使用双引号(")
双引号中的字符串与单引号中的字符串用法完全相同,例如:

str="this is string";
print(str);

c、使用三引号(''')
利用三引号,表示多行的字符串,可以在三引号中自由的使用单引号和双引号,例如:

str='''this is string
this is python string
this is string'''

print(str);

当使用以冒号分隔的字符串,python返回一个新的对象,结果包含了以这对偏移标识的连续的内容,左边的开始是包含了下边界。

加号(+)是字符串连接运算符,星号(*)是重复操作。如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
str = 'Hello World!'
 
print(str)           # 输出完整字符串
print(str[0])        # 输出字符串中的第一个字符
print(str[2:5])      # 输出字符串中第三个至第五个之间的字符串
print(str[2:])       # 输出从第三个字符开始的字符串
print(str * 2)       # 输出字符串两次
print(str + "TEST")  # 输出连接的字符串

以上实例输出结果:

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看:

>>> print('I\'m ok.')
I'm ok.

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义,可以自己试试:

>>> print('\\\t\\')
\       \
>>> print(r'\\\t\\')
\\\t\\

字符串通过encode()方法可以编码为指定的bytes,例如:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

在bytes中,无法显示为ASCII字符的字节,用\x##显示。

反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

可以使用str()将其它类型转为字符串类型。

列表(list) #

List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。
列表用[ ]标识。

列表中使用切片操作符[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。

加号(+)是列表连接运算符,星号(*)是重复操作。如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
list = [ 'Hello', 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)    # 打印组合的列表

以上实例输出结果:

['Hello', 786, 2.23, 'john', 70.2]
Hello
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['Hello', 786, 2.23, 'john', 70.2, 123, 'john']

删除列表元素

L=['spam', 'Spam', 'SPAM!'];
del L[0]

列表函数&方法

len(list) 列表长度
list.append(obj) 在列表末尾添加新的对象,相当于其它语言里的push
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置,索引从0开始
list.insert(index, obj) 将对象插入列表
list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素,倒转
list.sort([func]) 对原列表进行排序

元组(tuple) #

元组是另一个数据类型,类似于List(列表)。
元组用()标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

tup = ();
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

元组中只有一个元素时,需要在元素后面添加逗号,例如:tup1 = (50,);
元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,例如:

tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');

# 以下修改元组元素操作是非法的。
# tup1[0] = 100;

元组中的元素值是不允许删除的,可以使用del语句来删除整个元组。

元组内置函数

cmp(tuple1, tuple2) 比较两个元组元素。
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(seq) 将列表转换为元组。

字典(dict) #

字典是一种无序存储结构,包括关键字(key)和关键字对应的值(value)。字典的格式为:dictionary = {key:value}。key为不可变类型,如字符串、整数、只包含不可变对象的元组,列表等不可作为关键字。字典也被称作关联数组或哈希表。

示例:

>>> dict = {'name': 'Zara', 'age': 7, 'class': 'First'};

字典操作:

# 访问
>>> dict['name']  
'Zara'
>>> dict['age']  
7

# 修改
>>> dict['name'] = 'yjc'
>>> dict['name']
'yjc'
>>> dict["school"]="wutong"
>>> dict["school"]
'wutong'

# 删除
del dict['name'];  # 删除键是'name'的条目
dict.clear();  # 清空词典所有条目
del dict ;  # 删除词典

注意:字典不存在,del会引发一个异常。

字典内置函数方法:

cmp(dict1, dict2) 比较两个字典元素。
len(dict) 计算字典元素个数,即键的总数。
str(dict) 输出字典可打印的字符串表示。
type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。
dict.clear() 删除字典内所有元素
dict.copy() 返回一个字典的浅复制
dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
dict.has_key(key) 如果键在字典dict里返回true,否则返回false
dict.items() 以列表返回可遍历的(键, 值) 元组数组
dict.keys() 以列表返回一个字典所有的键
dict.setdefault(key, default=None) 和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default
dict.update(dict2) 把字典dict2的键/值对更新到dict里
dict.values() 以列表返回字典中的所有值

集合(set) #

集合(set)和字典(dict)类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

set 常用方法:

s.add(key)
s.remove(key)

布尔类型(bool) #

在Python中,None、任何数值类型中的0、空字符串""、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()__len__()方法且方法返回0False,则其实例也被当作False,其他对象均为True

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是TrueFalse,在Python中,可以直接用TrueFalse(请注意大小写),也可以通过布尔运算计算出来:

>>> True
True
>>> False
False
>>> 3 > 2
True
>>> 3 > 5
False

布尔值可以用and(与)、or(或)和not(非)运算(逻辑运算符,并不是位运算符):

a = 10
b = 20
a and b  # 20
a or b # 10
not a # False
not b # False

空值(None) #

表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

参考 #

1、python数据类型详解 - Ruthless - 博客园
http://www.cnblogs.com/linjiqin/p/3608541.html
2、Python 变量类型 | 菜鸟教程
http://www.runoob.com/python/python-variable-types.html
3、数据类型和变量
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431658624177ea4f8fcb06bc4d0e8aab2fd7aa65dd95000
4、使用list和tuple
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316724772904521142196b74a3f8abf93d8e97c6ee6000

Build by Loppo 0.6.14