首页 文章 精选 留言 我的

精选列表

搜索[python],共10000篇文章
优秀的个人博客,低调大师

python str.endswith

判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False suffix -- 该参数可以是一个字符串或者是一个元素。 start -- 字符串中的开始位置。 end -- 字符中结束位置。 endswith(...) S.endswith(suffix[, start[, end]]) -> bool Return True if S ends with the specified suffix, False otherwise. With optional start, test S beginning at that position. With optional end, stop comparing S at that position. suffix can also be a tuple of strings to try.

优秀的个人博客,低调大师

python——Django项目模板

views.py 1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.shortcuts import render 5 from message.models import UserMessage 6 # Create your views here. 7 def getform(request): 8 if request.method == 'POST': 9 name = request.POST.get('name','') 10 email = request.POST.get('email','') 11 address = request.POST.get('address','') 12 message = request.POST.get('message','') 13 mess = UserMessage() 14 mess.name = name 15 mess.email = email 16 mess.adress = address 17 mess.message = message 18 mess.save() 19 return render(request, 'message_form.html') settings.py 1 """ 2 Django settings for DjangoTest project. 3 4 Generated by 'django-admin startproject' using Django 1.11.10. 5 6 For more information on this file, see 7 https://docs.djangoproject.com/en/1.11/topics/settings/ 8 9 For the full list of settings and their values, see 10 https://docs.djangoproject.com/en/1.11/ref/settings/ 11 """ 12 13 import os 14 15 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 18 # STATIC_ROOT = os.path.join(BASE_DIR, 'static') 19 20 # Quick-start development settings - unsuitable for production 21 # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ 22 23 # SECURITY WARNING: keep the secret key used in production secret! 24 SECRET_KEY = '42$e_@s@&l+#_$3_d02$f*n0@uqk#-51klz)4z1t_fi2ok!ol7' 25 26 # SECURITY WARNING: don't run with debug turned on in production! 27 DEBUG = True 28 29 ALLOWED_HOSTS = [] 30 31 32 # Application definition 33 34 INSTALLED_APPS = [ 35 'django.contrib.admin', 36 'django.contrib.auth', 37 'django.contrib.contenttypes', 38 'django.contrib.sessions', 39 'django.contrib.messages', 40 'django.contrib.staticfiles', 41 'message' 42 ] 43 44 MIDDLEWARE = [ 45 'django.middleware.security.SecurityMiddleware', 46 'django.contrib.sessions.middleware.SessionMiddleware', 47 'django.middleware.common.CommonMiddleware', 48 'django.middleware.csrf.CsrfViewMiddleware', 49 'django.contrib.auth.middleware.AuthenticationMiddleware', 50 'django.contrib.messages.middleware.MessageMiddleware', 51 'django.middleware.clickjacking.XFrameOptionsMiddleware', 52 ] 53 54 ROOT_URLCONF = 'DjangoTest.urls' 55 56 TEMPLATES = [ 57 { 58 'BACKEND': 'django.template.backends.django.DjangoTemplates', 59 'DIRS': [os.path.join(BASE_DIR, 'templates')], 60 'APP_DIRS': True, 61 'OPTIONS': { 62 'context_processors': [ 63 'django.template.context_processors.debug', 64 'django.template.context_processors.request', 65 'django.contrib.auth.context_processors.auth', 66 'django.contrib.messages.context_processors.messages', 67 ], 68 }, 69 }, 70 ] 71 72 WSGI_APPLICATION = 'DjangoTest.wsgi.application' 73 74 75 # Database 76 # https://docs.djangoproject.com/en/1.11/ref/settings/#databases 77 78 DATABASES = { 79 'default': { 80 'ENGINE': 'django.db.backends.mysql', 81 'NAME': "DjangT", 82 'USER': "root", 83 'PASSWORD':"root", 84 'HOST':"127.0.0.1" 85 } 86 } 87 88 89 # Password validation 90 # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators 91 92 AUTH_PASSWORD_VALIDATORS = [ 93 { 94 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 95 }, 96 { 97 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 98 }, 99 { 100 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 101 }, 102 { 103 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 104 }, 105 ] 106 107 108 # Internationalization 109 # https://docs.djangoproject.com/en/1.11/topics/i18n/ 110 111 LANGUAGE_CODE = 'en-us' 112 113 TIME_ZONE = 'UTC' 114 115 USE_I18N = True 116 117 USE_L10N = True 118 119 USE_TZ = True 120 121 # Static files (CSS, JavaScript, Images) 122 # https://docs.djangoproject.com/en/1.11/howto/static-files/ 123 124 STATIC_URL = '/static/' 125 STATICFILES_DIRS = [ 126 os.path.join(BASE_DIR,'static') 127 ] models.py 1 # -*- coding: utf-8 -*- 2 from __future__ import unicode_literals 3 4 from django.db import models 5 6 # Create your models here. 7 class UserMessage(models.Model): 8 name = models.CharField(max_length=20,verbose_name=u"用户名") 9 email = models.CharField(max_length=100,verbose_name=u"邮箱",default="",primary_key=True) 10 adress = models.CharField(max_length=200,verbose_name=u"联系地址") 11 message = models.CharField(max_length=500,verbose_name=u"留言信息") 12 13 class Meta: 14 verbose_name = u"用户留言信息" 15 verbose_name_plural = verbose_name urls.py 1 """DjangoTest URL Configuration 2 3 The `urlpatterns` list routes URLs to views. For more information please see: 4 https://docs.djangoproject.com/en/1.11/topics/http/urls/ 5 Examples: 6 Function views 7 1. Add an import: from my_app import views 8 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 Class-based views 10 1. Add an import: from other_app.views import Home 11 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 Including another URLconf 13 1. Import the include() function: from django.conf.urls import url, include 14 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 """ 16 from django.conf.urls import url 17 from django.contrib import admin 18 from message.views import getform 19 20 urlpatterns = [ 21 url(r'^admin/', admin.site.urls), 22 url(r'^form/$', getform) 23 ] message_form.html 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <link rel="stylesheet" href="/static/css/style.css"> 7 </head> 8 <body> 9 <form action="/form/" method="post" class="smart-green"> 10 <h1>留言信息 11 <span>请留下你的信息.</span> 12 </h1> 13 <label> 14 <span>姓名 :</span> 15 <input id="name" type="text" name="name" class="error" placeholder="请输入您的姓名"/> 16 <div class="error-msg"></div> 17 </label> 18 19 <label> 20 <span>邮箱 :</span> 21 <input id="email" type="email" value="" name="email" placeholder="请输入邮箱地址"/> 22 <div class="error-msg"></div> 23 </label> 24 25 <label> 26 <span>联系地址 :</span> 27 <input id="address" type="text" value="" name="address" placeholder="请输入联系地址"/> 28 <div class="error-msg"></div> 29 </label> 30 31 <label> 32 <span>留言 :</span> 33 <textarea id="message" name="message" placeholder="请输入你的建议"></textarea> 34 <div class="error-msg"></div> 35 </label> 36 <div class="success-msg"></div> 37 <label> 38 <span>&nbsp;</span> 39 <input type="submit" class="button" value="提交"/> 40 </label> 41 <input type='hidden' name='csrfmiddlewaretoken' value='SfHkbL4feo1G00sJQtbO7TtLN4c2BUwa' /> 42 {% csrf_token %} 43 </form> 44 45 </body> 46 </html> style.css 1 .smart-green { 2 margin-left: auto; 3 margin-right: auto; 4 max-width: 500px; 5 background: #F8F8F8; 6 padding: 30px 30px 20px 30px; 7 font: 12px Arial, Helvetica, sans-serif; 8 color: #666; 9 border-radius: 5px; 10 -webkit-border-radius: 5px; 11 -moz-border-radius: 5px; 12 } 13 .smart-green h1 { 14 font: 24px "Trebuchet MS", Arial, Helvetica, sans-serif; 15 padding: 20px 0px 20px 40px; 16 display: block; 17 margin: -30px -30px 10px -30px; 18 color: #FFF; 19 background: #9DC45F; 20 text-shadow: 1px 1px 1px #949494; 21 border-radius: 5px 5px 0px 0px; 22 -webkit-border-radius: 5px 5px 0px 0px; 23 -moz-border-radius: 5px 5px 0px 0px; 24 border-bottom: 1px solid #89AF4C; 25 } 26 .smart-green h1 > span { 27 display: block; 28 font-size: 11px; 29 color: #FFF; 30 } 31 32 .smart-green label { 33 margin: 0px 0px 5px; 34 display: block; 35 } 36 .smart-green label > span { 37 float: left; 38 margin-top: 10px; 39 color: #5E5E5E; 40 } 41 42 .smart-green input[type="text"], .smart-green input[type="email"], .smart-green textarea, .smart-green select { 43 color: #555; 44 height: 30px; 45 line-height: 15px; 46 width: 100%; 47 padding: 0px 0px 0px 10px; 48 margin-top: 2px; 49 border: 1px solid #E5E5E5; 50 background: #FBFBFB; 51 outline: 0; 52 -webkit-box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2); 53 box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2); 54 font: normal 14px/14px Arial, Helvetica, sans-serif; 55 } 56 57 .smart-green textarea { 58 height: 100px; 59 padding-top: 10px; 60 } 61 62 63 .smart-green .button { 64 background-color: #9DC45F; 65 border-radius: 5px; 66 -webkit-border-radius: 5px; 67 -moz-border-border-radius: 5px; 68 border: none; 69 padding: 10px 25px 10px 25px; 70 color: #FFF; 71 text-shadow: 1px 1px 1px #949494; 72 } 73 74 .smart-green .button:hover { 75 background-color: #80A24A; 76 } 77 78 .error-msg{ 79 color: red; 80 margin-top: 10px; 81 } 82 .success-msg{ 83 color: #80A24A; 84 margin-top: 10px; 85 margin-bottom: 10px; 86 } 数据库mysql,使用navicat premium工具。

优秀的个人博客,低调大师

python中的线程

1.线程的创建 1.1 通过thread类直接创建 import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.sleep(n) print("bar func:",n) s1=time.time() #创建一个线程实例t1,foo为这个线程要运行的函数 t1=threading.Thread(target=foo,args=(3,)) t1.start() #启动线程t1 #创建一个线程实例t2,bar为这个线程要运行的函数 t2=threading.Thread(target=bar,args=(5,)) t2.start() #启动线程t2 print("ending") s2=time.time() print("cost time:",s2-s1) 在这段程序里,一个函数会先休眠几秒钟,然后再打印一句话,第二个函数也是先休眠几秒钟,然后打印一句话。 接着程序会实例化两个线程,并调用两个函数来执行,最后会打印程序问总共执行了多少时间 程序运行结果如下: ending cost time: 0.002000093460083008 foo func: 3 bar func: 5 程序会先运行父线程,打印"ending",然后打印程序执行父线程的时间,最后才会运行子线程 1.2 通过thread类来继承式创建 import threading import time # 定义MyThread类,其继承自threading.Thread这个父类 class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): print("ok") time.sleep(2) print("end t1") # 对类进行实例化 t1=MyThread() # 启动线程 t1.start() print("ending") 2. Thread类的一些常用方法 2.1 join():在子线程完成之前,主线程将一直被阻塞 线程的join方法必须在子线程的start方法之后定义 在第一个例子中加入两行代码,如下: import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.sleep(n) print("bar func:",n) s1=time.time() t1=threading.Thread(target=foo,args=(3,)) t1.start() t2=threading.Thread(target=bar,args=(5,)) t2.start() t1.join() # 阻塞t1线程 t2.join() # 阻塞t2线程 print("ending") s2=time.time() print("cost time:",s2-s1) 再次执行程序,运行结果如下: foo func: 3 bar func: 5 ending cost time: 5.002285957336426 程序运行到子线程t1中的foo方法时会睡眠3秒钟,与此同时,子线程t2也在睡眠 等到子线程t1睡眠完成后,开始打印foo函数中的print语句,然后子线程t1执行完成 2秒钟之后,子线程t2睡眠完成,开始打印bar函数中的print语句,然后子线程t2也执行完成。 而在这之前,主线程一直处于阻塞状态。等到子线程执行完成之后主线程才会执行 2.2 setDeamon(True) setDaemon方法作用是将进程声明为守护线程,必须在`start()`方法调用之前, 如果不设置为守护线程,程序会被无限挂起 在程序执行过程中,执行一个主线程,主线程又创建一个子线程时,主线程和子线程会分别运行。 当主线程运行完成时,会检验子线程是否执行完成,如果子线程执行完成,则主线程会等待子线程完成后再退出。 但是有的时候只要主线程执行完成之后,不管子线程是否执行完成,都和主线程一起退出,这个就需要调用setDeamon方法了。 拿第一个例子来说吧,现在我想让子线程t1和t2随同主线程关闭,代码如下: import threading import time def foo(n): print("foo start") time.sleep(n) print("foo end...") def bar(n): print("bar start") time.sleep(n) print("bar end...") s1 = time.time() t1 = threading.Thread(target=foo, args=(3,)) t1.setDaemon(True) t1.start() t2 = threading.Thread(target=bar, args=(5,)) t2.setDaemon(True) t2.start() print("ending") s2 = time.time() print("cost time:", s2 - s1) 程序运行结果如下 : foo start bar start ending cost time: 0.003000020980834961 可以看到,把t1和t2都声明为守护线程后,程序自上而下执行,先执行子线程t1中的foo方法,打印foo函数中的第一条打印语句,然后子线程t1进入到睡眠状态。 然后子线程t2执行,打印bar函数中的第一条print语句,然后子线程t2进入睡眠状态,程序切换到主线程运行 主线程打印完"ending"语句,发现子线程t1和t2已经被设置为守护线程,所以主线程不需要再等待两个子线程执行完成,而是立即结束,打印整个程序的执行时间。 整个程序就跟随主线程一起关闭了。 2.3 子线程的一些其他方法 isAlive() #判断一个线程是否是活动线程 getName() #返回线程的名字 setName() #设置线程的名字 import threading import time def foo(n): time.sleep(n) print("foo func:", n) def bar(n): time.sleep(n) print("bar func:", n) s1 = time.time() t1 = threading.Thread(target=foo, args=(3,)) t1.setDaemon(True) print("线程还未启动时,判断t1是否是活动的线程:", t1.isAlive()) # 线程还未启动,所以是False t1.start() # 启动线程 print("线程已启动时,判断t1是否是活动的线程:", t1.isAlive()) # 线程已启动,所以是True print("修改前的线程名为:",t1.getName()) # 获取线程名 t1.setName("t1") #设置线程名 print("修改后的线程名为:",t1.getName()) # 获取线程名 t1.join() print("线程执行完成时,判断t1是不否是活动的线程:", t1.isAlive()) # 线程已执行完成,所以是False # print(threading.activeCount()) print("ending") s2 = time.time() print("cost time:", s2 - s1) 程序执行结果: 线程还未启动时,判断t1是否是活动的线程: False 线程已启动时,判断t1是否是活动的线程: True 修改前的线程名为: Thread-1 修改后的线程名为: t1 foo func: 3 线程执行完成时,判断t1是不否是活动的线程: False ending cost time: 3.001171588897705 3.threading模块提供的一些方法 threading.currentThread() #返回当前的线程变量 threading.enumerate() #返回一个包含正在运行的线程的列表,不包括启动前和终止后的线程 threading.activeCount() #返回正在运行的线程数量,等同于len(threading.enumerate()) import threading import time def foo(n): time.sleep(n) print("foo func:", n) def bar(n): time.sleep(n) print("bar func:", n) s1 = time.time() t1 = threading.Thread(target=foo, args=(3,)) t1.setDaemon(True) t1.start() t2 = threading.Thread(target=bar, args=(5,)) t2.setDaemon(True) t2.start() print("程序中正在运行的线程数量:",threading.activeCount()) print("程序中当前的线程变量:",threading.currentThread()) print("当前正在运行的线程的列表:",threading.enumerate()) print("ending") s2 = time.time() print("cost time:", s2 - s1) 程序执行结果: 程序中正在运行的线程数量: 3 程序中当前的线程变量: <_MainThread(MainThread, started 7064)> 当前正在运行的线程的列表: [<_MainThread(MainThread, started 7064)>, <Thread(Thread-1, started daemon 6384)>, <Thread(Thread-2, started daemon 2640)>] ending cost time: 0.002000093460083008

优秀的个人博客,低调大师

python插入排序

插入排序(Insertion Sort)的基本思想是:将列表分为2部分,左边为排序好的部分,右边为未排序的部分,循环整个列表,每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 插入排序非常类似于整扑克牌。 在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。 也许你没有意识到,但其实你的思考过程是这样的:现在抓到一张7,把它和手里的牌从右到左依次比较,7比10小,应该再往左插,7比5大,好,就插这里。为什么比较了10和5就可以确定7的位置?为什么不用再比较左边的4和2呢?因为这里有一个重要的前提:手里的牌已经是排好序的。现在我插了7之后,手里的牌仍然是排好序的,下次再抓到的牌还可以用这个方法插入。编程对一个数组进行插入排序也是同样道理,但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。 source = [92, 77, 67, 8, 6, 84, 55, 85, 43, 67] for index in range(1,len(source)): current_val = source[index] #先记下来每次大循环走到的第几个元素的值 position = index while position > 0 and source[position-1] > current_val: #当前元素的左边的紧靠的元素比它大,要把左边的元素一个一个的往右移一位,给当前这个值插入到左边挪一个位置出来 source[position] = source[position-1] #把左边的一个元素往右移一位 position -= 1 #只一次左移只能把当前元素一个位置 ,还得继续左移只到此元素放到排序好的列表的适当位置 为止 source[position] = current_val #已经找到了左边排序好的列表里不小于current_val的元素的位置,把current_val放在这里 print(source) 结果: [77, 92, 67, 8, 6, 84, 55, 85, 43, 67] [67, 77, 92, 8, 6, 84, 55, 85, 43, 67] [8, 67, 77, 92, 6, 84, 55, 85, 43, 67] [6, 8, 67, 77, 92, 84, 55, 85, 43, 67] [6, 8, 67, 77, 84, 92, 55, 85, 43, 67] [6, 8, 55, 67, 77, 84, 92, 85, 43, 67] [6, 8, 55, 67, 77, 84, 85, 92, 43, 67] [6, 8, 43, 55, 67, 77, 84, 85, 92, 67] [6, 8, 43, 55, 67, 67, 77, 84, 85, 92] #更容易理解的版本 data_set = [ 9,1,22,9,31,-5,45,3,6,2,11 ] for i in range(len(data_set)): #position = i while i > 0 and data_set[i] < data_set[i-1]:# 右边小于左边相邻的值 tmp = data_set[i] data_set[i] = data_set[i-1] data_set[i-1] = tmp i -= 1 # position = i # while position > 0 and data_set[position] < data_set[position-1]:# 右边小于左边相邻的值 # tmp = data_set[position] # data_set[position] = data_set[position-1] # data_set[position-1] = tmp # position -= 1

优秀的个人博客,低调大师

python构造IP报文

import socket import sys import time import struct HOST, PORT = "10.60.66.66", 10086 def make_forward_iphdr(source_ip = '1.0.0.1', dest_ip = '2.0.0.2', proto = socket.IPPROTO_UDP) : # ip header fields ip_ihl = 5 ip_ver = 4 ip_tos = 0 ip_tot_len = 0 # kernel will fill the correct total length ip_id = 54321 #Id of this packet ip_frag_off = 0 ip_ttl = 255 ip_proto = proto ip_check = 0 # kernel will fill the correct checksum ip_saddr = socket.inet_aton ( source_ip ) #Spoof the source ip address if you want to ip_daddr = socket.inet_aton ( dest_ip ) ip_ihl_ver = (ip_ver << 4) + ip_ihl # the ! in the pack format string means network order ip_header = struct.pack('!BBHHHBBH4s4s', ip_ihl_ver, ip_tos, ip_tot_len, ip_id, ip_frag_off, ip_ttl, ip_proto, ip_check, ip_saddr, ip_daddr) return ip_header def make_forward_udphdr(src_port = 1024, dst_port = 10086) : udp_header = struct.pack('!HHHH', src_port, dst_port, 0, 0) return udp_header # checksum functions needed for calculation checksum def checksum(msg): s = 0 # loop taking 2 characters at a time for i in range(0, len(msg), 2): w = ord(msg[i]) + (ord(msg[i+1]) << 8 ) s = s + w s = (s>>16) + (s & 0xffff); s = s + (s >> 16); #complement and mask to 4 byte short s = ~s & 0xffff return s def make_tcp_data(ip_header, src_port = 1024, dst_port = 10086, source_ip='1.0.0.1', dest_ip='2.0.0.2', user_data = 'test') : tcp_source = src_port # source port tcp_dest = dst_port # destination port tcp_seq = 454 tcp_ack_seq = 0 tcp_doff = 5 #4 bit field, size of tcp header, 5 * 4 = 20 bytes #tcp flags tcp_fin = 0 tcp_syn = 1 tcp_rst = 0 tcp_psh = 0 tcp_ack = 0 tcp_urg = 0 tcp_window = socket.htons (5840) # maximum allowed window size tcp_check = 0 tcp_urg_ptr = 0 tcp_offset_res = (tcp_doff << 4) + 0 tcp_flags = tcp_fin + (tcp_syn << 1) + (tcp_rst << 2) + (tcp_psh <<3) + (tcp_ack << 4) + (tcp_urg << 5) # the ! in the pack format string means network order tcp_header = struct.pack('!HHLLBBHHH' , tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window, tcp_check, tcp_urg_ptr) source_address = socket.inet_aton(source_ip) dest_address = socket.inet_aton(dest_ip) placeholder = 0 protocol = socket.IPPROTO_TCP tcp_length = len(tcp_header) + len(user_data) psh = struct.pack('!4s4sBBH' , source_address , dest_address , placeholder , protocol , tcp_length); psh = psh + tcp_header + user_data; tcp_check = checksum(psh) #print tcp_checksum # make the tcp header again and fill the correct checksum - remember checksum is NOT in network byte order tcp_header = struct.pack('!HHLLBBH' , tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window) + struct.pack('H' , tcp_check) + struct.pack('!H' ,tcp_urg_ptr) # final full packet - syn packets dont have any data packet = ip_header + tcp_header + user_data return packet

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册