栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础拾遗

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础拾遗

Python-python基础02 本章内容
  1. 模块初识
  2. 数据运算
  3. .pyc是个什么鬼?
  4. 入门知识拾遗
  5. 列表、元组操作
  6. 字符串操作
  7. 字典操作
  8. 集合操作
  9. 文件操作
  10. 字符编码与转码
一、模块初识

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,这里暂时先介绍sys和os模块

sys
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import sys
 
print(sys.argv)
 
 
#输出
$ python test.py helo world
['test.py', 'helo', 'world']  #把执行脚本时传递的参数获取到了
os
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import os
 
os.system("df -h") #调用系统命令
sys和os模块结合
import os,sys
 
os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行
自己编写python tab补全模块
 import sys
 import readline
 import rlcompleter
 
 if sys.platform == 'darwin' and sys.version_info[0] == 2:
     readline.parse_and_bind("bind ^I rl_complete")
 else:
     readline.parse_and_bind("tab: complete")  # linux and python3 on mac

for mac
 #!/usr/bin/env python 
 # python startup file 
 import sys
 import readline
 import rlcompleter
 import atexit
 import os
 # tab completion 
 readline.parse_and_bind('tab: complete')
 # history file 
 histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
 try:
     readline.read_history_file(histfile)
 except IOError:
     pass
 atexit.register(readline.write_history_file, histfile)
 del os, histfile, readline, rlcompleter
for Linux

完成之后就可以使用了

ps:上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫Python/2.7/site-packages目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。 二、数据运算 算数运算

比较运算

赋值运算

逻辑运算

成员运算

身份运算

位运算


*按位取反运算规则(按位取反再加1) 详解

运算符优先级

三、什么是.pyc Python是一门解释型语言?

初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

四、入门知识拾遗 三元运算
result = 值1 if 条件 else 值2

如果条件为真:result = 值1
如果条件为假:result = 值2

进制
  • 二进制,01
  • 八进制,01234567
  • 十进制,0123456789
  • 十六进制,0123456789ABCDEF
计算机内存地址和为什么用16进制? 为什么用16进制
  1. 计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示)
  2. 最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便
  3. 计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好
  4. 为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算
16进制用在哪里
  1. 网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。通过网络抓包,可以看到数据是通过16进制传输的。
  2. 数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式
  3. 一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。
五、列表、元组操作

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

列表:
定义列表
names = ['Teng',"lan",'Eric','Rain','Tom','Amy']
通过下标访问列表中的元素,下标从0开始计数

切片:取多个元素 
names[1:4]#取下标1至下标4之间的数字,包括1,不包括4

追加:
names.append("我是新来的")

插入:
names.insert(2,"强行从Eric前面插入")

修改:
names[2] = "该换人了"

删除:
names.remove("Eric") #删除指定元素
names.pop()#删除最后一个元素

扩展:
names.extend(b)#b 一个新的列表

拷贝:
names.copy()

统计:
names.count("Teng")

获取下标:
name.index("Teng")

排序:
names.sort()

反转:
names.reverse()
元组:

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

names = ("Teng","jack","eric")

ps:它只有2个方法,一个是count,一个是index
六、字符串操作 PS:特性:不可修改
name.capitalize()  首字母大写
name.casefold()   大写全部变小写
name.center(50,"-")  输出 '---------------------Li----------------------'
name.count('lex') 统计 lex出现次数
name.encode()  将字符串编码成bytes格式
name.endswith("Li")  判断字符串是否以 Li结尾
"LetLi".expandtabs(10) 输出'Le      Li', 将t转换成多长的空格 
name.find('A')  查找A,找到返回其索引, 找不到返回-1 
......
七、字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

语法:
info = {
    '1101': "TengLan",
    '1102': "LongZe",
    '1103': "Liya",
}
字典特性:
  • dict是无序的
  • key必须是唯一的,so 天生去重
操作
  增加:info[key] = value
  删除:info.pop("1101")
  	   del info['1103']
  	   info.popitem()#popitem为随机删除
  修改:和增加格式相同key存在为修改,否则为增加
  查找:"1102" in info #标准用法
  		info.get("1102")  #获取
  		info["1105"]  #如果一个key不存在,就报错,get不会,不存在只返回None
PS:多级字典嵌套时:
		变量["key"]["key"]
省、市、区三级菜单是典型的多级嵌套
八、集合

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
s = set([3,5,9,10])      #创建一个数值集合  
  
t = set("Hello")         #创建一个唯一字符的集合  


a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
  
   
  
基本操作:  
  
t.add('x')            # 添加一项  
  
s.update([10,37,42])  # 在s中添加多项  
  
   
  
使用remove()可以删除一项:  
  
t.remove('H')  
  
  
len(s)  
set 的长度  
  
x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员  
  
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制  
九、文件操作 对文件操作流程
  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件
基本操作
f = open('lyrics') #打开文件
first_line = f.readline()
print('first line:',first_line) #读一行
print('我是分隔线'.center(50,'-'))
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印文件
 
f.close() #关闭文件

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读; 不存在则创建;存在则只追加内容;】

“+” 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 r n rn自动转换成 n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab
with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log','r') as f:
     
    ...

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

with open('log1') as obj1, open('log2') as obj2:
    pass
十、字符编码与转码

详细文章:
http://www.cnblogs.com/yuanchenqi/articles/5956943.html
http://www.diveintopython3.net/strings.html

需知:

  1. 在python2默认编码是ASCII, python3里默认是unicode
  2. unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
  3. 在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
 #in python2
	import sys
	print(sys.getdefaultencoding())

	msg = "我爱北京天安门"
	msg_gb2312 = msg.decode("utf-8").encode("gb2312")
	gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")

	print(msg)
	print(msg_gb2312)
	print(gb2312_to_gbk)
 #in python3
    import sys
	print(sys.getdefaultencoding())

	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)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488449.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号