学习2: 数据类型和变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习2: 数据类型和变量相关的知识,希望对你有一定的参考价值。

1. 变量

Python 变量仅是名称。变量名的创建是通过把类型的实例赋值给它们。变量本身并没有类型,而与它们绑定在一起的对象拥有类型。

名称只是个标签,同样,它也可以被一个完全不同的对象重新赋值。赋值操作使用=操作符,所以把一个值赋给一个变量就如下所示:

aVariable = aValue

这段代码把值aValue 绑定到变量名aVariable 上。如果此变量名不存在,解释器会把这个名称添加到合适的命名空间中。

因此,在Python 中区别变量和它指向的对象是非常重要的。

1) 变量判断: is 和 ==

is判断两个变量是否指向同一个变量,  ==判断两个变量指向的对象是否相等

>>> aString = ‘I love spam‘
>>> anotherString = ‘I love spam‘
>>> anInt = 6
>>> intAlias = anInt
>>> aString == anotherString # test equality of value
True
>>> aString is anotherString # test object identity
False
>>> anInt == intAlias # same value
True
>>> anInt is intAlias # also same object identity
True

2)  变量种类: 全局变量和局部变量

例如1: 

name=‘tom‘
def test():
    print name
					
test()

输出:
tom
[Finished in 0.2s]
说明:函数中可以直接使用全局变量,打印name时候查找name变量,先查找局部name没有找到,再查找全局name,找到了然后输出。

例如2:

name=‘tom‘
def test2():
    if name == ‘tom‘:
        pass
    else:
    name = ‘liming‘ print name test2()

执行报错:UnboundLocalError: local variable ‘name‘ referenced before assignment
说明:函数中先引用name判断是否等于‘tom‘,先找局部name没有找到,然后再找全局name找到了,所以使用全局name判断,然后else中又对这个全局name进行赋值,所以报错。
如果函数中的变量是引用的全局变量,那么函数不能对该变量直接重新赋值,如果必须重新赋值那么需要在函数中先通过global引用,如下

例如3:

name=‘tom‘
def test2():
    global name
    if name == ‘tim‘:
        pass
    else:
    name = ‘liming‘ print name test2() print name

正常输出:
liming
liming
[Finished in 0.2s]
说明:这个函数中通过使用global引用了全局name,所以在函数中可以对该全局name重新赋值。重结果中可以看到全局name的值已经被修改

例如4:

name=‘tom‘
def test2():
    name = ‘liming‘
    print name
test2()
print name

正常输出:
liming
tom
[Finished in 0.3s]
说明:此处在函数中直接定义了一个局部name,注意这个是定义局部变量而不会查找全局变量。局部变量和全局变量都可以正常输出,互不影响。

 

2. 数值类型: 整数和浮点数

3. 布尔类型

在Python中 None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False:

>>> bool()
False
>>> int(bool())
0
>>> int(True)
1
>>> int(False)
0

4. 空值类型None

空值是Python里一个特殊的值,用None表示。所有对None对象的引用都是同一个实例

>>> a=None
>>> b=None
>>> a==b
True
>>> a is b
True

5. 字符串

 

6. 列表

1) list是一种有序的集合,可以随时添加和删除其中的元素; 空列表定义a=[]

2) 可以用索引访问其中某一个元素,索引从0开始;当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,最后一个元素的索引是len(a) - 1
    如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素,以此类推,可以获取倒数第2个、倒数第3个

3)可以通过切片访问其中的多个元素
4) list相关函数,可以通过help(list)查看

list相关操作:

添加

append(元素) : 末尾添加元素
extend(列表) : 合并另外一个列表
insert(索引位置,元素): 在某个位置插入元素

>>> a=[2,1,2]
>>> a[0]=3		    
>>> a
[3, 1, 2]
>>> b
[4, 7, 6, 10]
>>> a.append(5)
>>> a
[3, 1, 2, 5]
>>> a.extend(b)
>>> a
[3, 1, 2, 5, 4, 7, 6, 10]
>>> a.insert(0,9)
>>> a
[9, 3, 1, 2, 5, 4, 7, 6, 10]
>>> a.insert(1,8)
>>> a
[9, 8, 3, 1, 2, 5, 4, 7, 6, 10]
>>> a.insert(5,1)
>>> a
[9, 8, 3, 1, 2, 1, 5, 4, 7, 6, 10]  

注: 两个列表相并除了用extend方法,用+可以扩展另外一个列表,用*可以扩展自身列表

>>> a=[1,2]
>>> b=[3,4]
>>> a+b
[1, 2, 3, 4]
>>> a*2
[1, 2, 1, 2]

  

删除:
remove(元素): 删除指定元素,如果有多个相同元素只删除第一个;
pop(索引位置): 删除指定位置元素,如果不指定表示删除最后一个元素;

del:

注意三者之间的区别.

>>> a
[9, 8, 3, 1, 2, 1, 5, 4, 7, 6, 10]
>>> a.remove(1)
>>> a
[9, 8, 3, 2, 1, 5, 4, 7, 6, 10]
>>> a.pop(0)
9
>>> a
[8, 3, 2, 1, 5, 4, 7, 6, 10]
>>> a.pop()
10
>>> a
[8, 3, 2, 1, 5, 4, 7, 6]
>>> a=[8, 7, 6, 6, 5, 4, 3, 2, 1]
>>> b=a
>>> del a[0]
>>> a
[7, 6, 6, 5, 4, 3, 2, 1]
>>> b
[7, 6, 6, 5, 4, 3, 2, 1]
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name ‘a‘ is not defined
>>> b
[7, 6, 6, 5, 4, 3, 2, 1] 

 

修改:
直接根据列表索引位置重新赋值即可,注意首先必须保证索引位置没有超出列表的索引范围;
>>> a=[]
>>> a[0]=3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

 

查询:
index(元素): 根据元素内容查询其所在的索引位置;
count(元素): 统计某个元素在列表中有多少个;
index和count的区别: 两者都可以用来查询列表元素,如果元素不在列表中的话index会出现异常,而count会返回0

len(列表): 统计列表的长度,也就是有多少个元素;
sort():
reverse():

>>> a
[8, 3, 2, 1, 5, 4, 7, 6]
>>> a.index(1)
3
>>> a.insert(2,6)
>>> a
[8, 3, 6, 2, 1, 5, 4, 7, 6]
 >>> a.count(3)
1
>>> a.count(6)
2
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6, 6, 7, 8]
>>> a.reverse()
>>> a
[8, 7, 6, 6, 5, 4, 3, 2, 1]
>>> len(a)
9

 

判断某个元素是否存在于列表中也可以使用in的方法

循环遍历列表:

while

for

 

7. 元组

1) tuple称为元组,有序但是元素不可变更,一旦初始化之后就不能再修改;空元组定义为 a=()
2) tuple也可以通过索引访问某一个元素,索引从0开始
3) tuple相关函数:
index(元素): 和列表相同也是根据元祖内容查询它的索引位置;
count(元素): 和列表一样也是统计某个元素出现的次数;
index和count的区别: 两者都可以用来查询tuple元素,如果元素不在tuple中的话index会出现异常,而count会返回0

>>> m=(6,8,10,6)
>>> m.count(6)
2
>>> m.count(10)
1
>>> m.index(10)
2
>>> m.index(6)
0 

 

>>> a=(1,2,3,4)
>>> a.index(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
>>> a.count(0)
0
>>> a.index(1)
0
>>> a.count(1)
1
>>>   

4) 只有一个元素的元组,定义为a=(1,),不能定义为a=(1);

>>> a=(1,)
>>> type(a)
<type ‘tuple‘>
>>> a=(1)
>>> type(a)
<type ‘int‘>

5) 元组的不可变更是指元组的元素指向不可更新,如果元素指向某个列表的时候,列表的内容更新不受限制;

>>> m=(1,2)
>>> m
(1, 2)
>>> a=[‘a‘,‘b‘]
>>> m=(1,2,a)
>>> m
(1, 2, [‘a‘, ‘b‘])
>>> a.append(‘c‘)
>>> a
[‘a‘, ‘b‘, ‘c‘]
>>> m
(1, 2, [‘a‘, ‘b‘, ‘c‘])

  

8. 字典

9. 集合

 

 

 

 

 

以上是关于学习2: 数据类型和变量的主要内容,如果未能解决你的问题,请参考以下文章

学习2: 数据类型和变量

python学习笔记——变量和简单数据类型

java 循环变量

Scala基础学习

python学习笔记2-变量数据类型数据运算

变量的内存分析图