Day02:我的Python学习之路
1、初识模块
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,现在简单的学习2个常见的标准库——sys和os。
(1)系统的标准库sys
# Author:GCL # 系统的标准库sys
import sys # 打印环境变量
print(sys.path)
# 打印相对路径
print(sys.argv)
标准库sys
['F:\\Python\\code\\Day02', 'F:\\Python\\code\\Day02', 'E:\\PythonAnZhuang\\python36.zip', 'E:\\PythonAnZhuang\\DLLs', 'E:\\PythonAnZhuang\\lib', 'E:\\PythonAnZhuang', 'E:\\PythonAnZhuang\\lib\\site-packages']
['F:/Python/code/Day02/MySys_Os.py']
输出
(2)系统的标准库os
# Author:GCL # 系统的标准库os
import os # 执行系统命令,不保存结果,返回执行的状态,成功返回0
statue=os.system("dir")
print(statue)
# 得到返回的结果
ret=os.popen("dir").read()
print(ret)
# 新建文件夹的命令如下
#os.mkdir("newDir")
标准库os
������ F �еľ��� ѧϰ
������к��� 0000-0C4A F:\Python\code\Day02 ��Ŀ¼ 2018/05/05 17:04 <DIR> .
2018/05/05 17:04 <DIR> ..
2018/05/05 20:22 <DIR> .idea
2018/05/04 17:14 181 BytesAndStr.py
2018/05/05 11:45 772 ListCopy.py
2018/05/05 11:22 1,884 MyList.py
2018/05/04 01:38 443 MySys_Os.py
2018/05/05 17:04 1,561 ShoppingCart.py
5 ���ļ� 4,841 �ֽ�
3 ��Ŀ¼ 30,338,977,792 �����ֽ�
0
驱动器 F 中的卷是 学习
卷的序列号是 0000-0C4A F:\Python\code\Day02 的目录 2018/05/05 17:04 <DIR> .
2018/05/05 17:04 <DIR> ..
2018/05/05 20:22 <DIR> .idea
2018/05/04 17:14 181 BytesAndStr.py
2018/05/05 11:45 772 ListCopy.py
2018/05/05 11:22 1,884 MyList.py
2018/05/04 01:38 443 MySys_Os.py
2018/05/05 17:04 1,561 ShoppingCart.py
5 个文件 4,841 字节
3 个目录 30,338,977,792 可用字节
输出
2、pyc文件是什么
经常说Python是一门解释性语言,其实不够准确,想要弄清楚pyc文件到底是什么,就必须清楚Python的运行过程。
Python的运行过程其实类似于Java,先编译后解释,即:Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器解释成机器文件。所以说Python应该是一门先编译后解释的语言。
在说Python的运行过程之前,我们先来说两个概念,PyCodeObject和pyc文件。我们在硬盘上看到的pyc文件自然不必多说,而其实PyCodeObject则是Python编译器真正编译出的结果。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。所以pyc文件其实是PyCodeObject的一种持久化保存方式。
3、Python3的数据类型bytes
在Python3中,文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任意隐式的方式混用str和bytes,所以两者的区分特别清晰。
但是,字符串可以编码成字节包,而字节包可以解码成字符串。
# Author:GCL nameStr="我是Chinese"
# 编码
nameBytes=nameStr.encode('utf-8')
print(nameBytes)
# 解码
nameStr=nameBytes.decode('utf-8')
print(nameStr)
编码与解码
b'\xe6\x88\x91\xe6\x98\xafChinese'
我是Chinese
输出
4、列表
列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。
(1)定义列表与访问单个元素
# Author:GCL print("========定义列表与访问单个元素========")
# 定义列表
names=["Jack","Tom","Mary","Alex"]
print(names)
# 通过下标访问列表中的元素,下标从0开始计数
print(names[0],names[1],names[2],names[3])
# 倒着取的下标
print(names[-4],names[-3],names[-2],names[-1])
定义列表与访问单个元素
========定义列表与访问单个元素========
['Jack', 'Tom', 'Mary', 'Alex']
Jack Tom Mary Alex
Jack Tom Mary Alex
输出
(2)切片——取多个元素
print("========切片========")
# 切片——取多个元素
# 取下标1至下标3之间的数字,包括1,不包括3
print(names[1:3])
# 与上句等价
print(names[1:-1])
# 当从头开始取的时候,下标0可以忽略
print(names[:2])
# 与上句等价
print(names[0:2])
# 如果想取到最后一个元素,应该像如下这么写
print(names[2:])
# 间隔着取元素
print(names[0:-1:2])
print(names[:-1:3])
print(names[::2])
切片——取多个元素
========切片========
['Tom', 'Mary']
['Tom', 'Mary']
['Jack', 'Tom']
['Jack', 'Tom']
['Mary', 'Alex']
['Jack', 'Mary']
['Jack']
['Jack', 'Mary']
输出
(3)追加
print("========追加========")
names.append("追加新成员0")
print(names)
追加
========追加========
['Jack', 'Tom', 'Mary', 'Alex', '追加新成员0']
输出
(4)插入
print("========插入========")
names.insert(1,"插入新成员0")
print(names)
插入
========插入========
['Jack', '插入新成员0', 'Tom', 'Mary', 'Alex', '追加新成员0']
输出
(5)修改
print("========修改========")
names[2]="Tom_Mod"
print(names)
修改
========修改========
['Jack', '插入新成员0', 'Tom_Mod', 'Mary', 'Alex', '追加新成员0']
输出
(6)删除
print("========删除========")
del names[1]
print(names)
# 删除指定元素
names.remove("Tom_Mod")
print(names)
# 删除列表的一个元素,默认是最后一个
names.pop()
print(names)
# names.pop(1)
names.pop(-2)
print(names)
删除
========删除========
['Jack', 'Tom_Mod', 'Mary', 'Alex', '追加新成员0']
['Jack', 'Mary', 'Alex', '追加新成员0']
['Jack', 'Mary', 'Alex']
['Jack', 'Alex']
输出
(7)扩展
print("========扩展========")
ex=[1,2,3,2]
names.extend(ex)
del ex
print(names)
扩展
========扩展========
['Jack', 'Alex', 1, 2, 3, 2]
输出
(8)统计
print("========统计========")
# 统计列表中元素为2的个数
num=names.count(2)
print(num)
统计
========统计========
2
输出
(9)排序与翻转
print("========排序与翻转========")
# Python3中不同数据类型不能放在一起排序
names[2]=""
names[3]=""
names[-2]=""
names[-1]=""
print(names)
# 按照ASCII码的顺序排列
names.sort()
print(names)
# 翻转
names.reverse()
print(names)
排序与翻转
========排序与翻转========
['Jack', 'Alex', '', '', '', '']
['', '', '', '', 'Alex', 'Jack']
['Jack', 'Alex', '', '', '', '']
输出
(10)获取下标
print("========获取下标========")
# 只返回找到的第一个下标
index=names.index("")
print(index)
获取下标
========获取下标========
3
输出
(11)清空列表
print("========清空列表========")
names.clear()
print(names)
清空列表
========清空列表========
[]
输出
(12)拷贝
①.第一种浅拷贝
# Author:GCL names1=["Jack","Tom","Mary",["",""],"Alex"]
# 浅拷贝
# names2=names1.copy()
# 等价于上句
# names2=names1[:]
# 等价于上句
names2=list(names1)
print(names1)
print(names2)
names1[1]="Tom_Mod"
names1[3][0]="One"
print(names1)
print(names2)
源码
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['One', ''], 'Alex']
结果
②.第二种浅拷贝
# Author:GCL import copy
names3=["Jack","Tom","Mary",["",""],"Alex"]
# 浅拷贝
names4=copy.copy(names3)
print(names3)
print(names4)
names3[1]="Tom_Mod"
names3[3][0]="One"
print(names3)
print(names4)
源码
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['One', ''], 'Alex']
输出
③.深拷贝
# Author:GCL import copy
# 深拷贝
names5=["Jack","Tom","Mary",["",""],"Alex"]
names6=copy.deepcopy(names5)
print(names5)
print(names6)
names5[1]="Tom_Mod"
names5[3][0]="One"
print(names5)
print(names6)
源码
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
输出
5、元组
元组其实跟列表差不多,也是存一组数,只不过它一旦创建,便不能再修改,所以又叫只读列表。
6、购物车小程序
需求:
(1)启动程序后,让用户输入工资,然后打印商品列表;
(2)允许用户根据商品编号购买商品;
(3)用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒;
(4)可随时退出,退出时,打印已购买商品和余额。
# Author:GCL # 商品列表
product_list=[("苹果",12),("香蕉",20),("西瓜",15),("橘子",10)]
# 购物列表,存放用户购买的商品
shopping_list=[]
# 工资
salary=input("请输入您的工资:")
# 工资是否为数字
if salary.isdigit():
salary=int(salary)
while True:
print("==========商品列表==========")
# index保存索引,item保存具体的值
for index,item in enumerate(product_list):
print(index,item)
user_choice=input("请选择需要购买的商品的编号:")
if user_choice.isdigit():
user_choice=int(user_choice)
# len(product_list)表示的是列表的元素个数
if user_choice<len(product_list) and user_choice>=0:
tmp_item=product_list[user_choice]
if tmp_item[1]<=salary:
shopping_list.append(tmp_item)
salary-=tmp_item[1]
print("商品:%s添加成功,还剩余额:\033[31;1m%d\033[0m"%(tmp_item,salary))
else:
print("\033[41;1m您的余额不够,只剩下:%d\033[0m"%(salary))
else:
print("您所输入的编号:%d不存在!"%(user_choice))
elif user_choice=="q":
print("正常退出!")
print("您所购买的商品如下:")
for index,item in enumerate(shopping_list):
print(index,item)
print("您的余额为:\033[31;1m%d\033[0m"%(salary))
exit()
else:
print("您的选择非法,无法识别!")
else:
print("您输入的工资有误!")
源码
请输入您的工资:50
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:1
商品:('香蕉', 20)添加成功,还剩余额:30
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:2
商品:('西瓜', 15)添加成功,还剩余额:15
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:1
您的余额不够,只剩下:15
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:q
正常退出!
您所购买的商品如下:
0 ('香蕉', 20)
1 ('西瓜', 15)
您的余额为:15
输出
7、字符串操作
关于对字符串的一系列操作,都在下面的源码中进行了详细的说明:
# Author:GCL # 首字母大写,后续字母全部变为小写
print("toM gooD".capitalize()) # 统计给定字符串出现的次数
print("abc fdh aha".count("a")) # 将字符串填充到15位,用*号前后填充,如果指定的位数小于字符串的长度,将没有效果
print("".center(15,"*")) # 对字符串进行编码,得到对应的字节包
print("我爱中国".encode("utf-8")) # 判断字符串是否以gcl结尾
print("Qggh hjgcl".endswith("gcl")) # 将Tab键的距离扩展到16
print("I love\tYou".expandtabs(16)) # 格式化字符串
print("My name is {name},I am {year}".format(name="gcl",year=22))
print("My name is {name},I am {year}".format_map({"name":"gcl","year":22})) # 在字符串中查找name,找到的话返回首次找到的索引,否则返回-1
print("My name is {name},I am {year}".find("name")) # 在字符串中查找name,找到的话返回首次找到的索引,否则报错
print("My name is {name},I am {year}".index("name")) # 判断字符串是否为整数
print("".isdigit()) # 判断字符串是否只由数字和字母组成
print("ak15".isalnum()) # 判断字符串是否只由字母组成
print("aaA".isalpha()) # 判断字符串是否为十进制
print("".isdecimal()) # 判读字符串是否为一个合法的标识符
print("jk2_".isidentifier()) # 判读字符串中字母是否全为小写
print("abc 36".islower()) # 判断字符串是否只由数字组成
print("".isnumeric()) # 判断字符串是否可以打印
print("MyNameIs".isprintable()) # 判断字符串是否为空格
print(" ".isspace()) # 判断字符串是否为标题
print("My Name is".istitle())
print("My Name Is".istitle()) # 判读字符串中字母是否全为大写
print("AS11".isupper()) # join的示例用法
print("+".join(["","",""]))
print("->".join(["a","b","c"])) # 从左到右(左对齐),不够的位数用*来填充
print("".ljust(10,"*")) # 从右到左(右对齐),不够的位数用*来填充
print("".rjust(10,"*")) # 转换成小写
print("KLHasgUK".lower()) # 转换成大写
print("KLHasgUK".upper()) # 去除左边的空格或换行
print(" \nabc".lstrip()) # 去除右边的空格或换行
print("abc\n".rstrip()) # 去除两端的空格或换行
print(" \nabc\n".strip()) # maketrans用法示例
p=str.maketrans("abcde","")
print("hajbkcldqe".translate(p)) # 从左到右拆分字符串
print("My name is {name},I am {year}".partition(" ")) # 替换指定的字符串
print("gcl love li".replace("l","L",2)) # 从右到左首次找到的索引
print("gcl love li".rfind("l")) # 从右到左拆分字符串
print("My name is {name},I am {year}".rpartition(" ")) # 分割字符串
print("1+2+3+4".split("+")) # 大小写互换
print("aBcDeFgHi".swapcase()) # 转换成标题
print("i love you".title()) # 填充字符串
print("123abc".zfill(10))
源码
其对应的输出如下:
Tom good
3
****1234567****
b'\xe6\x88\x91\xe7\x88\xb1\xe4\xb8\xad\xe5\x9b\xbd'
True
I love You
My name is gcl,I am 22
My name is gcl,I am 22
3
3
True
True
True
True
True
True
True
True
True
False
True
True
1+2+3
a->b->c
12345*****
*****12345
klhasguk
KLHASGUK
abc
abc
abc
h1j2k3l4q5
('My', ' ', 'name is {name},I am {year}')
gcL Love li
9
('My name is {name},I am', ' ', '{year}')
['', '', '', '']
AbCdEfGhI
I Love You
0000123abc
输出
8、字典操作
(1)字典是一种----->key:value 的数据类型,其语法如下:
info={
"stu001":"gcl","stu002":"lmy","stu003":"xx"
}
print(info)
定义
{'stu001': 'gcl', 'stu002': 'lmy', 'stu003': 'xx'}
输出
(2)字典的特性:
①.字典是无序的;
②.字典的key值必须是唯一的。
(3)字典的常见操作
①.增加
# 增加
info["stu004"]="yxm"
info["stu005"]="tl"
print(info)
增加
{'stu001': 'gcl', 'stu002': 'lmy', 'stu003': 'xx', 'stu004': 'yxm', 'stu005': 'tl'}
输出
②.修改
# 修改
info["stu001"]="gcl2.0"
print(info)
修改
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx', 'stu004': 'yxm', 'stu005': 'tl'}
输出
③.删除
# 删除
# 指定删除
info.pop("stu004")
print(info)
del info["stu005"]
print(info)
# 随机删除
info.popitem()
print(info)
删除
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx', 'stu005': 'tl'}
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx'}
{'stu001': 'gcl2.0', 'stu002': 'lmy'}
输出
④.查找
# 查找
# 如果Key值不存在就会报错
print(info["stu001"])
# 最好的方法是get,如果不存在会返回None
print(info.get("stu002"))
print(info.get("stu003"))
# 判断Key值是否存在
print(("stu001" in info))
查找
gcl2.0
lmy
None
True
输出
⑤.Keys值与values值
# Keys值
print(info.keys()) # values值
print(info.values())
Keys值与values值
dict_keys(['stu001', 'stu002'])
dict_values(['gcl2.0', 'lmy'])
输出
⑥.setdefault、update、items
# setdefault
info.setdefault("stu003","xx")
print(info)
info.setdefault("stu001","gcl")
print(info) # update
ex={11:22,33:44,"stu001":"gcl"}
info.update(ex)
print(info) # items
print(info.items())
setdefault、update、items
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx'}
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx'}
{'stu001': 'gcl', 'stu002': 'lmy', 'stu003': 'xx', 11: 22, 33: 44}
dict_items([('stu001', 'gcl'), ('stu002', 'lmy'), ('stu003', 'xx'), (11, 22), (33, 44)])
输出
⑦.循环打印
# 循环打印字典
# 比较常用
for key in info:
print(key,info[key])
#会先把dict转成list,数据量大时莫用
for k,v in info.items():
print(k,v)
循环打印字典
stu001 gcl
stu002 lmy
stu003 xx
11 22
33 44
stu001 gcl
stu002 lmy
stu003 xx
11 22
33 44
输出
9、程序:三级菜单
要求:
(1)可返回上一级;
(2)可随时退出程序。
# Author:GCL # 整体的字典数据
data={
"A1":{
"A11":{
"A111":["",""],
"A112":["",""]
},
"A12":{
"A121":["",""],
"A122":["",""]
},
"A13":{
"A131":["",""],
"A132":["",""]
}
},
"A2":{
"A21":{
"A211":["",""],
"A212":["",""]
},
"A22":{
"A221":["",""],
"A222":["",""]
},
"A23":{
"A231":["",""],
"A232":["",""]
}
},
"A3":{
"A31":{
"A311": ["", ""],
"A312": ["", ""]
},
"A32":{
"A321": ["", ""],
"A322": ["", ""]
},
"A33":{
"A331": ["", ""],
"A332": ["", ""]
}
},
"A4":{
"A41":{
"A411": ["", ""],
"A412": ["", ""]
},
"A42":{
"A421": ["", ""],
"A422": ["", ""]
},
"A43":{
"A431": ["", ""],
"A432": ["", ""]
}
}
} # 退出的标志位,默认为真
exit_flag=True
while exit_flag:
# 打印第一级的keys值
for k in data:
print(k)
choice1=input("您的选择(第一级):")
if (choice1 in data):
while exit_flag:
# 打印第二级的keys值
for k in data[choice1]:
print(k)
choice2=input("您的选择(第二级):")
if (choice2 in data[choice1]):
while exit_flag:
# 打印第三级的keys值
for k in data[choice1][choice2]:
print(k)
choice3=input("您的选择(第三级):")
if (choice3 in data[choice1][choice2]):
print(data[choice1][choice2][choice3])
elif choice3=="b":
break
elif choice3=="q":
exit_flag=False
else:
print("您的选择有误,无法识别!")
elif choice2=="b":
break;
elif choice2=="q":
exit_flag=False
else:
print("您的选择有误,无法识别!")
elif choice1=="b":
print("已经是第一级了,无法返回上一级!")
elif choice1=="q":
exit_flag=False
else:
print("您的选择有误,无法识别!")
源码
A1
A2
A3
A4
您的选择(第一级):A2
A21
A22
A23
您的选择(第二级):A21
A211
A212
您的选择(第三级):A212
['', '']
A211
A212
您的选择(第三级):A211
['', '']
A211
A212
您的选择(第三级):B
您的选择有误,无法识别!
A211
A212
您的选择(第三级):b
A21
A22
A23
您的选择(第二级):b
A1
A2
A3
A4
您的选择(第一级):b
已经是第一级了,无法返回上一级!
A1
A2
A3
A4
您的选择(第一级):A4
A41
A42
A43
您的选择(第二级):q Process finished with exit code 0
输出
后记:欢迎各路大神批评与指正!
2018.5.6
Day02:我的Python学习之路的更多相关文章
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day2-Python基础3
Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python 学习之路开始了
python 学习之路开始了.....记录点点滴滴....
- python学习之路,2018.8.9
python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!
- Python学习之路——pycharm的第一个项目
Python学习之路——pycharm的第一个项目 简介: 上文中已经介绍如何安装Pycharm已经环境变量的配置.现在软件已经安装成功,现在就开始动手做第一个Python项目.第一个“Hello W ...
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
随机推荐
- 洛谷 - P2335 - 位图 - 简单dp
https://www.luogu.org/problemnew/show/P2335 假如我们使用dp的话,每次求出一个点的左上方.右上方.左下方.右下方的最近的白点的距离.那么只是n²的复杂度.这 ...
- [Shader 着色器]冰霜效果的思考和实现
http://game.ceeger.com/forum/read.php?tid=23209&fid=2 由于最近要做一个冰系的角色,就想能不能做一些冰霜效果.那么就试试吧,先弄一张原图: ...
- Codeforces731D 80-th Level Archeology
考虑将两个单词变成有序,我们可以得到一个或者两个旋转次数的区间. 然后考虑将两组单词变成有序,比如[l,mid]和[mid+1,r],对于mid和mid+1这两个单词我们可以求出使他们有序的旋转次数的 ...
- curl:出现SSL错误提示
在上一篇博文中,升级ruby版本中,提示如下错误: 1) Error fetching https://mirrors.aliyun.com/rubygems/: [root@web ~]# gem ...
- Nginx系列篇四:Nginx+keepalived搭建一个高可用的双机双主热备
建议:先阅读Nginx+keepalived主从配置,因为此篇是接着上篇开始的 上一篇我们简单的介绍了主从配置及其缺点,我们看一下双主热备配置: 2台Nginx+keepalived互为主备,各自绑定 ...
- 最短路之SPFA
解决存在<<<负环>>>的图的单源最短路径: 判断有无负环: 如果某个点进入队列的次数超过N次则存在负环(SPFA无法处理带负环的图) 这里,只介绍用bfs(深搜) ...
- windows下配置java环境jdk
Windows系统下搭建java的开发环境和配置环境变量 具体步骤打开链接地址:https://www.cnblogs.com/lijuntao/p/6694483.html
- php中三元运算符用法
代码如下: <?php $handle=fopen("../good/html/1.txt", "r"); while(!feof($handle)) / ...
- import和from .xxx import *的一点重要区别
import zzz 不会导入zzz中已导入的模块 from .xxx import * 会导入xxx中已导入的模块 特别注意: 使用logging时,x模块导入了log.py,y模块导入了log.p ...
- php,json数据传输(无刷新)
废话不说直接上关键代码: js代码: <script language="javascript"> $(".login").live('click' ...