一、模块
python中提供强大的标准库和第三方库。
sys
1 import sys
2
3 print(sys.path) #打印环境变量
4
5 print(sys.argv) #打印相对路径,但在pycharm中调用绝对路径,所以再pycharm中打印绝对路径
os
1 import os
2
3 cmd_res = os.system("dir") #os.system直接输出到屏幕上,输出之后就没了,不保存结果
4 print(cmd_res) #输出0,只是代表命令执行成功
5
6 cmd_res = os.popen("dir").read() #通过read()从内存中取回
7 print(cmd_res)
8
9 os.mkdir("new_dir") #创建一个新目录
自己写的abc.py模块只能在当前目录下导入,若想在系统的任何地方都使用,可把abc.py模块放到python全局环境变量目录中的site-packages下,可用print(sys.path)查看python环境变量列表。
二、pyc
python可以看作是一种先编译后解释的语言。
python程序在运行时,先查看有无对应的pyc文件,比较其生成时间与源代码修改时间,若生成pyc文件后源代码未修改过,直接载入pyc文件;若源代码已经修改过或python程序是第一次运行,找不到其pyc文件,则先进行编译,然后进行解释,python解释器将编译结果写回到pyc文件中。
三、数据类型
1.数字
python3中支持三种不同的数字类型:
整型(int):取值范围与具体机器有关。
浮点型(float)包括整数部分和小数部分,可采用科学计数法,如2.5E-2==2.5*10^-2
复数(complex)包括实数部分和虚数部分,可用a+bj,或complex(a,b)表示,其中a,b均为浮点型。
2.布尔值
真或假
1 或 0
3.字符串
利用 + 号拼接字符串,每出现一次就在内存中重新开辟一块空间,故不推荐。
具体拼接方法见中第四点,输入。
字符串常用方法
1 >>> name = "zhang is me"
2 >>> name[2:] #分片
3 'ang is me'
4 >>> name.capitalize() #首字母大写
5 'Zhang is me'
6 >>> name.count("a") #字符统计
7 1
8 >>> name.center(50,"-")
9 '-------------------zhang is me--------------------'
10 >>> name.endswith("me") #是否以特定字符结尾
11 True
12 >>> name.find('i') #字符串中第一个特定字符的位置
13 6
14 >>> name.isalnum() #判断是否仅包含英文字符和数字
15 False
16 >>> name.isalpha() #判断是否仅包含英文字符
17 False
18 >>> name.isdecimal() #判断是否仅包含十进制数
19 False
20 >>> '123'.isdigit() #判断是否仅包含整数
21 True
22 >>> '5a'.isidentifier() #判断是否是合法的标识符
23 False
24 >>> '5_a'.islower() #判断字符串中字母是否是小写
25 True
26 >>> '233.3'.isnumeric() #判断字符串中是否仅有数字
27 False
28 >>> 'My Name Is Z'.istitle() #判断是否是标题
29 True
30 >>> 'My Name Is Z'.isprintable() #判断是否可打印,一般tty file,drive file不可打印
31 True
32 >>> '5Aa'.isupper() #判断字符串中字母是否是大写
33 False
1 >>> '+'.join(['1','2','3'])
2 '1+2+3'
3 >>> name.ljust(50,'-') #输出长度为50,并使字符串居左显示,其余位置用 - 填充
4 'zhang is me---------------------------------------'
5 >>> name.rjust(50,'*')
6 '***************************************zhang is me'
7 >>> name.center(50,'@')
8 '@@@@@@@@@@@@@@@@@@@zhang is me@@@@@@@@@@@@@@@@@@@@'
9
10 >>> 'zHAng'.lower() #字符串中字母都变为小写
11 'zhang'
12 >>> 'zHAng'.upper() #字符串中字母都变为大写
13 'ZHANG'
14
15 >>> '\nzhang\n'.lstrip() #去除字符串左空格或换行
16 'zhang\n'
17 >>> '\nzhang\n'.rstrip() #去除字符串右空格或换行
18 '\nzhang'
19 >>> ' zhang\n'.strip() #去除字符串两侧空格或换行
20 'zhang'
21
22 >>> p = str.maketrans("abcdef","123456") #匹配替换
23 >>> 'zhang'.translate(p)
24 'zh1ng'
25
26 >>> 'zhang zz'.replace('z','Z',2) #将z替换为Z,替换前两个
27 'Zhang Zz'
28
29 >>> 'zhang zz'.rfind('z') #从左往右,找到最右边的z的位置
30 7
31
32 >>> 'zhang zz'.split('z') #按某一字符分割字符串为列表
33 ['', 'hang ', '', '']
34
35 >>> 'zhang zz\nrr'.splitlines() #按换行符分割字符串为列表
36 ['zhang zz', 'rr']
37
38 >>> 'zhangWB'.swapcase() #字母大小写交换
39 'ZHANGwb'
40
41 >>> 'zhangWB'.title()
42 'Zhangwb'
43
44 >>> 'zhangWB'.zfill(50)
45 '0000000000000000000000000000000000000000000zhangWB'
1 >>> name2 = "my name is {name} and i am {year} years old"
2 >>> name2.format(name="zhang",year=18)
3 'my name is zhang and i am 18 years old'
4 >>> name2.format_map({'name':'zhang','year':18}) #利用字典
5 'my name is zhang and i am 18 years old'
python3中对文本和二进制数据类型作了更清晰的区分。文本总为Unicode,为str类型,二进制数据为bytes类型。
1 msg="我爱北京天安门"
2 print(msg)
3 print(msg.encode(encoding = "utf-8"))
4 print(msg.encode(encoding = "utf-8").decode(encoding="utf-8"))
输出:
我爱北京天安门
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
我爱北京天安门
View Code
4.列表
列表采用 [ ] 标识 。
创建列表:
1 list = ['one','two',3,4,5.0]
切片:
1 list = ['one','two',3,4,5.0]
2 print(list)
3 print(list[0]) #从左到右索引默认从0开始
4 print(list[-1]) #从右到左索引默认从-1开始
5 print(list[0:3]) #顾头不顾尾
6 print(list[:4]) #输出从0开始到3的所有元素
7 print(list[0:]) #输出从0开始的所有元素
8 print(list[-3:-1]) #输出从-3开始到-2的所有元素
9 print(list[-4:]) #输出从-4开始到-1的所有元素
10 print(list[0::2]) #跳着切
输出结果:
['one', 'two', 3, 4, 5.0]
one
5.0
['one', 'two', 3]
['one', 'two', 3, 4]
['one', 'two', 3, 4, 5.0]
[3, 4]
['two', 3, 4, 5.0]
['one', 3, 5.0]
View Result
增:
1 list = ['one','two','two','three','four','five','six','seven']
2 print(list)
3 list.append('six') #在列表尾追加一个元素
4 print(list)
5 list.insert(1,'new_two') #在列表指定位置插入一个元素
6 print(list)
7 list2 = [1,2,3]
8 list.extend(list2) #合并两张列表
9 print(list,list2)
输出结果:
['one', 'two', 'two', 'three', 'four', 'five', 'six', 'seven']
['one', 'two', 'two', 'three', 'four', 'five', 'six', 'seven', 'six']
['one', 'new_two', 'two', 'two', 'three', 'four', 'five', 'six', 'seven', 'six']
['one', 'new_two', 'two', 'two', 'three', 'four', 'five', 'six', 'seven', 'six', 1, 2, 3] [1, 2, 3]
#copy的使用
import copy
num = ['one','two','three',[1,2],'four']
num2 = num.copy() #浅copy,可理解为只copy第一层,之后的直接copy地址
#浅copy,还可写为num3 = num[:]或num3 = list(num)或list3 = copy.copy(list)
num3 = copy.deepcopy(num) #深copy,完全独立的克隆一份列表
print(num)
print(num2)
print(num3)
print()
num[1]=2
num[3][1]=5 #第一层不变,第二层变
print(num)
print(num2)
print(num3)
输出结果:
['one', 'two', 'three', [1, 2], 'four']
['one', 'two', 'three', [1, 2], 'four']
['one', 'two', 'three', [1, 2], 'four']
['one', 2, 'three', [1, 5], 'four']
['one', 'two', 'three', [1, 5], 'four']
['one', 'two', 'three', [1, 2], 'four']
View Result
删:
1 list = ['one','two',3,4,5.0,6,7]
2 print(list)
3 del list[2] #按位置删除
4 print(list)
5 list.pop() #默认删除最后一个元素
6 print(list)
7 list.pop(3) #按位置删除
8 print(list)
9 list.remove('two') #按元素删除
10 print(list)
11 list.clear() #清空列表
12 print(list)
输出结果:
['one', 'two', 3, 4, 5.0, 6, 7]
['one', 'two', 4, 5.0, 6, 7]
['one', 'two', 4, 5.0, 6]
['one', 'two', 4, 6]
['one', 4, 6]
[]
改:
1 list = ['one','two',3,4,5.0,6,7]
2 print(list)
3 list[1]='new two'
4 print(list)
输出结果:
['one', 'two', 3, 4, 5.0, 6, 7]
['one', 'new two', 3, 4, 5.0, 6, 7]
查:
1 list = ['one','two','two','three','four']
2 print(list)
3 print(len(list)) #输出列表长度
4 print(list.index('two')) #输出第一个所找元素的下标
5 print(list.count('two')) #输出列表中某元素的个数
6 list.reverse() #反转
7 print(list)
8 list.sort() #按ASCII码排序
9 print(list)
10 list = ['one','two','two','three','four']
11 for i in list: #循环
12 print(i)
输出结果:
['one', 'two', 'two', 'three', 'four']
5
1
2
['four', 'three', 'two', 'two', 'one']
['four', 'one', 'three', 'two', 'two']
one
two
two
three
four
View Result
5.元组
元组和列表差不多,只是一旦创建就不能修改,又叫只读列表。
创建元组
1 num = ('one','two','three')
只有两个方法count和index。
6.字典
dictionary是{key:value}的数据类型。字典中的数据是无序的,且key唯一。
用法:
创建字典:
1 info = {
2 'stu1101':"Zhang San",
3 'stu1102':"Li Si",
4 'stu1103': "Wang Wu"
5 }
查:
>>> info = {
'stu1101':"Zhang San",
'stu1102':"Li Si",
'stu1103': "Wang Wu"
}
>>> print(info) #dictionary是无顺序的
{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}
>>> print(info['stu1101'])
Zhang San
>>> print(info.get('stu1101'))
Zhang San
>>> print(info.get('stu1104'))
None
>>> print('stu1102' in info)
True
>>> info = {
'stu1101':"Zhang San",
'stu1102':"Li Si",
'stu1103': "Wang Wu"
}
>>> print(info.values())
dict_values(['Zhang San', 'Li Si', 'Wang Wu'])
>>> print(info.keys())
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>>
改:
info['stu1101'] = "张三"
>>> print(info)
{'stu1101': '张三', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}
增:
>>> info['stu1104'] = "Zhao Liu"
>>> print(info)
{'stu1101': '张三', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1104': 'Zhao Liu'}
删:
>>> del info['stu1101']
>>> print(info)
{'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1104': 'Zhao Liu'}
>>> info.pop('stu1102')
'Li Si'
>>> print(info)
{'stu1103': 'Wang Wu', 'stu1104': 'Zhao Liu'}
>>> info.popitem() #任意删除一个
('stu1104', 'Zhao Liu')
>>> print(info)
{'stu1103': 'Wang Wu'}
其他:
#update
>>> info = {
'stu1101':"Zhang San",
'stu1102':"Li Si",
'stu1103': "Wang Wu"
}
>>> info2 = {
'stu1101':"new Zhang San",
1:2,
3:4
}
>>> info.update(info2) #若存在则替换,不存在则添加
>>> print(info)
{'stu1101': 'new Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 1: 2, 3: 4}
#items 将字典转换为列表,列表元素为key和value组成的元组
>>> print(info.items())
dict_items([('stu1101', 'new Zhang San'), ('stu1102', 'Li Si'), ('stu1103', 'Wang Wu'), (1, 2), (3, 4)])
#fromkeys 通过一个列表生成默认字典
>>> info3 = dict.fromkeys([6,7,8],[1,{"name":"zhang"},444])
>>> print(info3)
{6: [1, {'name': 'zhang'}, 444], 7: [1, {'name': 'zhang'}, 444], 8: [1, {'name': 'zhang'}, 444]}
>>> info3[7][1]['name'] = "li" #修改其中一个key对应的value,所有的value都变
>>> print(info3)
{6: [1, {'name': 'li'}, 444], 7: [1, {'name': 'li'}, 444], 8: [1, {'name': 'li'}, 444]}
#setdefault 若key所对应value已存在,则返回原value,否则返回新value,并加入字典
>>> print(info.setdefault('stu1101',"new Zhang San"))
Zhang San
>>> print(info)
{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}
>>> print(info.setdefault('stu1104',"new Zhang San"))
new Zhang San
>>> print(info)
{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1104': 'new Zhang San'}
#循环
>>> for i in info: #仅输出key
print(i)
stu1101
stu1102
stu1103
stu1104
>>> for i in info:
print(i,info[i])
stu1101 Zhang San
stu1102 Li Si
stu1103 Wang Wu
stu1104 new Zhang San
>>> for k,v in info.items(): #结果同上,但效率低
print(k,v)
stu1101 Zhang San
stu1102 Li Si
stu1103 Wang Wu
stu1104 new Zhang San
7.集合
集合是无序的,不重复的
常用操作
>>> list_1 = [32,4,5,6,6,7,8,7]
>>> print(list_1)
[32, 4, 5, 6, 6, 7, 8, 7]
>>> set_1 = set(list_1) #创建
>>> print(set_1)
{32, 4, 5, 6, 7, 8}
>>> set_2 = set([4,5,876,3,1])
>>> print(set_1,set_2)
{32, 4, 5, 6, 7, 8} {1, 3, 4, 5, 876}
>>> #交集
>>> set_1.intersection(set_2)
{4, 5}
>>> set_1 & set_2
{4, 5}
>>> #并集
>>> set_1.union(set_2)
{32, 1, 3, 4, 5, 6, 7, 8, 876}
>>> set_1 | set_2
{32, 1, 3, 4, 5, 6, 7, 8, 876}
>>> #差集
>>> set_1.difference(set_2)
{32, 8, 6, 7}
>>> set_1 - set_2
{32, 8, 6, 7}
>>> #对称差集
>>> set_1.symmetric_difference(set_2)
{32, 1, 3, 6, 7, 8, 876}
>>> set_1 ^ set_2
{32, 1, 3, 6, 7, 8, 876}
>>> #子集,父集
>>> set_3 = set([5,6])
>>> set_3.issubset(set_1)
True
>>> set_3.issubset(set_2)
False
>>> set_1.issuperset(set_2)
False
>>> set_1.issuperset(set_3)
True
>>> #添加
>>> set_1.add(233)
>>> print(set_1)
{32, 4, 5, 6, 7, 8, 233}
>>> set_1.update([333,666,777])
>>> print(set_1)
{32, 4, 5, 6, 7, 8, 233, 777, 333, 666}
>>> #删除
>>> set_1.remove(333)
>>> print(set_1)
{32, 4, 5, 6, 7, 8, 233, 777, 666}
>>> set_1.remove(999) #元素不存在时报错
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
set_1.remove(999)
KeyError: 999
>>> set_1.discard(233)
>>> print(set_1)
{32, 4, 5, 6, 7, 8, 777, 666}
>>> set_1.discard(999) #元素不存在时不报错
>>> print(set_1)
{32, 4, 5, 6, 7, 8, 777, 666}
>>> set_1.pop()
32
>>> print(set_1)
{4, 5, 6, 7, 8, 777, 666}
#判断某元素在不在集合中
>>> 4 in set_1
True
>>> 4 not in set_1
False