【心灵鸡汤】
推荐书籍:《三体》《百年孤独》《硅谷钢铁侠》
【Tips && Review】
1. vim中,tab键就是一个tab键,一个tab不是4个空格,会比4个空格要长,所以执行程序时会报错。所以如果在linux中编写代码,不要用tab。
2. 格式化,如果单行,可以"" or '' 如果多行,用''' ''' or """ """
3. python 没有常量的概念,代表常量要通常要大写, 例如: MYSQL_CONNECTION = '192.168.1.23'
4. 能直接import的就是标准库,python自带100多个。
使用三方库,下载安装方式(pip或者源码),然后导入即可。下载源可修改成国内镜像源:豆瓣, linux下修改配置文件即可。
5. 全局三方库存放位置:site-packages目录 or dist-packages目录 (可用sys.path查看)
6. python3: pyc文件会默认放到__pycache__目录下
python是先编译后解释,实际是将pyc交给解释器。
手动执行一个py文件,不会生成pyc,除非是执行另一个程序去调用这个py文件,才会生成pyc。
如果py文件有改动,先会判断py和对应的pyc的时间是否一致,如果py改动了,那py文件修改时间也会是新的,这时就会重新编译。
7. 退出程序
exit()
或
exit('Bye!') #退出时打印字符串
或
sys.exit() #前提是import sys
8. user = 'hexu'
passwd = '123456'
==> 可以写成: user,passwd = 'hexu','123456' # 由这个引出列表的概念
9. 数据类型
包括:数字、布尔值、字符串、列表、元组、字典
查看类型:type()
(1)数字
整型:int
浮点型:float
长整型:long
(2)布尔值(用作判断)
True是1
False是2
(3)元组(只读)
# 定义一个元组
read = ('AAA','BBB','CCC','AAA')
# 打印
print(read)
==> ('AAA', 'BBB', 'CCC', 'AAA')
# 计数
print(read.count('AAA'))
==> 2
# 找索引,有重复的数据时,只能找到重复数据的第一个索引
print(read.index('AAA'))
==> 0
【重点介绍列表、字符串、字典的使用】
1. 列表
python列表:解决一个变量中存多个值。python叫列表,其它语言叫数组,列表中每一个值叫做一个元素,列表中也可以放变量,可以放元组。
列表中的元素开始都是从0开始,取最后一个是[-1],这叫下标。
切片:顾首不顾尾,不能反着取值,也就是不能取倒数第一 【至】 倒数第5这类的
列表中也可以放列表、元组
# 列表基本格式
team = ['aaa','bbb','ccc','ddd','eee','fff','ggg','hhh']
print(team)
==> ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh']
# 4-5列插入'alex','wupeiqi'
team.insert(3,'alex')
team.insert(4,'wupeiqi')
print(team)
==> ['aaa', 'bbb', 'ccc', 'alex', 'wupeiqi', 'ddd', 'eee', 'fff', 'ggg', 'hhh']
# 取出第3-6人
print(team[2:6])
==> ['ccc', 'alex', 'wupeiqi', 'ddd']
# 取前五人
print(team[:5])
==> ['aaa', 'bbb', 'ccc', 'alex', 'wupeiqi']
# 取第5到最后的人
print(team[4:])
==> ['wupeiqi', 'ddd', 'eee', 'fff', 'ggg', 'hhh']
# 取后4人
print(team[-4:])
==> ['eee', 'fff', 'ggg', 'hhh']
# 删除第7个人
team.remove(team[6])
print(team)
==> ['aaa', 'bbb', 'ccc', 'alex', 'wupeiqi', 'ddd', 'fff', 'ggg', 'hhh']
# 删除新加入的两个人:'alex','wupeiqi'
del team[3:5] # del 可以删除任何数据
print(team)
==> ['aaa', 'bbb', 'ccc', 'ddd', 'fff', 'ggg', 'hhh']
# 修改元素
team[0] = 'aaa-leader'
print(team)
==> ['aaa-leader', 'bbb', 'ccc', 'ddd', 'fff', 'ggg', 'hhh']
# 隔人打印=迈2步
print(team[0::2]) # 也可以写成 print(team[::2])
==> ['aaa-leader', 'ccc', 'fff', 'hhh']
# 取完一次还可继续取
>>> name = ['hexu','liuwei']
>>> name[0][0]
'h'
# index只会显示找到的第一个索引
>>> name = ['hexu','liuwei','hexu']
>>> name.index('hexu')
0
# 排序:排序字母从a-z,数字从小到大 注意:py3中,sort不会将数字和字符串同时排序,py2可以
name = ['c','d','a','e','b']
name.sort()
print(name)
==> ['a', 'b', 'c', 'd', 'e']
# 列表追加
name = ['c','d','a','e','b']
name1 = ('xxx','yyy','zzz')
name.extend(name1)
print(name)
>>> ['c', 'd', 'a', 'e', 'b', 'xxx', 'yyy', 'zzz']
# pop() 默认是将最后一个元素删除
list = [1,2,3,4,5,6]
list.pop()
print(list)
==> [1, 2, 3, 4, 5]
# 删除第四个元素
list = [1,2,3,4,5,6]
list.pop(3)
print(list)
==> [1, 2, 3, 5, 6]
# 反转
list = [1,2,3,4,5,6]
list.reverse()
print(list)
==> [6, 5, 4, 3, 2, 1]
# 操作列表的函数
list = [1,2,3,4,5,6]
print(len(list)) # 打印列表的长度
==> 6
print(max(list)) # 打印列表中最大的值
==> 6
print(min(list)) # 打印列表中最小的值
==> 1
列表中增加一个列表,name.copy()的话,如果把列表中的列表更新,两边都会同时更新 ,因为内存地址是一致的
完全cpoy:
import copy # 三方库
copy.copy() # 浅copy
copy.deepcopy() # 深copy 内存数据也copy过来了
2. 字符串
#定义字符串
string = 'Hello World!'
# 打印字符串
print(string)
==> Hello World!
# 查看字符串长度,空格也算一个字符
print(len(string))
==> 12
# 字符类型
print(type(string))
==> <class 'str'>
# strip() 去掉字符串结尾的空格,可以用作判断输入的内容结尾有空格时,也会识别
string = 'Hello World! '
print(string.strip())
==> Hello World!
# 分割 split()
name = 'hexu,xuelu'
name1 = name.split(',') # 以逗号进行分隔
print(name1) # 输出的结果是列表
==> ['hexu', 'xuelu']
# 合并 join()
print('|'.join(name1)) # 用'|' 将刚才生成的列表合并
==> hexu|xuelu
# 判断字符串有没有空格,有返回True,没有则返回False
msg = 'I am a Man!'
print('' in msg)
==> True
# 变量赋值的两种形式
_first_ = 'My name is {name},{age} years old'
second = _first_.format(name = 'Hexu', age = 28)
print(second)
==> My name is Hexu,28 years old
_first_ = 'My name is {0},{1} years old'
second = _first_.format('Xuelu', 26)
print(second)
==> My name is Xuelu,26 years old
# 切片
msg = 'ABCDEFGHIJKLMN'
print(msg[3:7:2]) # 先取出第4-7的字符:DEFG 最后的2表示步长,隔2取字符
==> DF
# 以输出的字符为中心,平均分配40个‘#’,也就是一边一半
print(string.center(40, '#'))
==> ##############Hello World!##############
# 判断字符串中有没有某些内容
string = 'This is a new begining!'
if string.find('hero'):
print(string)
else:
print('没有找到你输入的内容')
==> This is a new begining! # 字符串里没有‘hero’,为什么也打印出来了?
# isdigit表示判断age的值是不是数字类型:
age = '28'
if age.isdigit():
print('True')
else:
print('False')
# 规定用户必须输入数字类型时,可使用isdigit
age = input('年龄: ')
if age.isdigit():
age = int(age)
print('你输入的年龄是:',age)
else:
print('输入有误,必须是数字,请重新输入.')
# 判断有无特殊字符,有返回False,没有则返回True
name = 'Hero#CC'
print(name.isalnum())
==> False
# startswith endswith 判断是以什么字符开头,匹配到返回True,匹配不到返回False
car = 'My car is a CC!'
print(car.startswith('M'))
==> True
print(car.startswith('My'))
==> True
print(car.endswith('Passat'))
==> False
# 大小写字符转换
color = 'blue,red,balck,Yellow'
print(color.upper()) # 全部转成大写
==> BLUE,RED,BALCK,YELLOW
print(color.lower()) # 全部转成小写
==> blue,red,balck,yellow
print(color.capitalize()) # 首个字母大写
==> Blue,red,balck,Yellow
3. 字典
没有下标,通过key取值
打印出的字典是无序的
几个需要注意使用的函数:
items 转换成列表了,数据量大的时候不要这么做,很耗时
setdefault 如果存在就返回 如果不存在,就默认添加k,v值
popitem 随机删,不要用
fromkeys 不要用
id_db = {
1111:{
'name':'Hexu',
'age':28,
'addr':'Beijing'
},
2222:{
'name':'Xuelu',
'age':26,
'addr':'Shahe'
}
}
# 字典是无序的
print(id_db)
==> {2222: {'name': 'Xuelu', 'addr': 'Shahe', 'age': 26}, 1111: {'name': 'Hexu', 'addr': 'Beijing', 'age': 28}}
# 通过key取value
print(id_db[1111])
==> {'name': 'Hexu', 'addr': 'Beijing', 'age': 28}
# 另一种通过key取value的方式,get取值不报错
v = id_db.get(1111)
print(v)
==> {'name': 'Hexu', 'addr': 'Beijing', 'age': 28}
# 修改key名字
id_db[1111]['name'] = 'new-Hexu'
print(id_db)
==> {2222: {'name': 'Xuelu', 'addr': 'Shahe', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}
# 添加key-value,无序的
id_db[2222]['qq_num'] = '664076968'
print(id_db)
==> {2222: {'name': 'Xuelu', 'addr': 'Shahe', 'qq_num': '664076968', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}
# 删除key,对应的值也会跟着删除
id_db[2222].pop('addr')
print(id_db)
==> {2222: {'name': 'Xuelu', 'qq_num': '664076968', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}
# 将字典test加入到id_db字典中
test = {
3333:{
'name':'bbbb '
}
}
id_db.update(test)
print(id_db)
==> {3333: {'name': 'bbbb'}, 2222: {'name': 'Xuelu', 'qq_num': '664076968', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}
# 取出所有value,输出的结果是以列表的形式展现
print(id_db.values())
==> dict_values([{'name': 'bbbb'}, {'name': 'Xuelu', 'qq_num': '664076968', 'age': 26}, {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}])
# 取出所有key,输出的结果是以列表的形式展现
print(id_db.keys())
==> dict_keys([3333, 2222, 1111])
# 判断某个key是否在整个字典中,
print(1111 in id_db)
==> True