day02-模块、数据类型、三元运算、列表、元组
1.1 模块
导入系统自带模块
1 import sys 2 3 #print(sys.path)#打印环境变量 4 5 6 print(sys.argv) #打印脚本相对路径 7 8 print(sys.argv[2]) 9 10 11 12 13 import os 14 15 #cmd_res = os.system("dir") #打印当前路径下的文件,只能显示,不能保存结果为一个变量 16 17 cmd_res = os.popen("dir").read() #这样可以保存为变量 18 19 print(cmd_res)#打印变量 20 21 22 23 os.mkdir("new_dir")#创建新目录
新建一个模块,即是一个Python脚本。
导入模块时,默认在当前目录下寻找这个模块,要么在base\lib\site_packages下
1.2 Pyc是什么?
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
1.3 数据类型
1)数字(int(整型)、long(长整型)、float(浮点型)、复数)
在Python3中,取消了长整型这个概念,所有的都是int整型。
2)布尔值
真或假,1或0
a = True
if a:
print("a")
3)字符串
Str,文本总是Unicode
4)bytes类型
二进制数据由bytes类型表示
1 msg = "周琼杰" 2 3 print(msg) 4 5 print(msg.encode(encoding="utf-8")) #将字符串类型转换成bytes类型 6 7 print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))#将bytes类型转换成字符串类型
1.4 三元运算
1 a,b,c =1,3,5 2 3 d =a if a>b else c #如果a大于b,那么d就等于a,否则d就等于c 4 5 print(d)
1.5 列表
1 names = ["zhouqiongjie","zhangdan","qiongjie","dandan"] #列表 2 3 print(names) 4 5 print(names[0],names[3]) #取列表中的第一个和第4个值 6 7 print(names[1:3]) #顾头不顾尾,取第二个和第三个值 8 9 print(names[-1])#在不知道列表有多长的情况下,取最后一个值 10 11 print(names[-2:]) #取列表中最后两个值 12 13 print(names[:3]) #取前面三个值
1 names.append("lisi") #追加插入 2 3 print(names) 4 5 6 7 names.insert(1,"wangwu") #在列表指定位置插入,其它值后移 8 9 print(names) 10 11 12 13 names[1] ="zhaoliu" #替换一个值 14 15 print(names)
#删除有3中方式
1 names.remove("zhaoliu") 2 3 del names[1] 4 5 names.pop(1) 6 7 print(names)
1 print(names.index("lisi")) #查找李四所在列表中的位置 2 3 print(names[names.index("lisi")]) 4 5 6 names = ["zhouqiongjie","zhangdan","qiongjie","dandan"] 7 8 print(names.count("zhangdan")) #统计这个值有几个
1 #names.clear()#清空列表 2 3 #names.reverse() #将列表中的值反转 4 5 #names.sort() #按照Assic码顺序进行排序 6 7 names02 =["haha","xixi","heihei"] 8 9 names.extend(names02) #将两个列表合并 10 11 #del names02 #删除一个变量 12 13 print(names,names02)
1 names = ["zhouqiongjie","zhangdan","qiongjie","dandan"] 2 3 names2 = names.copy() 4 5 print(names,names2) 6 7 names[1] = "周琼杰" #只能使用下标,进行赋值 8 9 print(names) 10 11 print(names2) #names2的值不变
子列表的情况下,浅拷贝
1 names = ["zhouqiongjie","zhangdan",["haha","hehe"],"qiongjie","dandan"] 2 3 names2 = names.copy() 4 5 print(names,names2) 6 7 names[0] = "周琼杰" #只能使用下标,进行赋值 8 9 names[2][0] = "哈哈" 10 11 print(names) 12 13 print(names2)
#打印值,names进行了浅copy。第一层不变,但是第二层变了
['zhouqiongjie', 'zhangdan', ['哈哈', 'hehe'], 'qiongjie', 'dandan']
导入copy模块
1 import copy 2 3 names = ["zhouqiongjie","zhangdan",["haha","hehe"],"qiongjie","dandan"] 4 5 names2 = copy.copy(names)#实现浅copy的三种方式 6 ‘’’ 7 names2=names[:] 8 9 names2=list(names) 10 ‘’’ 11 12 print(names,names2) 13 14 names[0] = "周琼杰" #只能使用下标,进行赋值 15 16 names[2][0] = "哈哈" 17 18 print(names) 19 20 print(names2)
深拷贝
1 import copy 2 3 names = ["zhouqiongjie","zhangdan",["haha","hehe"],"qiongjie","dandan"] 4 5 names2 = copy.deepcopy(names) #深拷贝,第一层和第二层都变 6 7 print(names,names2) 8 9 names[0] = "周琼杰" #只能使用下标,进行赋值 10 11 names[2][0] = "哈哈" 12 13 print(names) 14 15 print(names2)
#打印输出,
['zhouqiongjie', 'zhangdan', ['haha', 'hehe'], 'qiongjie', 'dandan']
列表的循环:
1 names = ["zhouqiongjie","zhangdan",["haha","hehe"],"qiongjie","dandan"] 2 3 print(names[0:-1:2]) #步长切片 4 5 print(names[::2]) 6 7 8 9 for i in names: #循环打印 10 11 print(i)
1.6 元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
names=(“zhou”,”zhang”) #只能查询,不能修改