热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Day2列表、字典、集合操作详解

本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。


Day2-列表、字典、集合

作者:矮哥

归档:学习笔记

2017/01/28


目 录

1.1 列表、元组操作... 1

1.2 字符串操作... 4

1.3 字典操作... 5

1.4 集合操作... 9

1.5 文件操作... 9

1.6 字符编码与转码... 11

1.1 列表、元组操作

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

定义列表

技术分享技术分享

1 >>> name = ["Aige","Jackson","Tom"]
2
3 >>> name
4
5 [‘Aige‘, ‘Jackson‘, ‘Tom‘]
6
7 >>>
8

view code

通过下标访问列表中的元素,下标从0开始计数

技术分享技术分享

1 >>> name[0]
2
3 ‘Aige‘
4
5 >>> name[1]
6
7 ‘Jackson‘
8
9 >>> name[2]
10
11 ‘Tom‘
12
13 >>> name[3] #没值就会报错
14
15 Traceback (most recent call last):
16
17 File "", line 1, in <module>
18
19 IndexError: list index out of range
20
21 >>>
22

view code

切片:取多个元素

技术分享技术分享

1 >>> name = ["Aige","Jackson","Tom","Can","David"]
2
3 >>> name[1:3] #取下标1至下标3之间的数字,包括1,不包括3
4
5 [‘Jackson‘, ‘Tom‘]
6
7 >>> name[1:-1] #取下标1至-1的值,不包括-1
8
9 [‘Jackson‘, ‘Tom‘, ‘Can‘]
10
11 >>> name[0:3]
12
13 [‘Aige‘, ‘Jackson‘, ‘Tom‘]
14
15 >>> name[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
16
17 [‘Aige‘, ‘Jackson‘, ‘Tom‘]
18
19 >>> name[3:] #如果想取最后一个,必须不能写-1,只能这么写
20
21 [‘Can‘, ‘David‘]
22
23 >>> name[3:-1] #这样-1就不会被包含了
24
25 [‘Can‘]
26
27 >>> name[0::2] #后面的2是代表,每隔一个元素,就取一个
28
29 [‘Aige‘, ‘Tom‘, ‘David‘]
30
31 >>> name[::2] #和上句效果一样
32
33 [‘Aige‘, ‘Tom‘, ‘David‘]
34

view code

追加

技术分享技术分享

1 >>> names = ["Aige","Jackson","Tom","Can","David"]
2
3 >>> names.append("I am new friend")
4
5 >>> names
6
7 [‘Aige‘, ‘Jackson‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
8
9 >>>
10

view code

插入

技术分享技术分享

1 >>> names
2
3 [‘Aige‘, ‘Jackson‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
4
5 >>> names.insert(2,"强行从Jackson后面插入")
6
7 >>> names
8
9 [‘Aige‘, ‘Jackson‘, ‘强行从Jackson后面插入‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
10
11 >>>
12

view code

修改

技术分享技术分享

1 >>> names
2
3 [‘Aige‘, ‘Jackson‘, ‘强行从Jackson后面插入‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
4
5 >>> names[2]="谁叫你插的,走开"
6
7 >>> names
8
9 [‘Aige‘, ‘Jackson‘, ‘谁叫你插的,走开‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
10
11 >>>
12

view code

删除

技术分享技术分享

1 >>> names
2
3 [‘Aige‘, ‘Jackson‘, ‘谁叫你插的,走开‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
4
5 >>> del names[2] #指定位置删除
6
7 >>> names
8
9 [‘Aige‘, ‘Jackson‘, ‘Tom‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
10
11 >>> names.remove("Tom") #指定元素删除
12
13 >>> names
14
15 [‘Aige‘, ‘Jackson‘, ‘Can‘, ‘David‘, ‘I am new friend‘]
16
17 >>> names.pop() #删除最后一个
18
19 ‘I am new friend‘
20
21 >>> names
22
23 [‘Aige‘, ‘Jackson‘, ‘Can‘, ‘David‘]
24
25 >>>
26

view code

扩展

技术分享技术分享

1 >>> names
2
3 [‘Aige‘, ‘Jackson‘, ‘Can‘, ‘David‘]
4
5 >>> b = ["扩展","I am",1,2,3]
6
7 >>> names.extend(b)
8
9 >>> names
10
11 [‘Aige‘, ‘Jackson‘, ‘Can‘, ‘David‘, ‘扩展‘, ‘I am‘, 1, 2, 3]
12
13 >>>
14

view code

拷贝

技术分享技术分享

1 >>> names = ["aige",["waihao","can"]]
2
3 >>> names
4
5 [‘aige‘, [‘waihao‘, ‘can‘]]
6
7 >>> names2 = names.copy() #浅COPY,只拷贝了一层
8
9 >>> names2
10
11 [‘aige‘, [‘waihao‘, ‘can‘]]
12
13 >>> names[0] = "AIGE"
14
15 >>> names
16
17 [‘AIGE‘, [‘waihao‘, ‘can‘]]
18
19 >>> names2
20
21 [‘aige‘, [‘waihao‘, ‘can‘]]
22
23 >>> names[1][0] = "外号"
24
25 >>> names
26
27 [‘AIGE‘, [‘外号‘, ‘can‘]]
28
29 >>> names2
30
31 [‘aige‘, [‘外号‘, ‘can‘]]
32
33 >>>
34
35 import copy
36
37 names4 = copy.copy(names)
38
39 names[1] = "CAN"
40
41 print(names,names4) #这个也是浅copy
42
43 names5 = copy.deepcopy(names)
44
45 names[0] = "哈哈"
46
47 names[2][0] = "阿雷克斯"
48
49 print(names,names5) #深copy 一般不用‘‘‘
50

view code

统计

技术分享技术分享

1 >>> count_list = [1,2,1,2,3,4,5,7,1,1,0]
2
3 >>> count_list.count("1")
4
5 0
6
7 >>> count_list.count(1)
8
9 4
10
11 >>>
12

view code

排序和翻转

技术分享技术分享

1 >>> names = ["aige","Can","Jack","Tom"]
2
3 >>> names
4
5 [‘aige‘, ‘Can‘, ‘Jack‘, ‘Tom‘]
6
7 >>> names.sort() #特别提醒,不同类型数据,不能排序
8
9 >>> names
10
11 [‘Can‘, ‘Jack‘, ‘Tom‘, ‘aige‘] #按照ASCII排序
12
13 >>> names.reverse()
14
15 >>> names
16
17 [‘aige‘, ‘Tom‘, ‘Jack‘, ‘Can‘]
18
19 >>>
20

view code

获取下标(索引)

技术分享技术分享

1 >>> names
2
3 [‘aige‘, ‘Tom‘, ‘Jack‘, ‘Can‘]
4
5 >>> names.index("Jack")
6
7 2
8
9 >>>
10

view code

元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

语法

1 names = ("Aige","jack","eric") #中括号换小括号,既是元组


1.2 字符串操作

特性:不可修改

技术分享技术分享

1 name = "my name is aige {names}"
2
3 print(name.capitalize()) #首字母大写
4
5 print(name.count("a")) #统计字母个数
6
7 print(name.center(20,"-"))
8
9 print(name.endswith("e")) #以什么结尾
10
11 print(name.find("aige")) #字符的索引,字符串可以切片
12
13 print(name.format(names="AIGE"))
14
15 print(name.isalnum()) #包含英文字符和阿拉伯数字
16
17 print(name.isalpha()) #纯英文字符
18
19 print(name.isdigit()) #是不是整数
20
21 print(name.isidentifier()) #判断是不是合法的标识符 是不是合法变量名
22
23 print(name.islower())
24
25 print(name.isnumeric()) #只有数字,不能有小数点
26
27 print(name.istitle()) #每个字母开头大写
28
29 print(name.isupper()) #大写
30
31 print(‘+‘.join([‘1‘,‘2‘,‘3‘]))
32
33 print( name.ljust(50,"*") ) #不够50字节用*号补上
34
35 print( name.rjust(50,"@"))
36
37 print( name.lower())
38
39 print( name.upper())
40
41 print( "\nalex\n".lstrip()) #去掉左边的空格和回车
42
43 print( "\nalex\n".rstrip()) #去右边
44
45 print("\n alex \n".strip()) #去两边
46
47 p = str.maketrans("abcdef","123456")
48
49 print("aige Zhang".translate(p)) #一一对应的换,有点类似shell:tr命令
50
51 print("aige aige".replace("a","A")) #替换
52
53 print("aige aige".replace("a","A",1)) #替换一个
54
55 print("aige aige".rfind(‘e‘)) #找到最后一个被找到的地方
56
57 print("bingo nice gogo".split()) #字符串转成列表
58
59 print("bingo \n hahaha".splitlines()) #换行符换成列表
60
61 print("aige".startswith("a"))
62
63 print("Aige zhang".swapcase()) #大小写转换
64
65 print("aige can".title())
66
67 print("aige aige ".zfill(30))
68

view code

1.3 字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

语法:

技术分享技术分享

1 info = {
2
3 ‘stu001‘:"aige", #键值和value对应关系
4
5 ‘stu002‘:"can", #通过key查找value
6
7 ‘stu003‘:"happy", #字典是无序
8
9 }
10

view code

字典的特性:

l dict是无序的

l key必须是唯一的,so 天生去重

增加

1 >>> names = {"stu001":"Aige","stu002":"Jack","stu003":"Tom"}
2
3 >>> names
4
5 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Tom‘}
6

修改

1 >>> names["stu004"] = "新人"
2
3 >>> names
4
5 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Tom‘, ‘stu004‘: ‘新人‘}
6
7 >>> names["stu004"] = "已经认识了:张三"
8
9 >>> names
10
11 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Tom‘, ‘stu004‘: ‘已经认识了:张三‘}
12

删除

技术分享技术分享

1 >>> names.pop("stu004")
2
3 ‘已经认识了:张三‘
4
5 >>> names
6
7 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Tom‘}
8
9 >>> names
10
11 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Tom‘}
12
13 >>> del names["stu003"]
14
15 >>> names
16
17 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘}
18
19 >>>
20
21 >>> names
22
23 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Jack‘, ‘stu004‘: ‘Tom‘, ‘stu005‘: ‘Harry‘, ‘stu006‘: ‘HengYuansan‘}
24
25 >>> names
26
27 {‘stu001‘: ‘Aige‘, ‘stu002‘: ‘Jack‘, ‘stu003‘: ‘Jack‘, ‘stu004‘: ‘Tom‘, ‘stu005‘: ‘Harry‘, ‘stu006‘: ‘HengYuansan‘}
28
29 >>> names.popitem() ##随机删
30
31 (‘stu006‘, ‘HengYuansan‘)
32
33 >>> names.popitem()
34
35 (‘stu005‘, ‘Harry‘)
36
37 >>> names.popitem()
38
39 (‘stu004‘, ‘Tom‘)
40
41 >>>
42

view code

查找

技术分享技术分享

1 >>> info = {‘stu002‘: ‘LongZe Luola‘, ‘stu003‘: ‘XiaoZe Maliya‘}
2
3 >>> "stu002" in info
4
5 True
6
7 >>> info.get("stu002") #没有key值也不会报错
8
9 ‘LongZe Luola‘
10
11 >>> info["stu002"]
12
13 ‘LongZe Luola‘
14
15 >>> info["stu004"] #没有key值就会报错
16
17 Traceback (most recent call last):
18
19 File "", line 1, in <module>
20
21 KeyError: ‘stu004‘
22
23 >>> info.get("stu004")
24
25 >>>
26

view code

多级字典嵌套及操作

技术分享技术分享

1 av_catalog = {
2
3 "欧美":{
4
5 "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
6
7 "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
8
9 "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
10
11 "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
12
13 },
14
15 "日韩":{
16
17 "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
18
19 },
20
21 "大陆":{
22
23 "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
24
25 }
26
27 }
28
29 av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
30
31 print(av_catalog["大陆"]["1024"])
32
33 #ouput
34
35 [‘全部免费,真好,好人一生平安‘, ‘服务器在国外,慢,可以用爬虫爬下来‘]
36
37 #嵌套了很多层 key尽量不写中文
38
39 av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
40
41 print(av_catalog["大陆"]["1024"])
42
43 #ouput[‘全部免费,真好,好人一生平安‘, ‘服务器在国外,慢,可以用爬虫爬下来‘]
44
45 print(av_catalog.values()) #打印所有得值 不包括key值
46
47 print(av_catalog.keys()) #打印所有得key
48
49 av_catalog.setdefault("taiwan",{"www.baidu.com":[1,2]}) #字典里有的不改变。没有的改变
50
51 print(av_catalog)
52
53 av_catalog.setdefault("taiwan",{"haha":[000]}) #字典里有
54
55 print(av_catalog)
56

view code

程序练习

程序: 三级菜单

要求:

1. 打印省、市、县三级菜单

2. 可返回上一级

3. 可随时退出程序

技术分享技术分享

1 #!/usr/bin/env python
2 # _*_ coding:utf-8 _*_
3
4 menu = {
5 ‘北京‘:{
6 ‘海淀‘:{
7 ‘五道口‘:{
8 ‘soho‘:{},
9 ‘网易‘:{},
10 ‘google‘:{}
11 },
12 ‘中关村‘:{
13 ‘爱奇艺‘:{},
14 ‘汽车之家‘:{},
15 ‘youku‘:{},
16 },
17 ‘上地‘:{
18 ‘百度‘:{},
19 },
20 },
21 ‘昌平‘:{
22 ‘沙河‘:{
23 ‘老男孩‘:{},
24 ‘北航‘:{},
25 },
26 ‘天通苑‘:{},
27 ‘回龙观‘:{},
28 },
29 ‘朝阳‘:{},
30 ‘东城‘:{},
31 },
32 ‘上海‘:{
33 ‘闵行‘:{
34 "人民广场":{
35 ‘炸鸡店‘:{}
36 }
37 },
38 ‘闸北‘:{
39 ‘火车战‘:{
40 ‘携程‘:{}
41 }
42 },
43 ‘浦东‘:{},
44 },
45 ‘山东‘:{},
46 }
47
48
49 exit_flag = False
50 current_layer = menu
51
52 layers = [menu]
53
54 while not exit_flag:
55 for k in current_layer:
56 print(k)
57 choice = input(">>:").strip()
58 if choice == "b":
59 current_layer = layers[-1]
60 #print("change to laster", current_layer)
61 layers.pop()
62 elif choice not in current_layer:continue
63 else:
64 layers.append(current_layer)
65 current_layer = current_layer[choice]

view code

1.4 集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

l 去重,把一个列表变成集合,就自动去重了

l 关系测试,测试两组数据之前的交集、差集、并集等关系

常用操作

技术分享技术分享

1 list_1 = [1,2,3,1,2,4,5,6]
2
3 list_2 = set(list_1)
4
5 list_3 = set([1,2,3,4,8,9,0])
6
7 print(list_2,type(list_2))
8
9 print(list_3,type(list_3))
10
11 print( list_2.intersection(list_3) ) #取交集
12
13 print( list_2 & list_3) #交集
14
15 #print( list_2.intersection_update(list_3)) #交集后给list_2赋值
16
17 print( list_2.union(list_3) ) #取并集
18
19 print( list_2 | list_3) #并集
20
21 print( list_2.difference(list_3) ) #差集
22
23 print( list_2 - list_3) #差集
24
25 print( list_3.difference(list_2) ) #差集
26
27 print( list_2.issubset(list_3)) #子集
28
29 list_4 = set([1,2])
30
31 print( list_4.issubset(list_1)) #4是1子集
32
33 print( list_2.symmetric_difference(list_3)) #对称差集 ,去掉了合集
34
35 print( list_2 ^ list_3) #对称差集
36
37 list_5 = set([10,15])
38
39 print(list_2.isdisjoint(list_5)) #没交集,返回True
40
41 list_5.add(999) #添加
42
43 print(list_5)
44
45 list_2.remove(3) #没值会报错
46
47 list_2.discard(3) #没值不会报错
48

view code

1.5 文件操作

对文件操作流程

1. 打开文件,得到文件句柄并赋值给一个变量

2. 通过句柄对文件进行操作

3. 关闭文件

现有文件如下

文件操作:

技术分享技术分享

1 #!/usr/bin/env python
2 # _*_ coding:utf-8 _*_
3
4 #data = open("aige",encoding="utf-8").read()
5 # f = open("aige",encoding="utf-8") #文件句柄,就是文件的内存对象
6 # data = f.read() #读到文件末尾
7 # data2 = f.read() #从末尾开始读。没有任何内容了
8 # print(data)
9 # print("-------------",data2)
10
11 # f = open("aige2","w",encoding="utf-8") #创建一个文件。覆盖之前的文件名了
12 #
13 # f.write("我爱北京天安门\n")
14 # f.write("天安门上太阳升")
15
16
17 # f = open("aige2","a",encoding="utf-8") #追加 #也不能读
18 # f.write("我爱北京天安门")
19 # f.close()
20 # f = open("aige",encoding="utf-8")
21 # print(f.readline()) #一行行的读
22 # print(f.readline())
23 # print(f.readline())
24 # print(f.readline())
25 # for i in range(5):
26 # print(f.readline())
27 # print(f.readlines()) #生成列表
28
29 # for index,line in enumerate(f.readlines()): # f.readlines()只适合读小文件 #取消打印第十行
30 # if index == 9:
31 # print("分割线----------------------")
32 # continue
33 # print(line.strip())
34 # count = 0
35 # for line in f: #效率高,比上面的高,上面是先加载整个文件到内存,下面是读一行删一行
36 # count += 1
37 # if count == 10:
38 # print("----------------")
39 # continue
40 # print(line)
41 # f = open("aige",encoding="utf-8")
42 # print(f.tell())
43 # f.read(5)
44 # print(f.tell())
45 # f.seek(0)
46 # print(f.tell())
47 # print(f.encoding)
48 # print(f.fileno()) #返回文件编号
49 # f.seekable() #判断文件是否可以跳转
50 # f.readable() #判断文件是否可读
51 # f.flush() #刷 把内存的写入硬盘
52 f = open("aige","a", encoding="utf-8")
53 # f.seek(10)
54 # f.truncate(100) #截断 无论seek到哪,都是从头开始截
55 f.close()
56
57
58
59

view code

打开文件的模式有:

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

a,追加模式。【可读; 不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

r+,可读写文件。【可读;可写;可追加】

w+,写读

a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU

r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

1.6 字符编码与转码

http://www.cnblogs.com/yuanchenqi/articles/5956943.html


推荐阅读
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
author-avatar
anilshen_333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有