Python [6] IT资产管理(下)

简介:

上一篇博客聊到以下内容

1、安装django

2、部署工程和应用

3、修改、添加工程和应用配置文件并能成功url访问

4、Python脚本采集主机信息

5、通过post方式传送搜集的信息到服务器端

6、主机分组

如需更详细的了解,请参考http://467754239.blog.51cto.com/4878013/1616551


在这篇博客中,我们针对上篇博客中的重点部分做阐述,如何多钟方式实现第5步:

5、通过post方式传送搜集的信息到服务器端


一、Python序列化

1、序列化是什么

序列化:内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方。(实际上, 很多非游戏程序也会这么干。) 在这个情况下, 一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来。这个数据只会被创建它的程序使用,不会发送到网 络上,也不会被其它程序读取。因此,互操作的问题被限制在保证新版本的程序能够读取以前版本的程序创建的数据。


2、实现序列化的方法

pickle(python语言编写)、cPickle(c语言编写)

JSON

Shelve

YAML


3、pickle和JSON的基本使用

pickle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
(1)pickle将字典序列化存储到文本文件中
[root@localhost  test ] # pwd
/tmp/test
[root@localhost  test ] # ls
1_pickle_dump.py  2_pickle_load.py
[root@localhost  test ] # python 1_pickle_dump.py 
[root@localhost  test ] # ls
1_pickle_dump.py  2_pickle_load.py  dump.txt     #存储到磁盘的文件中
[root@localhost  test ] # cat dump.txt 
(dp0
S 'age'
p1
S '25'
p2
sS 'tel'
p3
S '132600*****'
p4
sS 'name'
p5
S 'ZhengYanSheng'
p6
s.
[root@localhost  test ] # cat 1_pickle_dump.py 
#!/usr/bin/env python
 
import  pickle
 
d = { 'name' : 'ZhengYanSheng' , 'age' : '25' , 'tel' : '132600*****' }
with  open ( '/tmp/test/dump.txt' , 'w' ) as fd:
     pickle.dump(d,fd)
     
(2)pickle加载文本文件中的内容并生成一个新的字典
[root@localhost  test ] # pwd
/tmp/test
[root@localhost  test ] # ls
1_pickle_dump.py  2_pickle_load.py  dump.txt
[root@localhost  test ] # python 2_pickle_load.py 
{ 'age' '25' 'tel' '132600*****' 'name' 'ZhengYanSheng' }     #生成一个新的字典
[root@localhost  test ] # cat 2_pickle_load.py 
#!/usr/bin/env python
 
import  pickle
 
with  open ( '/tmp/test/dump.txt' , 'r' ) as fd:
     d1 = pickle.load(fd)
print d1

json

这次我们直接在Ipython的交互式中进行操作json的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
(1)json的导出
[root@localhost ~] # ipython
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
Type  "copyright" "credits"  or  "license"  for  more  information.
 
IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about  'object' , use  'object??'  for  extra details.
 
In [1]:  import  json
 
In [2]: d = { 'a' : 'a' , 'b' :235, 'c' :( 'c1' , 'c2' ), 'd' : 'True' , 'e' : 'None' }
 
In [3]: d
Out[3]: { 'a' 'a' 'b' : 235,  'c' : ( 'c1' 'c2' ),  'd' 'True' 'e' 'None' }
 
In [4]: with  open ( '/tmp/test/d.json' , 'w' ) as fd:    
    ...:     json.dump(d,fd)     #写入到文件中
    ...:  
Do you really want to  exit  ([y] /n )? 
[root@localhost ~] # cat /tmp/test/d.json     #在shell模式下查看写入的文件内容
{ "a" "a" "c" : [ "c1" "c2" ],  "b" : 235,  "e" "None" "d" "True" }
 
 
(2)json的载入
[root@localhost ~] # ipython
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
Type  "copyright" "credits"  or  "license"  for  more  information.
 
IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about  'object' , use  'object??'  for  extra details.
 
In [1]:  import  json
 
In [2]: with  open ( '/tmp/test/d.json' , 'r' ) as fd:
    ...:      dd  = json.load(fd)
 
In [3]: print  dd
{u 'a' : u 'a' , u 'c' : [u 'c1' , u 'c2' ], u 'b' : 235, u 'e' : u 'None' , u 'd' : u 'True' }


二、多种以POST方式传参的列子

1、pickle的方式

(1)修改views.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
[root@localhost Simplecmdb]# cat hostinfo/views.py  
from django.shortcuts import render
from django.http import HttpResponse
from hostinfo.models import Host
import pickle    #导入pickle模块
  
# Create your views here.
def index(req):
     if  req.method ==  'POST' :
     pick_obj = pickle.loads(req.body) #接受客户端的传参是一个字典   
         hostname = pick_obj[ 'hostname' ]    #既然是一个字典,那么我们就一个变量变量的接收
         ip = pick_obj[ 'ip' ]
         osversion = pick_obj[ 'osversion' ]
         memory = pick_obj[ 'memory' ]
         disk = pick_obj[ 'disk' ]
         vendor_id = pick_obj[ 'vendor_id' ]
         model_name = pick_obj[ 'model_name' ]
         cpu_core = pick_obj[ 'cpu_core' ]
         product = pick_obj[ 'product' ]
         Manufacturer = pick_obj[ 'Manufacturer' ]
         sn = pick_obj[ 'sn' ]
  
     try :
         host = Host.objects.get(hostname=hostname)
     except:
             host = Host()
         host.hostname = hostname
         host.ip = ip
         host.osversion = osversion
         host.memory = memory
         host.disk = disk
         host.vendor_id = vendor_id
         host.model_name = model_name
         host.cpu_core = cpu_core
         host.product = product
         host.Manufacturer = Manufacturer
         host.sn = sn    
         host.save()
         return  HttpResponse( 'ok' )
     else :
         return  HttpResponse( 'no data' )

(2)修改搜集主机信息脚本(需要修改一个地方)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
[root@localhost Simplecmdb] # vim post_hostinfo.py 
  
#!/usr/bin/env python
#coding:utf8
#author:Allentuns
#time:2015-02-14
  
from subprocess  import  Popen,PIPE
import  urllib,urllib2
import  pickle
import  json
import  re
  
###[hostname message]#####
def get_HostnameInfo( file ):
     with  open ( file , 'r' ) as fd:
         data = fd. read (). split ( '\n' )
         for  line  in  data:
             if  line.startswith( 'HOSTNAME' ):
                 hostname  = line. split ( '=' )[1]
                 break
     return  hostname
  
#####[ipaddr message]#####
def get_Ipaddr():
     P = Popen([ 'ifconfig' ],stdout=PIPE)
     data = P.stdout. read ()
     list = []
     str =  ''
     option = False
     lines = data. split ( '\n' )
     for  line  in  lines:
         if  not line.startswith( ' ' ):
             list.append(str)
             str = line
         else :
             str += line
     while  True:
         if  ''  in  list:
             list.remove( '' )
         else :
             break
     r_devname = re.compile( '(eth\d*|lo)' )
     r_mac = re.compile( 'HWaddr\s([A-F0-9:]{17})' )
     r_ip = re.compile( 'addr:([\d.]{7,15})' )
     for  line  in  list:
         devname = r_devname.findall(line)
         mac = r_mac.findall(line)
         ip = r_ip.findall(line)
         if  mac:
             return   ip[0]
  
#####[osversion message]#####
def get_OsVerion( file ):
     with  open ( file ) as fd:
         lines = fd.readlines()
         os_version = lines[0][:-8]
         return  os_version
  
#####[memory message]#####
def get_MemoryInfo( file ):
    with  open ( file ) as fd:
         data_list = fd. read (). split ( '\n' )
         MemTotal_line = data_list[0]
         Memory_K = MemTotal_line. split ()[1]
         Memory_G = float(Memory_K) /1000/1000
         Memory_G2 =  '%.2f'  % Memory_G
         memory = Memory_G2 +  'G'
         return  memory
  
#####[disk message]#####
def get_DiskInfo():
     p = Popen([ 'fdisk' , '-l' ],stdout=PIPE,stderr=PIPE)
     stdout,stderr = p.communicate()
     diskdata = stdout
  
     disk_initial_size = 0
     re_disk_type = re.compile(r 'Disk /dev/[shd]{1}.*:\s+[\d.\s\w]*,\s+([\d]+).*' )
     disk_size_bytes = re_disk_type.findall(diskdata)
     for  size  in  disk_size_bytes:
         disk_initial_size += int(size)
     disk_size_total_bytes =  '%.2f'   % (float(disk_initial_size) /1000/1000/1000 )
     disk_size_total_G = disk_size_total_bytes +  'G'
     disk = disk_size_total_G
     return  disk
  
#####[cpu message]#####
def get_CpuInfo():
     p = Popen([ 'cat' , '/proc/cpuinfo' ],stdout=PIPE,stderr=PIPE)
     stdout, stderr = p.communicate()
     cpudata = stdout.strip()
  
     cpu_dict = {}
     re_cpu_cores = re.compile(r 'processor\s+:\s+([\d])' )
     re_vendor_id = re.compile(r 'vendor_id\s+:\s([\w]+)' )
     re_model_name = re.compile(r 'model name\s+:\s+(.*)' )
  
     res_cpu_cores = re_cpu_cores.findall(cpudata)
     cpu_dict[ 'Cpu_Cores' ] = int(res_cpu_cores[-1]) + 1
     res_vendor_id = re_vendor_id.findall(cpudata)
     cpu_dict[ 'Vendor_Id' ] = res_vendor_id[-1]
     res_model_name = re_model_name.findall(cpudata)
     cpu_dict[ 'Model_Name' ] = res_model_name[-1]
     return  cpu_dict
  
#####[Demi message]#####
def get_dmidecode():
     P = Popen([ 'dmidecode' ],stdout=PIPE)
     data = P.stdout. read ()
     lines = data. split ( '\n\n' )
     dmidecode_line =  lines[2]
     line = [i.strip()  for  in  dmidecode_line. split ( '\n' if  i]
     Manufacturer = line[2]. split ( ': ' )[-1]
     product = line[3]. split ( ': ' )[-1]
     sn = line[5]. split ( ': ' )[-1]
     return  Manufacturer,product,sn
  
if  __name__ ==  '__main__' :
     #####[get data]#####
     hostname  = get_HostnameInfo( '/etc/sysconfig/network' )
     ip = get_Ipaddr()
     osversion = get_OsVerion( '/etc/issue' )
     memory = get_MemoryInfo( '/proc/meminfo' )
     disk = get_DiskInfo()
     Vendor_Id = get_CpuInfo()[ 'Vendor_Id' ]
     Model_Name = get_CpuInfo()[ 'Model_Name' ]
     Cpu_Cores = get_CpuInfo()[ 'Cpu_Cores' ]
     Manufacturer,product,sn = get_dmidecode()
  
     #####[get dict]##### 
     hostinfo = {
         'hostname' : hostname ,
         'ip' :ip,
         'osversion' :osversion,
         'memory' :memory,
         'disk' :disk,
         'vendor_id' :Vendor_Id,
         'model_name' :Model_Name,
         'cpu_core' :Cpu_Cores,
         'product' :product,
         'Manufacturer' :Manufacturer,
         'sn' :sn,
         }
     print hostinfo
     #data = urllib.urlencode(hostinfo)    #注释掉原来
     data = pickle.dumps(hostinfo)     #添加一行
  
     req = urllib2.urlopen( 'http://192.168.1.210:80/hostinfo' ,data)

(3)执行此脚本

1
2
[root@localhost Simplecmdb] # python post_hostinfo.py 
{ 'product' 'VMware Virtual Platform' 'ip' '192.168.1.210' 'vendor_id' 'GenuineIntel' 'cpu_core' : 1,  'disk' '17.18G' 'hostname' 'localhost.localdomain' 'sn' 'VMware-56 4d 41 69 ad a2 e6 3c-84 eb 81 81 e9 b4 4a 54' 'memory' '0.50G' 'osversion' 'CentOS release 6.4 ' 'model_name' 'Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz' 'Manufacturer' 'VMware, Inc.' }

(4)刷新浏览器,会看到新添加了一行

wKioL1T1U-3Cv96tAAkYqbtpQsg850.jpg


2、json方式(和上述方法基本相同)

(1)修改views.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
[root@localhost Simplecmdb] # cat hostinfo/views.py
from django.shortcuts  import  render
from django.http  import  HttpResponse
from hostinfo.models  import  Host
import  pickle
import  json     #导入模块
 
# Create your views here.
def index(req):
     if  req.method ==  'POST' :
     pick_obj = json.loads(req.body)     #修改此处
         hostname  = pick_obj[ 'hostname' ]
         ip = pick_obj[ 'ip' ]
         osversion = pick_obj[ 'osversion' ]
         memory = pick_obj[ 'memory' ]
         disk = pick_obj[ 'disk' ]
         vendor_id = pick_obj[ 'vendor_id' ]
         model_name = pick_obj[ 'model_name' ]
         cpu_core = pick_obj[ 'cpu_core' ]
         product = pick_obj[ 'product' ]
         Manufacturer = pick_obj[ 'Manufacturer' ]
         sn = pick_obj[ 'sn' ]
 
     try:
         host = Host.objects.get( hostname = hostname )
     except:
             host = Host()
         host. hostname  hostname
         host.ip = ip
         host.osversion = osversion
         host.memory = memory
         host.disk = disk
         host.vendor_id = vendor_id
         host.model_name = model_name
         host.cpu_core = cpu_core
         host.product = product
         host.Manufacturer = Manufacturer
         host.sn = sn    
         host.save()
         return  HttpResponse( 'ok' )
     else :
         return  HttpResponse( 'no data' )

(2)修改搜集主机信息脚本(需要修改一个地方)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
[root@localhost Simplecmdb] # cat post_hostinfo.py 
#!/usr/bin/env python
#coding:utf8
#author:Allentuns
#time:2015-02-14
 
from subprocess  import  Popen,PIPE
import  urllib,urllib2
import  pickle
import  json
import  re
 
###[hostname message]#####
def get_HostnameInfo( file ):
     with  open ( file , 'r' ) as fd:
         data = fd. read (). split ( '\n' )
         for  line  in  data:
             if  line.startswith( 'HOSTNAME' ):
                 hostname  = line. split ( '=' )[1]
                 break
     return  hostname
 
#####[ipaddr message]#####
def get_Ipaddr():
     P = Popen([ 'ifconfig' ],stdout=PIPE)
     data = P.stdout. read ()
     list = []
     str =  ''
     option = False
     lines = data. split ( '\n' )
     for  line  in  lines:
         if  not line.startswith( ' ' ):
             list.append(str)
             str = line
         else :
             str += line
     while  True:
         if  ''  in  list:
             list.remove( '' )
         else :
             break
     r_devname = re.compile( '(eth\d*|lo)'
     r_mac = re.compile( 'HWaddr\s([A-F0-9:]{17})' )
     r_ip = re.compile( 'addr:([\d.]{7,15})' )
     for  line  in  list:
         devname = r_devname.findall(line)
         mac = r_mac.findall(line)
         ip = r_ip.findall(line)
         if  mac:
             return   ip[0]
 
#####[osversion message]#####
def get_OsVerion( file ):
     with  open ( file ) as fd:
     lines = fd.readlines()
     os_version = lines[0][:-8]
     return  os_version
 
#####[memory message]#####
def get_MemoryInfo( file ):
    with  open ( file ) as fd:
         data_list = fd. read (). split ( '\n' )
         MemTotal_line = data_list[0]
         Memory_K = MemTotal_line. split ()[1]
         Memory_G = float(Memory_K) /1000/1000
         Memory_G2 =  '%.2f'  % Memory_G
         memory = Memory_G2 +  'G'
         return  memory
 
#####[disk message]#####
def get_DiskInfo():
     p = Popen([ 'fdisk' , '-l' ],stdout=PIPE,stderr=PIPE)
     stdout,stderr = p.communicate()
     diskdata = stdout
 
     disk_initial_size = 0
     re_disk_type = re.compile(r 'Disk /dev/[shd]{1}.*:\s+[\d.\s\w]*,\s+([\d]+).*' )
     disk_size_bytes = re_disk_type.findall(diskdata)
     for  size  in  disk_size_bytes:
     disk_initial_size += int(size)
     disk_size_total_bytes =  '%.2f'   % (float(disk_initial_size) /1000/1000/1000 )
     disk_size_total_G = disk_size_total_bytes +  'G'
     disk = disk_size_total_G
     return  disk
 
#####[cpu message]#####
def get_CpuInfo():
     p = Popen([ 'cat' , '/proc/cpuinfo' ],stdout=PIPE,stderr=PIPE)
     stdout, stderr = p.communicate()
     cpudata = stdout.strip()
 
     cpu_dict = {}
     re_cpu_cores = re.compile(r 'processor\s+:\s+([\d])' )
     re_vendor_id = re.compile(r 'vendor_id\s+:\s([\w]+)' )
     re_model_name = re.compile(r 'model name\s+:\s+(.*)' )
 
     res_cpu_cores = re_cpu_cores.findall(cpudata)
     cpu_dict[ 'Cpu_Cores' ] = int(res_cpu_cores[-1]) + 1
     res_vendor_id = re_vendor_id.findall(cpudata)
     cpu_dict[ 'Vendor_Id' ] = res_vendor_id[-1]
     res_model_name = re_model_name.findall(cpudata)
     cpu_dict[ 'Model_Name' ] = res_model_name[-1]
     return  cpu_dict
 
#####[Demi message]#####
def get_dmidecode():
     P = Popen([ 'dmidecode' ],stdout=PIPE)
     data = P.stdout. read ()
     lines = data. split ( '\n\n' )
     dmidecode_line =  lines[2]    
     line = [i.strip()  for  in  dmidecode_line. split ( '\n' if  i]
     Manufacturer = line[2]. split ( ': ' )[-1]
     product = line[3]. split ( ': ' )[-1]
     sn = line[5]. split ( ': ' )[-1]
     return  Manufacturer,product,sn
 
if  __name__ ==  '__main__' :
     #####[get data]#####
     hostname  = get_HostnameInfo( '/etc/sysconfig/network' )
     ip = get_Ipaddr()
     osversion = get_OsVerion( '/etc/issue' )
     memory = get_MemoryInfo( '/proc/meminfo' )
     disk = get_DiskInfo()
     Vendor_Id = get_CpuInfo()[ 'Vendor_Id' ]
     Model_Name = get_CpuInfo()[ 'Model_Name' ]
     Cpu_Cores = get_CpuInfo()[ 'Cpu_Cores' ]
     Manufacturer,product,sn = get_dmidecode()
     
     #####[get dict]##### 
     hostinfo = {
     'hostname' : hostname ,
     'ip' :ip,
     'osversion' :osversion,
     'memory' :memory,
     'disk' :disk,
     'vendor_id' :Vendor_Id,
     'model_name' :Model_Name,
     'cpu_core' :Cpu_Cores,
     'product' :product,
     'Manufacturer' :Manufacturer,
     'sn' :sn,
     }
     print hostinfo
     #data = urllib.urlencode(hostinfo)
     #data = pickle.dumps(hostinfo)    #注释掉
     data = json.dumps(hostinfo)        #添加一行
 
     req = urllib2.urlopen( 'http://192.168.1.210:80/hostinfo' ,data)

(3)执行此脚本

1
2
[root@localhost Simplecmdb] # python post_hostinfo.py 
{ 'product' 'VMware Virtual Platform' 'ip' '192.168.1.210' 'vendor_id' 'GenuineIntel' 'cpu_core' : 1,  'disk' '17.18G' 'hostname' 'localhost.localdomain' 'sn' 'VMware-56 4d 41 69 ad a2 e6 3c-84 eb 81 81 e9 b4 4a 54' 'memory' '0.50G' 'osversion' 'CentOS release 6.4 ' 'model_name' 'Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz' 'Manufacturer' 'VMware, Inc.' }

(4)刷新浏览器,会看到再次新添加了一行

wKioL1T1VqXixKeOAAm22zx6Q9w076.jpg






     本文转自zys467754239 51CTO博客,原文链接:http://blog.51cto.com/467754239/1616806,如需转载请自行联系原作者






目录
打赏
0
0
0
0
347
分享
相关文章
🚀告别繁琐!Python I/O管理实战,文件读写效率飙升的秘密
【7月更文挑战第29天】在 Python 编程中,高效的文件 I/O 对性能至关重要。
67 4
🔍深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
【7月更文挑战第29天】深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
55 3
Python I/O管理新篇章:优化你的程序,让数据流动更顺畅
【7月更文挑战第30天】在数据驱动时代, Python I/O操作效率至关重要。理解I/O瓶颈,使用缓冲技术(如调整`open`的`buffering`参数),并发与异步I/O(借助`asyncio`),高效序列化(json, msgpack),及监控调试(cProfile)能显著提升性能。示例展示了缓冲读取和异步文件操作的最佳实践。不断学习可助开发者优化数据流。
96 2
|
7月前
|
Python高手修炼手册:精通文件系统操作,掌控I/O管理,提升编程效率
【7月更文挑战第30天】在 Python 编程中, 文件系统操作与 I/O 管理是连接程序与数据的关键。初学者常因路径错误和权限问题受挫, 而高手能自如管理文件。传统 `os` 和 `os.path` 模块易出错, `pathlib` 提供了更直观的对象导向 API。I/O 方面, 同步操作会阻塞程序, 异步 (如使用 `aiofiles`) 则能大幅提升并发能力。真正的高手不仅掌握 API, 更能预见性能瓶颈并优化代码, 实现高效与优雅。
59 1
使用Python的垃圾回收机制来管理内存
使用Python的垃圾回收机制来管理内存
|
8月前
|
Python中有效地使用global和globals()来管理全局变量
Python中有效地使用global和globals()来管理全局变量
137 1
以下是一个简化的车库管理系统工程概述,并附带Python代码示例和详解。
以下是一个简化的车库管理系统工程概述,并附带Python代码示例和详解。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等