当前位置: 首页 > news >正文

网站怎样排版上海龙雨建设工程有限公司网站

网站怎样排版,上海龙雨建设工程有限公司网站,公司平台,怎么删除网站的死链闭包 简单认识一下闭包 以下代码#xff0c;内层inner函数不仅依赖于自身的参数b#xff0c;还依赖于外层outer函数的参数a。inner就是一个闭包函数#xff0c;既能访问外部变量#xff0c;又保证外部变量不是全局的#xff0c;不会被篡改掉#xff0c;确保了外部变量的…闭包 简单认识一下闭包 以下代码内层inner函数不仅依赖于自身的参数b还依赖于外层outer函数的参数a。inner就是一个闭包函数既能访问外部变量又保证外部变量不是全局的不会被篡改掉确保了外部变量的安全。 def outer(a): def inner(b): print(f{a}{b}{a}) return inner n1 outer(程序员) # n1的类型是一个函数 n1(学习python) n1(学习java) n2 outer(软件测试工程师) n2(功能测试) n2(自动化测试) 如果要在内层函数修改外层函数的变量需要用nonlocal修饰示例代码如下 def outer(num1): def inner(num2): # 要对外层num1进行修改的话需要nonlocal修饰 nonlocal num1 num1 num2 print(num1) return inner fn outer(10) fn(5) # 输出为15 运行 运行 案例使用闭包方式简单实现ATM存取款 def account_create(initial_amount0): def atm(num, depositTrue): nonlocal initial_amount if deposit: initial_amount num print(f存款{num},账户余额{initial_amount}) else: if initial_amountnum: print(f钱不够{num}了取不出来) else: initial_amount - num print(f取款-{num},账户余额{initial_amount}) return atm atm account_create() atm(100, depositTrue) atm(500, depositTrue) atm(200, depositFalse) atm(1000, depositFalse) 运行 运行 闭包的优缺点 优点 无需定义全局变量即可实现通过函数,持续的访问、修改某个值 闭包使用的变量位于在函数内难以被错误的调用修改 缺点: 由于内部函数持续引用外部函数的值所以会导致这一部分内存空间不被释放,一直占用内存 装饰器 装饰器其实也是一种闭包其功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。 示例代码1 def outer(func): def inner(): print(我要睡觉了......) func() print(睡醒了我要起床了......) return inner() outer # 相当于给sleep增加outer的装饰器 def sleep(): import random import time print(睡眠中......) time.sleep(random.randint(1, 5)) sleep() 示例代码2 1代码实现统计一个函数的运行时间 import time # 统计一个函数的运行时间 def timer(func): def gf(): start_time time.time() func() end_time time.time() print(func运行的时间为, end_time - start_time) return gf timer def foo(): time.sleep(3) print(in foo) foo() 2被装饰函数带参数 import time # 统计一个函数的运行时间 def timer(func): def gf(*args, **kwargs): start_time time.time() func(*args, **kwargs) end_time time.time() print(func运行的时间为, end_time - start_time) return gf timer def foo(name, age): time.sleep(3) print(in foo, name, age) foo(测试, 22) 3装饰器本身带参数 import time # 统计一个函数的运行时间 def timer(timer_type): print(timer_type) def outer(func): def inner(*args, **kwargs): start_time time.time() func(*args, **kwargs) end_time time.time() print(func运行的时间为, end_time - start_time) return inner return outer timer(timer_typesecond) def foo(name, age): time.sleep(3) print(in foo, name, age) foo(测试, 22) 4被装饰函数有返回值 import time # 统计一个函数的运行时间 def timer(timer_type): print(timer_type) def outer(func): def inner(*args, **kwargs): start_time time.time() res func(*args, **kwargs) # 接收返回值 end_time time.time() print(func运行的时间为, end_time - start_time) return res # 返回 return inner return outer timer(timer_typesecond) def foo(name, age): time.sleep(3) print(in foo, name, age) return name # 被装饰函数返回name print(foo(测试, 22)) 单例模式 背景 class Tool: pass t1 Tool() t2 Tool() print(t1) print(t2) # 输出结果 # __main__.Tool object at 0x000001CEB2B190D0 # __main__.Tool object at 0x000001CEB2B190A0 通过print语句可以看出它们的内存地址是不相同的即t1和t2是完全独立的两个对象。 某些场景下我们需要一个类无论获取多少次类对象都仅仅提供一个具体的实例用以节省创建类对象的开销和内存开销比如某些工具类仅需1个实例即可在各处使用。 这就是单例模式所要实现的效果。 定义 保证一个类只有一个实例并提供一个访问它的全局访问点 适用场景当一个类只能有一个实例而客户可以从一个众所周知的访问点访问它 单例的实现模式 工厂模式 背景 当需要大量创建一个类的实例的时候可以使用工厂模式即从原生的使用类的构造去创建对象的形式迁移到基于工厂提供的方法去创建对象的形式 class Person: pass class Worker(Person): pass class Student(Person): pass class Teacher(Person): pass worker Worker() stu Student() teacher Teacher() 以上是传统方式构建基于Person的不同类对象。 采用工厂模式代码就会变成如下 class Person: pass class Worker(Person): pass class Student(Person): pass class Teacher(Person): pass class Factory: def get_person(self, p_type): if p_type w: return Worker() elif p_type s: return Student() else: return Teacher() factory Factory() worker factory.get_person(w) stu factory.get_person(s) teacher factory.get_person(t) 使用工厂类的get_person()方法去创建具体的类对象优点: 大批量创建对象的时候有统一的入口易于代码维护 当发生修改,仅修改工厂类的创建方法即可 符合现实世界的模式即由工厂来制作产品(对象) 多线程编程threading 进程就是一个程序运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程ID方便系统管理。 线程线程是归属于进程的一个进程可以开启多个线程执行不同的工作是进程的实际工作最小单位 并行执行 多个进程同时在运行即不同的程序同时运行称之为: 多任务并行执行 一个进程内的多个线程同时在运行称之为:多线程并行执行 写一段代码我们先看下单线程运行下结果 import time def sing(): while True: print(我在唱歌啦啦啦......) time.sleep(1) def dance(): while True: print(我在跳舞呱呱呱......) time.sleep(2) if __name__ __main__: sing() dance() 要想输出既在唱歌又在跳舞是无法满足的。 使用多线程的话一个线程在唱歌一个线程在跳舞就可以满足需求。 语法 import threading thread_obj threading.Thread([group [target [name [, args [kwargs]]]]]) group: 暂时无用未来功能的预留参数target: 执行的目标任务名args: 以元组的方式给执行任务传参kwargs:以字典方式给执行任务传参name: 线程名一般不用设置 启动线程让线程开始工作thread_obi.start() import time import threading def sing(): while True: print(我在唱歌啦啦啦......) time.sleep(1) def dance(): while True: print(我在跳舞呱呱呱......) time.sleep(2) if __name__ __main__: # 创建一个唱歌的线程 sing_thread threading.Thread(targetsing) # 创建一个跳舞的线程 dance_thread threading.Thread(targetdance) # 运行线程 sing_thread.start() dance_thread.start() Socket服务端编程 主要分为如下几个步骤 1.创建socket对象 import socket socket_server socket.socket(0) 2.绑定socket_server到指定IP和地址 socket_server.bind(host, port) 3.服务端开始监听端口 socket_server.listen(backlog) backlog为int整数表示允许的连接数量超出的会等待可以不填不填会自动设置一个合理值 4.接收客户端连接获得连接对象 conn.address socket_server.accept() print(f接收到客户端连接连接来自: {address}) accept方法是阻塞方法如果没有连接会卡在当前这一行不向下执行代码 accept返回的是一个二元元组可以使用上述形式用两个变量接收二元元组的2个元素 5.客户端连接后通过recv方法,接收客户端发送的消息 while True: data conn.recv(1024).decode(UTF-8) # recv方法的返回值是字节数组(Bytes》可以通过decode使用UTF-8解码为字符串 # recv方法的传参是buffsize缓冲区大小一般设置为1024即可 if data exit: break print(接收到发送来的数据:data) # 可以通过while True无限循环来持续和客户端进行数据交互 # 可以通过判定客户端发来的特殊标记如exit来退出无限循环 6.通过conn(客户端当次连接对象)调用send方法可以回复消息 while True: data conn.recv(1024).decode(UTF-8) if data exit: break print(接收到发送来的数据:, data) conn.send(你好呀哈哈哈.encode(UTF-8”)) 7.conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接 Socket客户端编程 主要分为如下几个步骤: 1.创建socket对象 import socket socket_client socket.socket() 2.连接到服务端 socket_client.connect((localhost8888)) 3.发送消息 while True: # 可以通过无限循环来确保持续的发送消息给服务端 send_msg input(请输入要发送的消息) if send_msg exit: # 通过特殊标记来确保可以退出无限循环 break socket_client.send(send_msg.encode(UTF-8)) # 消息需要编码为字节数组(UTF-8编码) 4.接收返回消息 while True: send_msg input(请输入要发送的消息).encode(UTF-8) socket_client.send(send_msg) recv_data socket_client.recv(124) # 1024是缓冲区大小一般1024即可 #recv方法是阻塞式的即不接收到返回就卡在这里等待 print(服务端回复消息为:recv_data.decode(UTF-8))#接受的消息需要通过UTF-8解码为字符串 5.关闭链接 socket_client.close() 正则表达式 正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。 简单来说,正则表达式就是使用: 字符串定义规则并通过规则去验证字符串是否匹配。 三个基础方法 使用re模块,并基于re模块import re中三个基础方法来做正则匹配。 1match re.match(匹配规则被匹配字符串) 从被匹配字符串开头进行匹配匹配成功返回匹配对象(包含匹配的信息)匹配不成功返回空。 2search re.search(匹配规则被匹配字符串) 搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后 3findall re.findall(匹配规则被匹配字符串) 匹配整个字符串,找出全部匹配项,找不到返回空list:[] 元字符匹配 1单字符匹配 实例 import re s learn python3 12EEAA!!66 ##study3 # 找出全部数字 result1 re.findall(r\d, s) print(result1) # [3, 1, 2, 6, 6, 3] # 找出特殊字符 result2 re.findall(r\W, s) print(result2) # [ , , , , !, !, , #, #] # 找出全部英文字母 result3 re.findall(r[a-zA-Z], s) print(result3) # [l, e, a, r, n, p, y, t, h, o, n, E, E, A, A, s, t, u, d, y] 2数量匹配 3边界匹配 4分组匹配 实例 # 匹配账号只能由字母和数字组成长度限制6到10位 r1 ^[0-9A-Za-z]{6,10}$ s1 12a3C6 print(re.findall(r1, s1)) # 输出[12a3C6]证明匹配成功 # 匹配QQ号,要求纯数字长度5-11,第一位不为0 r2 ^[1-9][0-9]{4,10}$ s2 123456987 print(re.findall(r2, s2)) # 输出[123456987]证明匹配成功 # 匹配邮箱地址只允许qq、163、gmail这三种邮箱地址 r3 r(^[\w-](.[\w-])*(qq|163|gmail)(.[\w-])$) s3 907218846qq.com print(re.match(r3, s3)) 递归 概念方法函数自己调用自己的一种特殊编程写法 案例找出一个文件夹中全部的文件 import os def test_os(): # OS模块中的基础方法 # 将文件夹里面的内容显示出来 print(os.listdir(E:/python)) # 判断给的路径是不是个文件夹 print(os.path.isdir(E:/python/libs)) # 判断指定路径是否存在 print(os.path.exists(E:/python)) def get_file(path): file_list [] if os.path.exists(path): for f in os.listdir(path): new_path path / f if os.path.isdir(new_path): # 表明目录是文件夹不是文件使用递归了 get_file(new_path) else: file_list.append(new_path) else: print(f指定的目录{path}不存在) return [] return file_list if __name__ __main__: print(get_file(E:/python)) 感谢每一个认真阅读我文章的人 作为一位过来人也是希望大家少走一些弯路如果你不想再体验一次学习时找不到资料没人解答问题坚持几天便放弃的感受的话在这里我给大家分享一些自动化测试的学习资源希望能给你前进的路上带来帮助。 软件测试面试文档 我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。
http://www.hkea.cn/news/14312586/

相关文章:

  • wordpress网站被自动跳转wordpress备份博客图片
  • 网站建设排名公司哪家好wordpress是免费吗
  • 深圳做网站最电商联盟推广
  • 网站建设的客户都在哪里移动网站建站
  • 做网站组服务器鹤岗网站seo
  • 织梦后台做的网站怎么绑定域名服务好的企业网站怎么建设
  • 商务网站构建与维护wordpress 主题依赖插件
  • 洮南网站正规的扬中网站建设
  • 徐州网站建设找哪家上海企业信息查询系统
  • 江苏网站建设基本流程wordpress流水布局主题
  • 四川省微信网站建设推广dw个人网页制作素材
  • 主题资源网站建设模块五作业企业网站能提供哪些服务
  • 廊坊网站群建设那个网站可以免费做风面
  • 利用云服务器做网站wordpress使用html5
  • 高端大气网站设计欣赏互联网营销师报名官网
  • 漯河公司做网站wordpress 变装小说
  • 网站推广外包北京西站在几环
  • 苏州手机网站建设报价网站建设哪里公司好
  • 乌尔禾区做网站哪里好校园网站建设案例
  • 平面设计师必看的网站建设部网站资质核查
  • 北京网站建设排行廊坊做网站找谁
  • 生鲜网站建设的总体目标有哪个网站可以做链接
  • 答辩的时间_老师问了我做的网站可以同时支持的并发用户是多少用了wordpress的电商网站
  • 企业门户网站建设情况wordpress免签约
  • asp网站首页模板ps详情页模板
  • 如何做能上传视频网站城乡建设部网站首页
  • 公司网站设计素材网页设计咨询
  • 60天做网站wordpress 域名更换
  • C语言网站开发pdfphp做网站图集
  • 在厦门做网站找谁wordpress旅游模板下载