1.  python几种数据类型的比较

    1.  是否可变。

        不可变类型:变量的值可以发生变化,id也变了,相当于创建了一个新的对象,所以一修改值,id就变了,这种类型称之为不可变类型。
        可变类型:变量的值可以发生变化,而且 id不会变,所以称之为可变类型。

#数字类型样例
x=10
print (id(x))
输出:1374668752
#修改x的值为100,看看id变了吗?
x=100
print (id(x))
输出:1374671632
可以看到值修改了,id也变了,无法做到修改值,而保持id不变,所以数字类型属于不可变类型。
#字符串样例:
x='yangjianbo'
print(x,id(x))
#修改x的值,两个id比较一下,是否相同。
x='wangyanhe'
print(x,id(x))
输出的结果: 发现字符串的值被修改了,同时它的id也发生了变化,说明是产生了一个新的引用,所以字符串类型也是不可变类型。
# 列表样例:
x = ['yangjianbo', 'wangyanhe', 'gaozhongmin']
print (x, id(x))
# 修改一下某个元素,看看列表x,id是否变化。
x[0] = 'gushuwei'
print (x, id(x))
输出的结果:
['yangjianbo', 'wangyanhe', 'gaozhongmin']
37527688
['gushuwei', 'wangyanhe', 'gaozhongmin']
37527688
结论:修改列表中的某个元素,不会影响整个列表的id,所以列表属于可变类型。 # 元组样例:
x = ('yangjianbo', 'wangyanhe', 'gaozhongmin')
print (x, id(x))
x[0] = 'gushuwei'
print (x, id(x))
输出结果:直接报错,因为元组只可读,不能写。
结论:元组是不可变类型。 # 字典
x = {'name': 'yangjianbo', 'age': 10, 'bumen': 'xitongbu'}
print (x, id(x))
x['name'] = 'wangyanhe'
print (x, id(x))
输出结果:
{'name': 'yangjianbo', 'age': 10, 'bumen': 'xitongbu'}
31218928
{'name': 'wangyanhe', 'age': 10, 'bumen': 'xitongbu'}
31218928
结论:字典的值可以修改,而且id不会发生变化,所以字典属于可变类型。

    2.  有序或无序。

        有序和无序,数据类型能否按照索引的方式,读出数据。

#数字类型
x=10
print (x[0])
结论:报错了,数字类型,无法使用索引读出,它不是一个有序的数据类型。
#字符串
x='aabbcc4455'
print (x[9])
结论:字符串可以通过索引读取字符串中的字符,字符串是有序的数据类型。
#列表
x=['yangjianbo','wangyanhe','gaozhongmin']
print (x[0])
结论:列表读取某个元素,必须指定元素的索引,所以列表是有序的数据类型。
#元组
x=('yangjianbo','wangyanhe','gaozhongmin')
print (x[0])
结论:元组读取某个元素,必须指定元素的索引,所以元组是有序的数据类型。
#字典
x={'name':'yangjianbo','age':10,'bumen':'xitongbu'}
print (x['name'])
结论:字典读取其中的某个值,必须指定键名称,不能按照索引进行读取。所以字典不是有序的数据类型。

    3.  是否可读写。

        除了元组不可写,其他类型都支持读写。

    4.  存一个值还是多个值。

        数字类型只有一个值,

        字符串也只有一个值

        列表多个值

        元组多个值

        字典多个值

2.  数字类型的一些功能

两个变量交换数值。
x=10
y=20
print (x,id(x))
print (y,id(y))
x,y=y,x
print (x,id(x))
print (y,id(y))
输出结果:
10 8791457912128
20 8791457912448
20 8791457912448
10 8791457912128 将多个变量引用到一个值上。
x=y=z=100
print (x,y,z,id(x),id(y),id(z))

3.  字符串的一些功能

查看字符串长度

x='aaa11111'
print (len(x))

    字符串切片

x='abc12345ABC'
print (x[1:9:3])
第一个数字1表示从索引1开始,
第二个数字9表示到第9-1索引结束
第三个数字3表示步长,从索引1开始数,三步一个。 输出的结果:b25

       成员运算符

x='abc12345ABC'
print ('A' in x)
print ('B' not in x)
输出的结果 True False

   移除空格

使用字符串的函数strip()    lstrip()    rstrip()

strip()默认移除的是空白符,\t  \r \n.

name = " yangjianbo"
print (name)
name=name.strip()
print (name)
输出的yangjianbo,没有前面的空白。
name = "yangjianbo*****"
name=name.strip('*')
print (name)
输出的结果:忽略*号字符。
name = "yangjianbo*****"
name=name.strip('an')
print (name)
输出的结果:我要忽略an,这个an字符在整个字符串的中间部分,而不是两头,结果输出的结果依然是原来的值 结论:中间的字符不能被忽略,只能忽略头和尾的字符。

分割

        x='I am yang jian bo !'

        print (x.split(' ',1))

        输出结果:split函数第一个参数是以哪个分隔符进行切割(默认为空格,\r \n \t),第二个参数是要求分成几份。

        也可以只指定第一个参数,会以最大的份数分割,分割成列表数据类型。

以字符开头

x='I am yang jian bo !'
print (x.startswith('yang',5,11))
输出的结果: True
startswith函数的意思是:是不是以指定的字符串开头的,第一个参数是你要查找的字符串,第二个参数是你要从哪个索引开始查,第三个参数是指你到哪个索引结束。返回的值是布尔值。正确则为true,则为false.

以字符结尾

x='I am yang jian bo !'
print (x.endswith('yang',5,11))
输出结果: False
endswith函数是用来检测是不是以指定的字符串结尾的,参数设置与startswith相同,返回值也是一样的。
 替换
x='I am yang jian bo !'
print (x.replace('a','b',2))
输出的结果:I bm ybng jian bo !
replace函数用来替换指定的字符串,第一个参数指定旧的字符串,第二个参数指定新的字符串,第三个参数指定要替换几个字符串。
 大写改小写
x='I am yang jian bo !'
print (x.upper())
输出的结果:I AM YANG JIAN BO !
将字符串中的小写字母改为大写字母。
将结果改为小写
x='I am yang jian bo !'
print (x.lower())
输出的结果:i am yang jian bo !
将字符串中的大写字母改为小写字母。
查找字符对应的索引
x='I am yang jian bo !'
print (x.index("a"))
输出的结果:将第一个匹配的字符串对应的索引打印出。
判断字符串是不是只包含数字
password=input("输入密码:")
if not password.isdigit() :
print ("请输入正确密码,只包含数字!")
else:
print ("登录成功!")
输出的结果:如果输入字母,会报错。

   同理is类型的函数还有

string.isalnum()

如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False

string.isalpha()

如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False

string.isdecimal()

如果 string 只包含十进制数字则返回 True 否则返回 False.

字符串的join函数

l=['True','or','False']
s=' '
res=s.join(l)
print(res,type(res))
结果:

"D:\Program Files\Python36\python.exe" C:/Users/yangjianbo/PycharmProjects/untitled/第三课函数基础/join函数.py
True or False <class 'str'>

结论:

Python join() 方法用于将列表中的元素以指定的字符连接生成一个新的字符串。

4.  列表

    长度
x=['yangjianbo','wangyanhe','gaozhongmin']
print (len(x)) 
输出结果:  3
    切片
x=['yangjianbo','wangyanhe','gaozhongmin']
print (x[1:3])
输出的结果:['wangyanhe', 'gaozhongmin']
切片的顺序其实跟步长有关系,默认步长为1。
从列表索引1开始,到索引3(不包括)结束。 x=['yangjianbo','wangyanhe','gaozhongmin','gushuwei','liudehua','zhangxueyou']
print (x[-3:-1])
输出结果:['gushuwei', 'liudehua']
从列表索引-1开始(不包括),到索引-3(包括)结束。
    翻转
num=[1,2,3,4,5,6,7]
print (num[::-1])
输出结果:[7, 6, 5, 4, 3, 2, 1]

     追加

x=['yangjianbo','wangyanhe','gaozhongmin']
x.append('gushuwei')
print (x)
输出的结果:['yangjianbo', 'wangyanhe', 'gaozhongmin', 'gushuwei']
append()函数在列表的最后追加一个新的元素,append()函数不会有返回值。返回None
    删除
x=['yangjianbo','wangyanhe','gaozhongmin']
print (x.pop(2))
输出结果:gaozhongmin
pop()函数的参数是索引
pop删除并返回值
x=['yangjianbo','wangyanhe','gaozhongmin','wang','gaozhongmin']
print (x.remove('gaozhongmin'))
print (x)
输出结果:None
     ['yangjianbo', 'wangyanhe', 'wang', 'gaozhongmin']
remove()函数的参数是元素的值
remove删除元素,但是不会返回值
    更新
x=['yangjianbo','wangyanhe','gaozhongmin']
x[1]='zhangxueyou'
print (x)
输出结果:['yangjianbo', 'zhangxueyou', 'gaozhongmin']
    排序

    练习题

1. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
data=['alex',49,[1900,3,18]]
name=data[0]
age=data[1]
birth=data[2]
print (name,age,birth[0],birth[1],birth[2])
输出结果:alex 49 1900 3 18
2. 用列表模拟队列
队列要求就是:先进先出,后进后出。
num=[]    先创建一个空的列表
num.append(1) 往空的列表追加一个1
num.append(2) 再追加一个2
num.append(3) 再追加一个3
num.append(4) 再追加一个4
num.pop(0) 删除第一个元素
num.pop(0) 删除第一个元素 num.pop(0) 删除第一个元素
num.pop(0)       删除第一个元素
print (num)
以上就相当于先进先出。
3. 用列表模拟堆栈
先进后出,后进先出
num=[]
num.append(1)
num.append(2)
num.append(3)
num.append(4)
num.pop(-1)
num.pop(-1)
num.pop(-1)
num.pop(-1)
print (num)

 4. 有如下列表,请按照年龄排序(涉及到匿名函数)

l=[
{'name':'alex','age':84},
{'name':'oldboy','age':73},
{'name':'egon','age':18},
]
五. 元组
长度
读取
切片
成员运算in或者not in
元组与列表相同 六. 字典
键值要成对。
键必须为不可变类型,所以键不能为列表。值可以为任意类型。 读取
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
print (xitongbu['name'])
输出的结果:yangjianbo
字典查询,需要按照键查找,不能按照索引,因为字典是无序的。

     长度

xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
print (len(xitongbu))
输出的结果:3
显示字典有几对键值。
    成员in not in 
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
print ('name' in xitongbu)
输出的结果:True
字典只能查看键是不是成员,而不能看值。
  添加键值
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
print (xitongbu)
输出结果:{'name': 'yangjianbo', 'age': 30, 'zhiwei': 'gongchengshi', 'gongzi': 20000}
  删除某个键
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
del xitongbu['zhiwei']
print (xitongbu)
输出结果:{'name': 'yangjianbo', 'age': 30, 'gongzi': 20000}
  删除整个字典
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
del xitongbu
print (xitongbu)
输出的结果:NameError: name 'xitongbu' is not defined
删除xitongbu,变量都不存在了。
  清空整个字典
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
xitongbu.clear()
print (xitongbu)
输出的结果:{}
字典被清空,但是变量还在。

   字典常用的方法

清空   dic.clear()

删除键并返回值  dic.pop()
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
print (xitongbu.pop('gongzi'))
print (xitongbu)
输出的结果:{'name': 'yangjianbo', 'age': 30, 'zhiwei': 'gongchengshi'}
使用pop函数删除键,会有返回值。
打印键 dic.keys()
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
print (xitongbu.keys())
print ('name' in xitongbu.keys())
输出的结果:字典的所有键会被打印出
打印值  dic.values()
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
print (xitongbu.values(),type(xitongbu.values()))
print ('gongchengshi' in xitongbu.values())
输出的结果:打印出的结果是字典所有的值。 打印键和值 dic.items()
xitongbu={'name':'yangjianbo','age':30,'zhiwei':'gongchengshi'}
xitongbu['gongzi']=20000
print (xitongbu.items(),type(xitongbu.items()))
输出的结果:打印出字典的键和值。
七. 集合
特点:与字典一样采用大括号,但是只有值,没有键。 集合不支持索引。
长度 len()函数
name={'yangjianbo','wangyanhe','gaozhongmin'}
print (len(name))
    成员in not in
name={'yangjianbo','wangyanhe','gaozhongmin'}
if 'yangjian' in name:
print ("you are right!")
else:
print("you are wrong!")
    交集  使用符号&
name1={'yangjianbo','wangyanhe','gaozhongmin'}
name2={'yangjianbo','zhoujianping','liushuang'}
print (name1&name2)
输出的结果:是两个集合的相同的部分。
    差集   -
name1={'yangjianbo','wangyanhe','gaozhongmin'}
name2={'yangjianbo','zhoujianping','liushuang'}
print (name1-name2,type(name1-name2))
输出的结果:谁在前面,就以谁为标准,减去相同的,剩下的就是差集。
name1={'yangjianbo','wangyanhe','gaozhongmin'}
name2={'yangjianbo','zhoujianping','liushuang'}
print (name2-name1,type(name2-name1))
输出的结果:顺序不同,最后得到的差集也不同。
    并集   |
name1={'yangjianbo','wangyanhe','gaozhongmin'}
name2={'yangjianbo','zhoujianping','liushuang'}
print (name1|name2)
输出的结果:两个集合合并后的结果,合并后还是一个集合。
    对称差集   ^
name1={'yangjianbo','wangyanhe','gaozhongmin'}
name2={'yangjianbo','zhoujianping','liushuang'}
print (name2^name1,type(name2^name1))
输出的结果:{'gaozhongmin', 'wangyanhe', 'zhoujianping', 'liushuang'} <class 'set'>

八. for循环
for循环用来遍历string和list,字典的内容。
遍历字符串
name='yangjianbo'
for i in name:
print (i)
输出的结果:单个的字符.
打印出字符的索引 遍历列表
name=['yangjianbo','wangyanhe','gaozhongmin']
for i in name:
print (i)
输出的结果:输出各个元素。
打印出列表的元素。 遍历列表:
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
if site == "Runoob":
print("菜鸟教程!")
break
print("循环数据 " + site)
else:
print("没有循环数据!")
print("完成循环!")
输出结果:当循环完成时候,才会执行else后面的语句,但是这个for循环不会执行else语句,因为执行被break.

  

九. 身份运算符
is is not
is与==的不同:is查看对象是否来自一个引用,==比较的是值。
十.字码编符
计算机只认识0和1
把字符翻译成数字。这个翻译过程就叫做字符编码。
最开始的字符编码表ASCII,一个bytes表示一个字符,一个bytes有8位,可以表示256个字符。ASCII最高一位保留,最初只用了127个字符。后来拉丁文也进入了ASCII编码。
但是ASCII无法显示中文,于是中国人就发明了GB2312,用两个字节表示中文,也就产生了2的16次方-1个,表示中文。
日本人发明了自己的字符编码,韩国人也有自己的字符编码,但是各国的字符编码都不能相互读出来,所以产生了乱码。
于是在这种情况下,为了统一各国的字符编码,就产生了一种unicode,用两个字节表示所有的字符,不管是英文,中文,日文,韩文,都用两个字节来表示。unicode这种方式,
会导致英文字符,前8位的浪费。
所以又产生了UTF-8,可变长的字符编码,对英文字符用一个字节,对中文字符用3个字节。
unicode:简单粗暴,执行速度快,但是浪费空间
UTF-8:执行速度慢,因为它得检查字符,节约空间。
当内存从硬盘读取数据的时候,优先考虑的是速度,所以内存内部使用的是unicode.当UTF-8翻译成unicode的时候,叫做:decode,过程叫做解码。
当内存保存数据到硬盘的时候,优先考虑的是空间,所以硬盘使用的是UTF-8或者其他国家的编码。当unicode翻译成UTF-8的时候,叫做:encode,过程叫做编码。
存的时候用什么编码,读的时候就用什么编码。 读文件的阶段:
python2解释器默认编码是ASCII
python3解释器默认编码是UTF-8
所以要在python文件开头,加#coding:指定文件保存时候的编码。 执行文件的阶段:
执行python代码的时候,python3的字符串是unicode编码.
x='杨建'
print(type(x.encode('gbk')))
只有unicode才可以encode为其他编码。
   执行python代码的时候,python2的字符串是bytes编码.所以在python2的字符串前面加u.
x=u'你好' 这样就成为了unicode编码。 windows终端编码gbk
linux终端编码utf-8 最后文件练习题:
#求出所购买的东西的价格总数。

count=[]
with open('a.txt','r') as read_f:
for line in read_f:
line=line.split(' ')
line_count=int(line[1])*int(line[2])
count.append(line_count)
if len(count)==5:
print(sum(count))

作业一:

#作业一: 三级菜单
#要求:
打印省、市、县三级菜单
可返回上一级
可随时退出程序
低级版本:
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
while True:
for key1 in menu:
print(key1)
choice1=input('选择>>').strip()
if choice1=='b':break
if not choice1 or choice1 not in menu:continue while True:
for key2 in menu[choice1]:
print(key2)
choice2=input('选择>>').strip()
if choice2=='b':break
if not choice2 or choice2 not in menu[choice1]:continue while True:
for key3 in menu[choice1][choice2]:
print(key3)
choice3=input('选择>>').strip()
if choice3=='b':break
if not choice3 or choice3 not in menu[choice1][choice2]:continue while True:
for key4 in menu[choice1][choice2][choice3]:
print(key4)
choice4=input('选择>>').strip()
if choice4=='b':break
升级版本:
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
level=[]
while True:
for key in menu:
print(key)
choice=input('选择>>').strip()
if choice=='b':
if len(level)==0:break
menu=level[-1]
level.pop()
if not choice:continue
if choice not in menu:continue
level.append(menu)
menu=menu[choice]

作业二最终版:

#作业二:请闭眼写出购物车程序
#需求:
用户名和密码存放于文件中,格式为:egon|egon123
启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额 最终代码:
dic={
1:['apple',200],
2:['tesla',2000000],
3:['lenovo',3000]
}
userinfo={'yangjianbo':['123456',20000],'wangyanhe':['abcd',200]}
count=0
while True:
username = input('用户名>>').strip()
if count==3:
print("用户名输入已经3次")
break
elif not username in userinfo:
print("用户名错误")
elif username in userinfo:
password = input('密码>>').strip()
if password!=userinfo[username][0]:
print('用户名密码不正确!')
count+=1
elif password==userinfo[username][0]:
print('登陆成功!')
while True:
choice_dic={'购物车':1,'查看余额':2,'退出':3}
print(choice_dic)
choice_type=int(input('请输入您的选择:'))
if choice_type==choice_dic['购物车']:
print(dic)
while True:
choice = input('请输入您要购买的物品的编号>>').strip()
if choice=='exit':
exit()
elif not choice.isdigit(): continue
for id, product in dic.items():
choice = int(choice)
if choice == id:
print('确认要购买%s吗?' % product[0])
quren = input('是否购买 y/n:').strip()
if quren in ('yes' or 'y'):
userinfo[username][1] = int(userinfo[username][1])
if userinfo[username][1] > product[1]:
userinfo[username][1] = userinfo[username][1] - product[1]
print('您已经购买了%s! 您的余额还有%s元!' % (product[0],userinfo[username][1]))
else:
print('您的余额不足,请尽快充值!')
elif quren in ('no' or 'n'):
break elif choice_type==choice_dic['查看余额']:
print('您的余额是%s元' % userinfo[username][1])
elif choice_type==choice_dic['退出']:
exit()

Python学习笔记二的更多相关文章

  1. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  2. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  3. (10.1)Python学习笔记二

    1.在项目工程中要模块化测试一个开发的功能,在测试通过后交付给项目组其他人员继续开发.要保证代码开发的性能和效率以及可扩展性. 2.项目工程中的文件夹分类要功能模块明确清晰,在python中引入某一个 ...

  4. Python学习笔记(二)

    标识符和关键字 1,邮箱的Python标识符是任意长度的非空字符序列(引导字符+后续字符.) python标识符必须符合两条规则--标识符区分大小写 (1)只要是unicode编码字母都可以充当引导字 ...

  5. python学习笔记(二):python数据类型

    上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...

  6. python学习笔记二:流程控制

    一.if else: #!/usr/bin/python x = int(raw_input('please input:')) if x >= 90: if x >= 95: print ...

  7. python 学习笔记二 (列表推导式)

    2018年年初写了第一篇博客,说要做一个认真的技术人 https://www.cnblogs.com/yingchen/p/8455507.html 今天已经是11月19日了,这是第二篇博客,看来坚持 ...

  8. python学习笔记二:(python3 logging函数中format说明)

    背景,在学习logging时总是遇到无法理解的问题,总结,尝试一下更清晰明了了,让我们开始吧! logging模块常用format格式说明 %(levelno)s: 打印日志级别的数值 %(level ...

  9. python 学习笔记(二):为元组的每个元素命名,提高程序的可读性

    在程序中有些数据为固定格式时,即字段数量确定.字段位置顺序确定不变,我们就可以用元组来储存.使用元组的优势是储存空间很小,访问速度也很快.如下代码对每个学生信息用元组来表示: # ('Jim', 16 ...

随机推荐

  1. Git错误merge怎么办?

    Git怎样撤销一次分支的合并Merge git merge了错误分支,如何优雅的回退到merge前的状态? 版本回退

  2. 通过工厂方法配置Bean

    前面几节,我们配过了好多Bean,通过反射机制,在class属性里填写全类名,现在我们来讲讲其他方式,通过工厂方法,还有通过FactoryBean,这个在我们整合第三方框架时会用到. 工厂方法可以分为 ...

  3. Python——Flash框架——用户认证

    一.认证扩展 1.Flask-Login:管理已登录用户的用户会话 2.Werkzeug:计算几码散列值并进行核对 3.itsdangerous:生成并核对加密安全令牌 二.Werkzeug gene ...

  4. Siamese network 孪生神经网络

    Siamese network 孪生神经网络 https://zhuanlan.zhihu.com/p/35040994 https://blog.csdn.net/shenziheng1/artic ...

  5. Flask初识

    一.Flask初识 1.Flask介绍 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug服务 ,模板引擎则使用 Jinja2 .Flask ...

  6. 第六十八天 js轮播图

    1.浮动与定位结合使用 浮动与相对定位 //1.两者均参与布局 //2.主浮动布局,相对布局辅助完成布局微调 //3.相对定位布局微调不同于盒模型布局微调,相对定位布局不影响盒子原有位置,就会影响兄弟 ...

  7. 爬虫 BeatifulSoup 模块

    BeatifulSoup 模块 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 安装 pip install beautifulsoup4  解析器下载 ...

  8. python 实现聊天室

    所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里  源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...

  9. 【BZOJ5502】[GXOI/GZOI2019]与或和(单调栈)

    [BZOJ5502][GXOI/GZOI2019]与或和(单调栈) 题面 BZOJ 洛谷 题解 看到位运算就直接拆位,于是问题变成了求有多少个全\(0\)子矩阵和有多少个全\(1\)子矩阵. 这两个操 ...

  10. Apache Beam实战指南 | 手把手教你玩转大数据存储HdfsIO

    https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247494843&idx=2&sn=0dd20caec76e25 ...