当前位置:   article > 正文

【python基础篇】常用内置对象与操作_可以根据需要修改内置对象,如object和array

可以根据需要修改内置对象,如object和array

目录

学前准备

交互式编写代码

IDE编写代码

常用内置对象

数字常量

字符串常量和表达式

常用列表常量和操作

常见字典常量和操作

常见元组常量和运算

文件

对象GC与共享引用

学习小结


学前准备

在正式开始之前,你需要安装python软件,准备一款好用的IDE工具。墙裂推荐anaconda + pycharm,网上有很多安装教程的博客,这里就不再赘述了。

编写的方式有两种:一是在Dos界面写交互式编码,一是在IDE工具中进行编码

交互式编写代码

  • 使用win+R调出“运行”对话框,输入cmd,再输入python即可进入“交互模式”
  • IDE方式,我使用的是pycharm,在左下方,找到“python console”即可进入“交互模式”

交互模式的优点是,不需要刻意的使用“print”打印,也能自动打印,方便观察每一步的结果

  1. >>> print 2 ** 8
  2. 256
  3. >>> 2 ** 8
  4. 256
  5. >>> lumberjack = 'okay'
  6. >>> lumberjack
  7. 'okay'

或者说打开文本编辑器,(使用win+R调出“运行”对话框,输入notepad回车即可),在文本中输入以下两行python语句,保存为spam.py。然后,我们用“python spam.py”命令运行该文件

  1. ### file: spam.py
  2. print 2 ** 100
  3. print 'Spam!'
  4. >>> python spam.py
  5. 2 ** 100
  6. 'Spam!'

IDE编写代码

我们选择pycharm,即可开始代码练习,将代码明确保存为.py格式,使用菜单栏的“run”→“run...” 运行该代码

  1. ### file: threenames.py
  2. a = 'dead'
  3. b = 'parrot'
  4. c = 'sketch'
  5. print a, b, c
  6. Output:dead parrot sketch

IDE中如果要观察每一步的结果,则需要Debug


常用内置对象

python内置对象优点

  • 内置对象使程序更容易编写。例如,集合(列表)和搜索表(字典),可以马上使用
  • 内置对象是扩展的组件。例如,堆栈数据结构也许会实现为管理和定制内置列表的类,而python内置了
  • 内置对象往往比定制的数据结构更有效率。python的内置类型优化了用C实现数据结构的算法
  • 内置对象是语言的标准的一部分。python借鉴了依靠内置工具的语言Lisp,汲取了C++编程框架的优点

内置对象

对象类型例子  常量/创建
数字1234,3.1415,999L,3+4j,Decimal
字符串‘spam’,“guido's’’
列表[1,[2,‘three’],4]
字典{‘food’:‘spam’,‘taste’:‘yum’}
元组(1,‘spam’,4,‘U’)
文件myfile=open(‘eggs’,‘r’)
其他类型集合、类型、None、布尔型

数字、字符串、元组具有不可变性,即对象创建后不能更改。

字符串、列表、元组都属于序列,可以对序列进行一些通用的操作,如索引、合并以及分片,同时每个内置对象也有特定的方法调用。

字典是唯一具有映射属性的对象,没有左右位置关系,支持键值对操作

关于多态的问题

操作符取决于被操作的对象,这就是多态。例如,‘a’+‘b’和1+2,输出的结果分别是ab和3。操作符是‘+’,由于被操作对象不同,输出的结果呈现不同的结果。

 

数字常量

数字常量
1234,-24,0一般整数(C语言长整型)
88888888888888888888L长整型数(无限大小)
1.23,3.14e-10,4E210,4.0e+210浮点数(C语言双精度浮点数)
0177,0x9ff,0xff整数的八进制和十六进制数常量
3+4j,3.0j+4.0j,3j复数常量

python表达式操作符及程序

操作符描述
yield x生成器函数发送协议(2.5版新增)
lambda args:expression生成匿名函数
x if y else z三元选择表达式(2.5版新增)
x or y逻辑或(只有x为假,才会计算y)
x and y逻辑与(只有x为真,才会计算y)
 not x逻辑非
 x<y,x<=y,x>y,x>=y,x!=y,x is y,x is not y,x in y,x not in y比较操作,值相等操作,对象身份测试,序列成员测试
 x | y位或
 x ^ y位异或
 x & y位与
 x << y,x>>yx左移或右移y位
 -x + y,x - y加法/合并,减法
 x * y,x % y,x / y,x // y乘法/重复,余数/格式化,除法
 -x,+x,~x,x**y一元减法,识别,按位求补,幂运算
 x[i],x[i:j],x.attr,x(...)索引,分片,点号取属性运算,函数调用
 (...),[...],{...},‘...’元组,列表,字典,字符串

其他知识点

oct(十进制)、hex(十进制),分别表示八进制和十六进制

int(数字,进制)可以将八进制、十六进制的数字(字符串形式)转化为十进制

内置数学工具:math.pi,math.e,math.sin,math.sqrt(),abs(),x**y / pow(x,y),round(2.567,2)

集合:x=set('abcda'),output :{'c', 'd', 'b', 'a'},可以看出集合中的元素是不重复且无序的。

 

字符串常量和表达式

操作符描述
s1 = ' '空字符串
s2 = "spam's"双引号
block = """..."""三重引号块
s3 = r'\temp\spam'Raw字符串
s4 = u'spam'Unicode字符串
s1 + s2,s2 * 3合并,重复
s2[i],s2[i:j],len(s2)索引,分片,求长度
"a %s parrot" % type字符串格式化
s2.find('pa')搜索
s2.rstrip()移除空格
s2.replace('pa','xx')替换
s1.split(' , ')用占位符分隔
s1.isdigit()测试字符串内容是否为数字,返回bool值
s1.lower()转换为小写字母
for x in s2迭代
'spam' in s2成员关系

单双引号字符串是一样的,"knight's"也可以表示为'knight\'s'或者"knight\"s"

用转义序列代表特殊字节

转义序列:反斜杠+特殊字节编码。例如,这里有五个字符的字符串,其中嵌入了一个换行符'\n'和一个制表符'\t'

>>>s = 'a\nb\tc'

字符串反斜线字符

转义意义
\\反斜线(保留\)
\'单引号(保留 ' )
\"双引号(保留 " )
\a响铃(BEL)
\b退格(BS)
\f换页(FF)
\n换行(LF)
\r返回(CR)
\t水平制表(HT) 
\v垂直制表(VT)
\uhhhhUnicode 16位的十六进制值
\UhhhhUnicode 32位的十六进制值
\xhh十六进制值
\000八进制值
\0空字符(NULL)

字符串抑制转义

在字符串前面增加‘r’或是加入转义字符,如下所示

  1. myfile = open('C:\new\text.dat','w')
  2. myfile = open(r'C:\new\text.dat','w') #方法一
  3. myfile = open('C:\\new\\text.dat','w') #方法二

索引和分片

偏移量是从0开始的,负偏移看作是从结束处反向计数

  1. >>> S = 'spam'
  2. >>> S[0], S[-2] # 索引
  3. ('s', 'a')
  4. >>> S[1:3], S[1:], S[:-1] # 分片
  5. ('pa', 'pam', 'spa')

扩展分片:第三个值表示步长

  1. >>> S = 'abcdefghijklmnop'
  2. >>> S[1:10:2]
  3. 'bdfhj'
  4. >>> S[::2]
  5. 'acegikmo'
  6. >>> S = 'hello'
  7. >>> S[::-1]
  8. 'olleh'
  9. >>> S = 'abcedfg'
  10. >>> S[5:1:-1]
  11. 'fdec'

字符串的修改

在第4章我们提到过,字符串本身是不支持修改的,我们用如下的方法来进行修改:

  1. >>> S = 'spam'
  2. >>> S[0] = "x"
  3. Raises an error!
  4. >>> S = S + 'SPAM!'
  5. >>> S
  6. 'spamSPAM!'
  7. >>> S = S[:4] + 'Burger' + S[-1]
  8. >>> S
  9. 'spamBurger!'
  10. >>> S = 'splot'
  11. >>> S = S.replace('pl', 'pamal')
  12. >>> S
  13. 'spamalot'

字符串转列表,列表转字符串

  1. >>> S = 'spammy'
  2. >>> L = list(S)
  3. >>> L
  4. ['s', 'p', 'a', 'm', 'm', 'y']
  5. >>> L[3] = 'x' # Works for lists, not strings
  6. >>> L[4] = 'x'
  7. >>> L
  8. ['s', 'p', 'a', 'x', 'x', 'y']
  9. >>> S = ''.join(L)
  10. >>> S
  11. 'spaxxy'

字符串方法实例:文本解析

  1. >>> line = 'aaa bbb ccc'
  2. >>> col1 = line[0:3]
  3. >>> col3 = line[8:]
  4. >>> col1
  5. 'aaa'
  6. >>> col3
  7. 'ccc'
  8. >>> line = 'aaa bbb ccc'
  9. >>> cols = line.split()
  10. >>> cols
  11. ['aaa', 'bbb', 'ccc']
  12. >>> line = 'bob,hacker,40'
  13. >>> line.split(',')
  14. ['bob', 'hacker', '40']
  15. >>> line = "i'mSPAMaSPAMlumberjack"
  16. >>> line.split("SPAM")
  17. ["i'm", 'a', 'lumberjack']

 

常用列表常量和操作

操作解释
L1 = []空列表
L2 = [0,1,2,3]四项:索引为0到3
L3 = ['abc',['def','ghi']]嵌套的子列表
L2[i]索引
L3[i][j]索引的索引
L2[i:j]分片
len(L2)求长度
L1 + L2合并
L1 * 3重复
for x in L迭代
3 in L2成员关系
L2.append(4)增长
L2.extend([5,6,7])扩展
L2.sort()排序
L2.index(1)搜索
L2.insert(I,X)插入
L2.reverse()反转
del L2[k]裁剪索引
del L2[i:j]裁剪分片
L2.pop()删除列表末端元素,也可以按索引删除
L2.remove(2)按索引删除列表中某元素
L2[i:j] = []清空列表
L2[i] = 1索引赋值
L2[i:j] = [4,5,6]分片赋值
range(4)生成整数列表
xrange(0,4)返回一个生成器(在版本3.0中已移除)
L4 = [x**2 for x in range(5)]列表解析
L3.count('abc')对‘123’进行计数

 

常见字典常量和操作

操作解释
D1 = {}空字典
D2 = {'spam':2,‘eggs’:3}两项目字典
D3 = {'food':{'ham':1,'egg':2}}嵌套的字典
D2['eggs']以键进行索引
D3['food']['ham']索引的索引
D2.has_key('eggs')成员测试
'eggs' in D2成员测试
D2.keys()键列表
D2.values()值列表
D2.copy()复制
D2.get(key,default)获取key,找不到返回default值
D2.update(D1)合并
D2.pop(key)按键索引删除元素
len(D1)长度(储存的元素的数目)
D2[key] = 42新增/修改键
del D2[key]删除键
D4 = dict.fromkeys(['a','b'])构造字典技术
D5 = dict(zip(keyslist,valslist))构造字典技术
D6 = dict(name='Bob',age=42)构造字典技术

字典能用作稀疏数据的存取,这一点在实际生活中是经常用到的。

举出五种创建字典的方法

  1. {'a':0,'b':1}
  2. D = {}
  3. D['a'] = 0
  4. D['b'] = 1
  5. dict('a'=0,'b'=1)
  6. dict(['a',0],['b',1])
  7. dict(zip(['a','b'],[0,1]))

 

常见元组常量和运算

运算解释
()空元组
t1 = (0,)单个元素的元组(非表达式)
t2 = (0,'Ni',1.2,3)四个元素的元组
t2 = 0,'Ni',1.2,3四个元素的元组
t3 = ('abc',('def','ghi'))嵌套元组
t1[i]索引
t3[i][j]索引的索引
t1[i:j]分片
len(t1)长度
t1 + t2合并
t2 * 3重复
for x in t2迭代
'spam' in t2成员关系

列表和元组的区别:列表提供可变性,元组提供不可变性。

 

文件

myfile = open('myfile','w')

参数‘w’是指写入。'r'是指读取,是默认值,‘a’是在文件尾部追加内容。

  1. >>> D = {'a': 1, 'b': 2}
  2. >>> F = open('datafile.pkl', 'wb')
  3. >>> import pickle
  4. >>> pickle.dump(D, F) # Pickle any object to file
  5. >>> F.close()
  6. >>> F = open('datafile.pkl', 'rb')
  7. >>> E = pickle.load(F) # Load any object from file
  8. >>> E
  9. {'a': 1, 'b': 2}

以上是用pickle模块来储存python的原生对象

 

对象GC与共享引用

python中,类型是在运行过程中自动决定的,而不是通过代码去声明。

>>>a = 3

上面的代码反映了python语言中所有赋值的操作:

  1. 创建一个对象来代表值3
  2. 创建一个变量a,如果它还没有创建的话
  3. 将变量与新的对象相连接

其中,a代表对象,3代表变量名。类型是属于对象的,而不是变量

关于对象的垃圾收集,我们给出如下的代码,每当一个变量名被赋予了一个新的对象,之前那个对象占用的空间就会被收回。

  1. >>>a = 3
  2. >>>a = 'spam'

共享引用

  1. >>>a = 3
  2. >>>b = a
  3. >>>a = 'spam'

以上代码,只会改变a的值,b的值是不变的。在第4章,我们所介绍过的,整数是不可变的。

  1. >>>L1 = [ 2,3,4]
  2. >>>L2 = L1
  3. >>>L1 = 24

以上代码,仍然只改变L1的值,L2的值也是不变的。L1的列表自身也是对象,就像整数和字符串一样,自身是不会被改变的。

  1. >>>L1 = [ 2,3,4]
  2. >>>L2 = L1
  3. >>>L1[0] = 24

以上代码,L1和L2的值都被改为了[24,3,4]。L1列表中的元素是可以被改变的。如果我们不想L2发生改变,我们需要做如下改动

  1. >>>L1 = [ 2,3,4]
  2. >>>L2 = L1[:]
  3. >>>L1[0] = 24

L1[:]是对L1的对象的copy。字典D有两种的copy方法,分别是copy()和deepcopy()

共享引用和相等

  1. >>>L = [ 1,2,3]
  2. >>>M = L
  3. >>>L == M
  4. True
  5. >>>L is M
  6. True
  1. >>>L = [ 1,2,3]
  2. >>>M = [ 1,2,3]
  3. >>>L == M
  4. True
  5. >>>L is M
  6. False

"==操作符",测试两个被引用的对象是否有相同的值,"is操作符"是在检查对象的同一性

  1. >>>X = 42
  2. >>>Y = 42
  3. >>>X == Y
  4. True
  5. >>>X is Y
  6. True

这里因为小的整数和字符串会被缓存并复用,所以is告诉我们X和Y是一个相同的对象。我们能查询python对于一个对象重复的引用次数,如下所示:

  1. >>>import sys
  2. >>>sys.getrefcount(42)
  3. 23

学习小结

随着python的发展,内置的对象操作或许还会扩展更多,也会更易用,我们需要不断学习,不断更新自己的知识。

送大家一句鸡汤:知识要用起来才会变成自己的,经验不在于多,而在于精。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/397102
推荐阅读
相关标签
  

闽ICP备14008679号