def index(): print('Index Page....') def bbs(): print('BBS Page....') def login(): print('Login Page....') def center(): print('Center Page....') def other(): print('访问页面不存在....') def logout(): print('Logout Page...') # 实现一个路由表,将url和功能函数的对应关系存到这个字典中…
Linux 路由 静态路由 目录 Linux 路由 静态路由 一.临时生效,使用命令route A.添加到主机的路由 B.添加到网络的路由 C.添加默认路由 D.删除路由 E.查看所有路由信息 二.临时生效,使用命令ip route A.添加路由,和route比较 B.改变路由,路由必须已存在 C.替换路由,路由不存在则添加 D.删除路由 E.清空路由 F.查看路由表 G.查看单个路由 H.缩写 三.永久生效,写入配置文件/etc/sysconfig/network-scripts/route-…
字典 在python中,字典是一系列键-值对,每个键都与一个值相关联,可使用键来访问相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典,即可将任何python对象用在字典中的值. 在python中,字典用放在花括号{}中的一系列键-值对表示. alien_o = {'color':'green','points':'5'} #键值对是两个相关联的值,指定键时,将返回与之相关联的值.键与值之间用冒号隔开,而键值对之间用逗号分割.在字典中,想存储多少个键值对都可以. #最简单的是只有一个键值…
vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用,是用一些超链接来实现页面切换和跳转的.在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换. 首先在html中,引入vue-router.js和vue.js,用router-link触发路由跳转,router-link可以像a标签一样使用和定义样式 router-view区域是路由匹配到的组件渲染的地方 <script src="https://unpkg.com/vue…
# 实现一个空路由表,利用装饰器将url和功能函数的对应关系自动存到这个字典中 router_dict = {} # 定义一个装饰器 # 再给一层函数定义,用来传入一个参数,这个参数就是访问的页面地址 def set_args(url): def set_func(func): def wrapper(*args, **kwargs): func(*args, **kwargs) router_dict[url] = wrapper # 既可以是func也可以是wrapper,单如果是func,…
首先看一个例子 ''' 多个装饰器装饰一个函数 ''' # 定义第一个装饰器 def set_func1(func): def wrapper1(*args,**kwargs): print('装饰内容开始1') func(*args, **kwargs) print('装饰内容结束1') return wrapper1 # 定义第二个装饰器 def set_func2(func): def wrapper2(*args,**kwargs): print('装饰内容开始2') func(*arg…
根据函数是否传参  是否有返回值 ,可以分析出装饰器的四种形式: 形式一:无参无返回值 def outer(func): def wrapper(): print("装饰器功能1") ret = func() print("装饰器功能2") return ret return wrapper # 定义一个无参无返回值的函数 @outer def main_func(): print("hello") main_func() # 开始执行 结果如下…
前言 早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的网络协议,互不兼容:为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议族(Internet Protocol Suite)就是通用协议标准. 因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议(族) 常用的网络协议如下图所示: TCP/IP模型   1.网络接口层(物…
args与kwargs详解 """ Process([group [, target [, name [, args [, kwargs]]]]]) - target:目标,指向,表示子进程要执行的代码在target指向的函数中 - args:可变参数,封装在元组中,传递给target指向的函数 - kwargs:关键字参数,封装在字典中,传递给target指向的函数 """ import multiprocessing def work(a,…
多线程共享全局变量出现了安全问题的解决方法 当多线程共享全局变量时,可能出现安全问题,解决机制----互斥锁:即在在一段与全局变量修改相关的代码中,假设一个时间片不足以完成全局变量的修改,就在这段代码中加个互斥锁(不是锁整个线程),强行暂停下个时间片的执行,让修改进行到一半的代码能够继续执行完,可以解决安全问题,这就导致还会有一些时间片的浪费,整个程序执行完的总时间的时间少于<2>中那些时间片的总和. 补充: 在多线程编程中,一些敏感数据不允许被多个线程同时访问,因为会出现线程安全问题,通过线…
在浏览器访问web服务器的时候,服务器收到的是一个请求报文,大概GET请求的格式大概如下: 先随便拿到一个请求报文,蓝色即为我们要获取的 GET  /index.html  HTTP/1.1  Host: www.baidu.comConnection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit…
代码中No.1  No.2 ...表示执行流程 """No.1 No.2 ...表示执行流程""" def set_func(func): # <No.1-1>:func = show---->作用:func 指向原show 函数 , def wrapper(*args, **kwargs): print("装饰器功能1") # <No.3>:"装饰器功能1" return f…
global用法虽然很简单,当在函数中要修改全局变量时要使用到,但也要注意一个小问题,看下面的代码: 调用append()方法,只是修改,并不是赋值操作,不需要global提前声明 temp_num = [1, 2, 3] def main(): for i in range(3): temp_num.appent(i) # 只是修改,并不是赋值操作,不需要global提前声明 print(temp_num) if __name__ == '__main__': main() 结果如下: [1,…
一.三者在代码上的特征 1.有__iter__方法的对象就是可迭代类(对象) 2.有__iter__方法,__next()方法的对象就是迭代器3.生成器 == 函数+yield 生成器属于迭代器, 迭代器是特殊的可迭代对象 二.各自的执行过程 1.可迭代对象执行过程 1.先调用iter()函数:  iter(iterable) -> iterator : 函数传入一个可迭代对象(iterable),返回迭代器(iterator); 内部是通过可迭代对象(iterable)的__iter__ ()…
1.通过multiprocessing.Process()类创建子进程 import multiprocessing, time, os, random def work(index): """ 任务 :param index:任务索引号 """ start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起 # random.random() :random() -> x in the inter…
进程与线程 先引入三个比如: cpu---公司 进程---办公室   线程---程序员(我们)   全局变量,内存等资源---公司提供的电脑,桌子等 进程:  操作系统分配程序执行资源的单位 线程:进程的一个实体,是CPU调度和分配的单位. 理解: 进程一旦建立,便有了一个主线程与主进程,还包括线程可能用到的内存,硬盘等资源,也就是是说,进程=线程+资源,就好比一个办公室=程序员+电脑 , 电脑这些资源由公司负责分配,而真正使用这些资源的是我们程序员. 多进程与多线程 为了更大的提高公司的业绩,…
流程如下: """tcp服务端创建流程1. 创建服务端的tcp socket : server_socket 用于监听客户端的请求2. 绑定端口3. server_socket开启监听,由主动连接模式变为被动接受模式4. 等待接收客户端的请求, 一有连接,则立即响应,且创建一个与客户端对接的socket,用该socket与客户端通信5. 使用新创建的socket与客户端通信6. 关闭新创建的socket, 该socket关闭,则与当前客户端结束通信7. server_sock…
实现流程如下: """ TCP客户端实现流程1. 创建一个tcp 客户端对象2. 与服务端建立连接3. 通过tcp socket 收发数据4. 关闭连接 关闭tcp """ 代码如下: from socket import * def main(): # .创建tcp_client_socket 套接字对象 tcp_client_socket = socket(AF_INET,SOCK_STREAM) # 作为客户端,主动连接服务器较多,一般不需…
以下是我常用到的Pycharm快捷键(还有很多,只是我暂时用的最多的就这些): 在开发过程中,经常使用一些快捷键会大大提高开发效率,不要因为看这多而不用,常用的就那些,用得多就都记住了,脱离鼠标,逼格就是高,嘿嘿! ctrl+w               慢慢选定一个词,一个行,三行 ctrl+alt+L                代码格式一键整理(特别好用,再也不需要每次点小灯泡了) ctrl+y                删除光标所在行ctrl+d                往…
静态路由 路由选择原理 什么是路由? 就如同去某一个地方,会有很多种路线,每一条路线经都可以称之为路由: 路由器中会维护一张路由表,每一个表项都是一条路由,也就是去往某个网络的路径,然后将对应的数据包从相应的接口送出去. 路由器的工作内容 路由器知道目的地址 发现到达目标地址的可能的路由 选择最佳路径(路由表) 维护路由信息 可以通过在特权模式中使用show ip route命令来查看路由表. 概念: 被动路由协议(Routed protocols):用来在路由器之间传递用户的信息 主动路由协议…
1. IP地址的构成 IP地址:32比特的二进制数字,通常采用点分十进制方式表示. IP地址由两部分组成. 网络号码字段(Net-id)用于区分不同的网络.网络号码字段的前几位成为类别字段(又称为类别比特),用来区分IP地址的类型. 主机号码字段(Host-id):用于区分一个网络内的不同主机. 子网掩码:32比特的二进制数字,使用子网掩码可以确定IP地址中的网络号. 2. IP地址的分类及范围 (1) A类地址. 地址范围:0.0.0.0 ~ 127.255.255.255. IP地址0.0.…
协议 :标识 前方的目的网络 是通过什么协议形成的 优先级:代表形成路由的协议的优先级数值 [厂商规定] 开销值:代表该路由协议形成此路由时的开销 -- 不同的协议计算开销值的方式有区别(越小越优) 直连/静态 = cost =0 COST值的比较仅仅在同一协议下才有意义. 下一跳:下一跳地址 --- 数据离开本路由器需要抵达的地址 形成方式:1.静态--手动指定 2.动态:利用路由协议自动形成 出接口:设备的出接口 去往下一跳地址 自己的设备应该从哪个接口可以抵达 -- 接口编号. 路由表加表…
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px ".PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingF…
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. Tkinter 模块元素简要说明 2. 常用窗口部件及简要说明: 四.动手实践学习 1. 创建主窗口及Label部件(标签)创建使用 2. Button窗口部件 3. Entry窗口部件 4. Text窗口部件 5. Listbo…
Python学习系列(七)( 数据库编程)        Python学习系列(六)(模块) 一,MySQL-Python插件       Python里操作MySQL数据库,需要Python下安装访问MySQL数据库接口API包即插件,从而使得Python2.7能访问操作MySQL数据库.MySQL软件可以去官网下载:http://www.mysql.com/; MySQLdb插件下载:http://sourceforge.net/projects/mysql-python/files/lat…
C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码开关即optimize开关,和debug开关一起,有以下几种组合. 在Visual Sutdio中新建一个C#项目时,项目的“调试”(Debug)配置的是/optimize-和/debug:full开关,而“发布”(Release)配置指定的是/optimize+和/debug:pdbonly开关…
上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的不同,又为不同的数据运算符. 4.1数据运算符:(以Python为例) 4.1.1算术运算符 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { fo…
Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'green','point':5,'height':10,'width':10} print(alien_0) #访问字典中的值--字典名[键] print(alien_0['color']) print(alien_0['point']) #添加键值对 alien_0['x_position']=0…
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出,也可以指定每次read读多少字节,例如: #coding:utf-8 fn='test1.py' fp=open(fn,'r') #以读的方式打开文件,文件必须首先存在和,.文件在同一目录下py print 'reading pos:',fp.tell() r=fp.read(20) #读取文件内…
以下所有例子都基于最新版本的 Python,为了便于消化,每一篇都尽量短小精悍,希望你能尽力去掌握 Python 编程的「概念」,可以的话去动手试一下这些例子(就算目前还没完全搞懂),加深理解. 在 Python 中,常见的基本数据类型有: 数字:整数 int,浮点数 float 字符串:str 布尔值:bool 而常见的复杂数据类型有: 列表:list 字典:dict 自然界中,复杂的事物可以由简单的事物组合而成. 在编程中,所有的复杂数据类型都可以由基本数据类型组合而成. 列表 list 又…