一、初识模块2
标准库:
- sys模块:
1 import sys 2 3 print(sys.path) #新建文件名不能与导入的模块名相同 4 print(sys.argv)
- os模块:
1 import os 2 3 cmd_res = os.system("dir")#执行命令,不保存结果 4 cmd_res = os.popen("dir").read() 5 print("-->",cmd_res) 6 7 os.mkdir("new_dir")#新建目录
第三方库:
例如自行写一个login.py的模块用以将来使用时调用
1 import getpass 2 3 _username = ‘Irlo‘ 4 _password = ‘abc123‘ 5 username = input("username:") 6 password = getpass.getpass("password:") #pycharm中getpass不可用 7 8 if _username == username and _password == password: 9 print("Welcome user {name} login...".format(name=username)) 10 else: 11 print("Invalid username or password!")
以后想要使用这个模块时直接调用“import login”即可。调用这个模块时要确保login.py与应用文件在同一目录下,或者将login.py存放在site-packages文件夹中。
在调用login.py的模块时会自动生成一个login.pyc文件,python在第一次执行代码的时候先预编译一次存为.pyc,下一次运行的时候查找与运行文件同名的.pyc文件,比较两个文件的修改时间,如果.py文件比较新,则重新创建一个.pyc,反之则直接执行。
二、数据类型
数字:
- int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1;
在64位机器上,整数的位数为64位,取值范围为-2**63~2**63-1.
- long(长整型)
在python3里没有长整形,python3会帮你自动转换
- float(浮点型)
3.14和314.1592E-4是浮点数的例子,E标记表示10的幂
- complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj。基本用不上,物理工程类能用上
布尔值:
真或假
1或0------>True or False
字符串:
用"内容"表示。万恶的字符串拼接不要用
字符串格式化输出:
name = "Irlo" print("My name is %s" % name) #输出"My name is Irlo
字符串操作:
1 name = "My name is Irlo" 2 3 print(name.capitalize()) 4 print(name.count("m")) 5 print(name.center(50,"-")) 6 print(name.endswith("lo")) 7 print(name.find("s")) 8 print(name.format(name="Irlo",year=26)) 9 print(name.isalnum()) 10 print("234".isdecimal())#判断是否为十进制 11 print("1A".isdigit())#判断是否为数字 12 print("1A".isidentifier())#判断是否为一个合法的标识符 13 print("33.2".isnumeric())#判断是否只有数字 14 print("My Name Is ".istitle())#判断是否是标题,如果首字母都是大写就算是 15 print("+".join(["1","2","3"]))#把列表按照适当的方式变成字符串 16 print(name.ljust(50,"*")) 17 print("Irlo/n".lstrip())#strip会去除两边的空格和回车,lstrip会去除左边的空格和回车 18 print(name.maketrans())
str operation
列表:
1 name = ["Irlo","Xiaoxiao","Dali"] 2 3 name_list = list(["Irlo","Xiaoxiao","Dali"])
列表操作:索引、增加、删除、修改、切片、循环、包含
list operation
列表的操作中copy比较特殊
1 import copy#完全复制需要导入模块copy 2 names = ["JiYuchi","YuTao",["XiaoXiao","LiuSijia"],"DengKai","ChenXiaojie"] 3 name2 = copy.deepcopy(names) #深copy(完全复制)尽量不用,因为会占用很大的内存 4 names[1] = "于涛" 5 names[2][0] = "XIAOXIAO" 6 print(names) 7 print(name2) 8 9 names = ["JiYuchi","YuTao",["XiaoXiao","LiuSijia"],"DengKai","ChenXiaojie"] 10 name1 = names.copy()#浅copy,只copy第一层 11 names[1] = "于涛" 12 names[2][0] = "XIAOXIAO" 13 print(names) 14 print(name1) 15 names = ["JiYuchi","YuTao",["XiaoXiao","LiuSijia"],"DengKai","ChenXiaojie"] 16 for i in names: 17 print(i) 18 #range(1:10:2) 19 print(names[0:-1:2])#选中范围头和尾,步长为2,打印偶数的人名 20 print(names[::2])#当0和-1时可以省略 21 print(names[:])#表示从头全部打印
copy
元组:
元组就是不可以修改的列表,用“()”表示,只有两种操作,一个是count(统计),一个是index(获取下标)
字典:
字典中可以包含多个层级,由key和value组成
info = { "snis1701":‘mingrihua‘, "snis1702":‘tongxuehui‘, "snis1703":‘heidaodage‘, "snis1704":‘guanggao‘, }
字典的常用操作:索引、新增、删除、"键、值、键值对"、循环、长度
1 info = { 2 "snis1701":‘mingrihua‘, 3 "snis1702":‘tongxuehui‘, 4 "snis1703":‘heidaodage‘, 5 "snis1704":‘guanggao‘, 6 } 7 print(info) #字典是无序的,它没有下标 8 #print(info["snis1701"])#取出,用这种方式查找如果字典中不存在的话会报错,不推荐 9 info["snis1701"] = "明日花"#修改 10 info["snis1705"] = "shuicaili"# 如果原字典中没有则添加 11 del info["snis1701"] #python自带的删除方式 12 info.pop("snis1702") #字典的删除方式 13 print(info) 14 print(info.get("snis1706"))#字典中常用的取出、查询方式 15 print("snis1703" in info) #判断字典中是否有这一项;在python 2.x中写作info.has_key("1703")
多重字典:
1 game_catalog = { 2 "Europe and American":{ 3 "BlizzCon":["WOW","Diablo","OverWatch"], 4 "Ubisoft":["Assassin","Rainbow Six","Tom Clancy‘s Ghost Recon"], 5 "Frontier Development":["Elite Dangerous","Planet Coaster","Screamride"], 6 }, 7 "Japan":{ 8 "Capcom":["Resident Evil","Street Fighter","Asura‘s Wrath"], 9 "Square Enix":["Final Fantasy","Dragon Quest","NieR Automata"], 10 "Namco":["Pac-Man","Ace Combat","Tekken"], 11 }, 12 "China":{ 13 "Tencent":["LOL","King of Glory","CrossFire"], 14 "Netease Games":["HearthStone","Heroes of the Storm","StarCraft"], 15 } 16 } 17 18 ‘‘‘ 19 game_catalog["China"]["Tencent"][2] = "Alliance of Valiant Arms" 20 21 game_catalog.setdefault("Korea",{ #setdefult会看你新建字典的key是否已经在原字典中,如果原字典中没有,那么就把新字典加入进去;如果原字典中已经有了,那么就默认原字典的key不变 22 "Nasdaq Game":["Mir2","Aion","XCB"], 23 "Nexon":["Crazyracing","DNF","Counter-Strike Online"], 24 }) 25 ‘‘‘ 26 add = { 27 "Korea":{ 28 "Nasdaq Game":["Mir2","Aion","XCB"], 29 "Nexon":["Crazyracing","DNF","Counter-Strike Online"], 30 } 31 } 32 game_catalog.update(add) #uodate用于更新字典,如果原字典中没有,则新添加进去;如果原字典中已经有了新字典中的key,则更新以新字典内容为准 33 print(game_catalog) 34 35 print(game_catalog.items()) #把字典变为列表
字典知识点拾遗:
info = { "snis1701": ‘mingrihua‘, "snis1702": ‘tongxuehui‘, "snis1703": ‘heidaodage‘, "snis1704": ‘guanggao‘, } b = { "snis1701":"Book", 1:3, 4:9, } info.update(b) print(info) c = dict.fromkeys([5,6,7],[2,{"ubisoft":"Rainbow Six"},"Telsa"])#初始化一个新字典(初始化与原字典无关,所以用dict),前面是key,后面是value print(c) c[7][1]["ubisoft"] = "Assassin" #如果要修改,注意key要完全一致,不然会变成添加 print(c) #用fromkey创建字典只能创建一层,多层的话在修改的时候只能修改一层 for i in info: print(i,info[i])
三、入门知识拾遗
三元运算:
1 a,b,c = 1,2,3 2 3 d = a if a>b else c 4 print(d)
进制:
二进制:0,1
八进制:0,1,2,3,4,5,6,7
十进制:0,1,2,3,4,5,6,7,8,9
十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F #十六进制1位数对应4位二进制
十六进制的表示方法:
BH,后缀法,看到H表示为十六进制的B,结果为11,二进制1011
0X53,前缀法,看到0X表示为十六进制的53,结果为83,二进制1010011(5为0101,3为0011)
bytes:
python3对文本和二进制数据作了更为清晰的区分。文本总是unicode,由str类型表示,二进制数据则由bytes类型表示。python3不会任意隐式的方式混用str和bytes。不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)
1 #str和bytes通过编码和解码的方式互相转换 2 print("哈哈哈哈".encode("utf-8"))# str转bytes的时候要说明str的编码方式,b表示bytes 3 b‘\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88‘ 4 print(b"\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88".decode("utf-8"))#bytes转str的时候要声明转换成str时用什么编码