【心灵鸡汤】
推荐书籍:《三体》《百年孤独》《硅谷钢铁侠》
【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