一文搞定python语法进阶
前言
前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下面我就将介绍一下Python的一些进阶语法规则,为后面更复杂的编程打下基础。
闭包与装饰器
什么是闭包、装饰器函数、yield关键字
python高阶函数
lambda匿名函数、reduce函数、map函数、filter过滤器函数
面向对象编程
什么是面向对象、对象的封装、类的继承、类的多态
进程与线程编程
python中的进程与线程、多线程编程
第一章. 闭包与装饰器
1. 什么是闭包
# coding=utf-8# 闭包# def func1():# print ("函数1运行")# return func2()# #函数1的返回值是函数2的引用# def func2():# print ("函数2运行")# return 2# r =func1()# print (r)# r2= r() # r = func2# print (r2)deffunc1():print ("函数1运行")deffunc2():print ("函数2运行")func2()return func2()
f2 = func1()
print(f2)
f2()"""
在一个函数,比如func1中的内部定义了另外一个函数function2
并且函数1(func1)的返回值是函数2(func2)的引用
这种情况,我们称之为闭包简单来说就是外部函数返回内部函数的引用就叫做闭包
"""
print打印结果:
函数1运行
函数2运行
函数2运行
None
案例:龟兔赛跑
# coding=utf-8import time
import random# 定义跑道长度
track_length = 10defruntime(func):defwrapper():start_time = time.time()func()end_time = time.time()print (func.__name__,"运行时间是",end_time-start_time,"秒")return wrapper@runtimedeftortoise():# for i in [1,2,3,4,5,6,7,8,9,10]:for i inrange(1,track_length+1):print ("乌龟跑的{}米".format(i))time.sleep(1)
@runtimedefrabbit():for i inrange(1,track_length + 1):if i % 5 == 0:time.sleep(random.randint(1,10))print ("兔子跑了{}米".format(i))
tortoise()
rabbit()
print打印结果:
乌龟跑的1米
乌龟跑的2米
乌龟跑的3米
乌龟跑的4米
乌龟跑的5米
乌龟跑的6米
乌龟跑的7米
乌龟跑的8米
乌龟跑的9米
乌龟跑的10米
tortoise 运动时间是 10.04876708984375 秒
兔子跑了1米
兔子跑了2米
兔子跑了3米
兔子跑了4米
兔子跑了5米
兔子跑了6米
兔子跑了7米
兔子跑了8米
兔子跑了9米
兔子跑了10米
rabbit 运动时间是 9.022485494613647 秒
2. 什么是装饰器呢?
就是在特定条件下为某些函数再不改动函数体的时候为函数新添加一些功能,这就是装饰器
实现原理:
基于@语法和函数闭包,将原函数封装在闭包中,然后将函数赋值为一个新的函数(内置函数),执行函数时再在内层函数中执行闭包中的原函数
实现效果:
可以在你改变函数内部代码和调用的前提下,实现在函数执行和执行拓展功能
适用场景:
多个函数系统统一在执行前后定义一些功能
关于前言我们了解这么多就够了,然后小编带着大家推导出装饰器
装饰器:
装饰器的写法:
这里我们有一个需求,我们定义了5个函数,想在5个函数执行前和执行后都打印一句话:装饰器的学习。首先我们来写于一下没有装饰器的写法,话不多说直接上代码:
defa():passdefb():passdefc():passdefd():passdefe():pass
先定义5个函数,再加上我们要打印的话:
def a():print("装饰器的学习")print("装饰器的学习")def b():print("装饰器的学习")print("装饰器的学习")def c():print("装饰器的学习")print("装饰器的学习")def d():print("装饰器的学习")print("装饰器的学习")def e():print("装饰器的学习")passprint("装饰器的学习")a()
b()
c()
d()
e()
运行一下:
发现运行成功,但我们想如果我要修改打印的话就要都修改一次,特别麻烦,而且,这是5个函数如果是500个,我们还要一个一个的去加吗?这就有我们的装饰器了,首先我用装饰器修改下,再给大家解释。
defouter(origin):definner():print("装饰器的学习")res = origin()print("装饰器的学习")return resreturn inner@outerdefa():pass@outerdefb():pass@outerdefc():pass@outerdefd():pass@outerdefe():passa()
b()
c()
d()
e()
运行一下:
发现这样我们也成功了,接下来小编来个大家解释
首先:
我们要明白@的作用,那我们的函数a来举例子@的作用就是帮我们执行一次a=outer(a),首先python将把我们的a变成参数传给outer函数,运行后再赋值给a,这就是@的作用。
其次给大家解释一下自定的outer函数
我自己称这个函数为@下函数的补丁函数,也就是装饰器函数还是拿a函数举例子,首先a函数变成参数传给了我们的outer函数,outer里又嵌套了一个inner函数 ,然后将函数a赋值给res,然后用return语句返回出结果,外层函数返回inner函数,也就是将inner函数运行一次,这就是工作流程。
最后分别在各函数前加上装饰,最后运行出结果
这就是装饰器的写法。
装饰器的参数
这时我遇到一个问题如果函数内有参数而且每个函数的参数数量不同,我们应该怎末办,先看下面代码
defouter(origin):definner():print("装饰器的学习")res = origin()print("装饰器的学习")return resreturn inner@outerdefa(g, e):pass@outerdefb(w):pass@outerdefc(u, y, t):pass@outerdefd(c):pass@outerdefe():passa()
b()
c()
d()
e()
这时我们运行一下
发现报错,是因为我们的装饰器内没有这两个参数,那可以在装饰器内设置两个参数,但问题是,有的函数内有3个参数,而有的函数内没有参数,那我们应该怎么办?
针对这个问题我们可以给装饰器设置动态参数,先看代码:
defouter(origin):definner(*args, **kwargs):print("装饰器的学习")res = origin(*args, **kwargs)print("装饰器的学习")return resreturn inner@outerdefa(a1):print("我是一函数")@outerdefb(a1, a2):print("我是二函数")@outerdefc(a5, a6, a7):print("我是三函数")a(1)
b(2, 3)
c(4, 5, 6)
因为函数太多了,小编有点麻烦就剪了几个函数,但道理是相同的,这时我们再运行一下
这样我们就成功了,以上就是装饰器的写法,接下来给大家拓展一下
装饰器的拓展:(functools模块)
首先给大家引入一下这时教给大家几个魔法方法
接下来我们实战一下
defouter(origin):definner(*args, **kwargs):# 我是一个装饰器函数print("装饰器的学习")res = origin(*args, **kwargs)print("装饰器的学习")return resreturn inner@outerdefc(a5, a6, a7):# 我是个函数print("我是三函数")c(4, 5, 6)
print(c.__name__)
print(c.__doc__)
运行一下:
这时我们发现我要的是c函数,但给我反馈的是inner函数,这是为什么呢?
这就是工作原理,直接就把c函数装饰成了inner函数,那以后再工作中一定会要自己函数的名字,而不要我装饰后的函数,这样就可以让我们的函数装饰的更像,其实在以后中,都想装饰的更像,那我们应该怎末办?
这时就需要我们的第三方模块functools,直接上代码
import functoolsdefouter(origin):@functools.wraps(origin)definner(*args, **kwargs):# 我是一个装饰器函数print("装饰器的学习")res = origin(*args, **kwargs)print("装饰器的学习")return resreturn inner@outerdefc(a5, a6, a7):# 我是个函数print("我是三函数")c(4, 5, 6)
print(c.__name__)
print(c.__doc__)
这时再运行一下
这时我们发现,我们伪装成功了,这样就会让我们的装饰更像。
装饰器模板:
接下来送给大家装饰器的模板,以后需要随时ctrl+c和ctrl+v
import functoolsdefouter(origin):@functools.wraps(origin)definner(*args, **kwargs):# 这里书写需要装饰的功能res = origin(*args, **kwargs)return resreturn inner
第二章. Python高阶函数
1. lambda表达式(匿名函数)
# coding=utf-8# lambda表达式(匿名函数)# 计算圆形的面积# pi * r * r# 导入数学模块import math
defcircle_area(r):result = math.pi * r * rreturn result
r = circle_area(3)
print (r)
"""
lambda是一个关键字
冒号前边的r是这个函数的参数
冒号后边的是这个函数的运算逻辑
"""
result = lambda r:math.pi * r * r
r = result(3)
print (r)defcalc_function(o):if o == "+":returnlambda a,b : a + belif o == "-":returnlambda a,b : a - belif o == "*":returnlambda a,b : a * belif o == "/":returnlambda a,b : a / b
f = calc_function("*")
print (f)
r = f(3,4)
print (r)
print打印结果:
28.274333882328.2743338823
<function <lambda> at0x03159B70>
12
2. map自动拆分的计算函数
# coding=utf-8# map函数
my_list = [1,2,3,4,5]
# 1
result = []
for i in my_list:result.append(i + 1)
print (result)# 2defadd_one(e):return e + 1
r = map(add_one,my_list)
print (list(r))
defadd_two(e):if e == 1:return e + 3elif e == 2:return2 - 1else:return e
r =map(add_two,my_list)
print (list(r))
# 3print (list(map(lambda e:e+1,my_list)))
print打印结果:
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[4, 1, 3, 4, 5]
[2, 3, 4, 5, 6]
3. reduce自动堆叠计算函数
# coding=utf-8# reduce# 导入reducefrom functools import reduce
a =[2,4,6,8,10]
defadd(x,y):return x + y
result = reduce(add,a)
print (result)print (reduce(lambda x,y : x+y,a))
print打印结果:
30
30
4. filter过滤器函数
# coding=utf-8# filter函数
letter=['a',"B",'c',"D",'e',"F"]
upper_letter = filter(lambda x: x == x.upper(),letter)
print (upper_letter)
print (list(upper_letter))student_name = ['李元芳','李建国','莫怀羽']
print (list(filter(lambda x:x.startwith("李"),student_name)))
print打印结果:
['B', 'D', 'F']['B', 'D', 'F']['李元芳','李建国']
第三章. 面向对象编程
1. 对象的封装
# coding=utf-8# 对象的封装# 类的概念"""
类的名字:当名字由多个单词构成时,我们采用驼峰命名法
就是说多个单词,每个单词的首字母需要大写
这也是python的命名规则
"""classBeautifulGirl():# 类的属性eye = ""nose = ""mouth = ""hair = ""face = ""# 构造函数def__init__(self,eye,nose,mouth,hair,face):self.eye = eyeself.nose = noseself.mouth = mouthself.hair = hairself.face = faceprint ("构造函数运行了")# 在这就叫做类的方法defdance(self):print ("美女在跳舞")defget_beautiful_girl(self):print ("这个美女的样貌是:")print (self.nose)print (self.mouth)print (self.hair)print (self.face)print (self.eye)# 实例化就是获取具体对象的一个过程 new新的一个。
girl = BeautifulGirl("大大的眼睛","小巧的嘴唇","乌黑亮丽的头发","清秀的脸庞")
girl.dance()
girl.get_beautiful_girl()girl2 = BeautifulGirl("小小的眼睛",'鼻子','嘴','头发','脸庞')
girl2.get_beautiful_girl()
print打印结果:
大大的眼睛
小巧的嘴唇
乌黑亮丽的头发
清秀的脸庞
小小的眼睛
这个美女的样貌是:
鼻子
嘴
头发
脸庞
2. 类的私有属性
# coding=utf-8# 类的私有属性classBeautifulGirl():# 类的属性eye = ""nose = ""mouth = ""hair = ""face = ""# 这就是私有属性,私有属性在类的外部是不可以访问的__name ="高圆圆"address = "河北省唐山市"# 构造函数def__init__(self,eye,nose,mouth,hair,face):self.eye = eyeself.nose = noseself.mouth = mouthself.hair = hairself.face = faceprint ("构造函数运行了")# 在这就叫做类的方法defdance(self):print ("美女在跳舞")def__dd(self):print ("美女在跳舞")defget_beautiful_girl(self):print ("这个美女的样貌是:")print (self.__name)print (self.nose)print (self.mouth)print (self.hair)print (self.face)print (self.eye)
girl = BeautifulGirl("大大的眼睛","小巧的嘴唇","乌黑亮丽的头发","清秀的脸庞")
print (girl.mouth)
print (girl.address)
# print (girl.__name)# # 类的私有属性可以访问吗?# print (BeautifulGirl.__dict__)# print (girl._beautiful__name)
girl.get_beautiful_girl()
print打印结果:
构造函数运行了
这个美女的样貌是:
高圆圆
大大的眼睛
小巧的鼻子
薄薄的嘴唇
乌黑亮丽的头发
清秀的脸庞
3. 类中的方法
# coding=utf-8# 类的私有属性classBeautifulGirl():# 类的属性eye = ""nose = ""mouth = ""hair = ""face = ""# 这就是私有属性,私有属性在类的外部是不可以访问的__name ="高圆圆"address = "河北省唐山市"# 构造函数,也叫构造方法def__init__(self,eye,nose,mouth,hair,face):self.eye = eyeself.nose = noseself.mouth = mouthself.hair = hairself.face = faceprint ("构造函数运行了")# 在这就叫做类的方法defdance(self):print ("美女在跳舞")# 这个叫做私有方法def__dd(self):print ("美女在跳舞")# 这个叫做一般方法defget_beautiful_girl(self):print ("这个美女的样貌是:")print (self.__name)print (self.nose)print (self.mouth)print (self.hair)print (self.face)print (self.eye)# 静态方法# 静态方法不能够访问类中的属性 @staticmethoddefstudy():print ("美女在实习")# 类方法# 类方法是不可以访问实例变量的,它可以访问类变量(类的属性 @classmethoddefgirl_friend(cls):print (cls.__name)print (cls.address)print (cls.face)
girl = BeautifulGirl("大大的眼睛","小巧的嘴唇","乌黑亮丽的头发","清秀的脸庞")# print (BeautifulGirl.__dict__)# 这就访问了类中的私有方法# girl.beautifulGirl__dd()girl.study()
BeautifulGirl.study()# 类名,一般方法的名称调用是会报错的# BeautifulGirl.dance(girl)girl.girl_friend()
BeautifulGirl.girl_friend()
girl.get_beautiful_girl()
print打印结果:
构造函数运行了
这个美女的样貌是:
高圆圆
河北省唐山市
高圆圆
河北省唐山市
大大的眼睛
小巧的鼻子
薄薄的嘴唇
乌黑亮丽的头发
清秀的脸庞
4. 类的继承
# coding=utf-8# 类的继承# 父类和子类classFather(object):age = 38def__init__(self,name):self.name = nameprint ("父类的构造函数运行了")deffather_money(self):print ("父亲有很多钱")def__father_knowleger(self):print ("父亲的知识体系")@staticmethoddefstudy():print ("父亲在学习")@classmethoddeffather_friend(cls):print ("父亲有很多朋友")defface(self):print ("父亲非常帅")
# 意味着son这个类继承了father这个类classSon(Father):def__init__(self):print ("子类的构造函数运行了")
# son = Son("小王")
son = Son()
# 在继承中,子类如果有构造函数,name就不会调用弗雷德构造函数# 在继承中,一般的方法是可以被继承的
son.father_money()# 私有方法可以被继承# son.__father_knowleger()
son.study()
son.father_friend()classMother():defface(self):print ("妈妈长的很漂亮")# 这就叫做多继承classSon2(Mother,Father):def__init__(self):print("2儿子的构造函数运行了")son2 = Son2()
son2.father_money()
son2.face()
# 当多继承的时候,多个父类拥有一个名称的变量或方法时# 哪个父类写在继承列表的前边,子类就继承谁的
print打印结果:
子类的构造函数运行了
父亲有很多钱
父亲在学习
父亲有很多朋友
2儿子的构造函数运行了
父亲有很多钱
妈妈长的很漂亮
5. 类的多态
# coding=utf-8# 类的多态# 指的是多种形态classAnimal():defrun(self):print ("动物开始跑")
# 子类在继承父类的过程中,重写了父类中的方法classDog(Animal):defrun(self):print ("狗狗跑")classCat(Animal):defrun(self):print ("猫跑")classPerson(Animal):defrun(self):print ("人类跑")dog = Dog()
dog.run()cat = Cat()
cat.run()person = Person()
person.run()# 多个类继承同一个类,都重写了父类的方法,呈现出了不同的形态# 多态性classA(Animal):pass
a = A()defrun(obj):obj.run()run(dog)
run(cat)
run(person)
run(a)
print打印结果:
狗狗跑
猫跑
人类跑
狗狗跑
猫跑
人类跑
动物开始跑
6. 多进程编程
# coding=utf-8# 多进程编程代码演示import time
from multiprocessing import Process
import osdeftarget_function():print ("子进程的ID:{}".format(os.getpid()))time.sleep(2)
if __name__== "__main__":print (__name__)print ("主进程ID:{}".format(os.getpid()))ps = []for i inrange(10):p = Process(target_function())p.start()ps.append(p)# 让主进程等待子进程进行运行完成后在停止for p in ps:p.join()
print打印结果:
__main__
主进程ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692
相关文章:
一文搞定python语法进阶
前言前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下…...
2019蓝桥杯真题数列求值(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 给定数列 1,1,1,3,5,9,17,⋯,从第 4 项开始,每项都是前 3 项的和。 求第 20190324 项的最后 4 位数字。 运行限制 最大运行时间:…...
spring中@Autowire和@Resource的区别在哪里?
介绍今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?Autowire private JdbcTemplate jdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: &quo…...
算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离
583. 两个字符串的删除操作 - 力扣(LeetCode)https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目,是可以操作两个字符串的删除,使得两个字符串的字符完全相同,这道题可…...
【Ctfshow_Web】信息收集和爆破
0x00 信息收集 web1 直接查看源码 web2 查看不了源码,抓包即可看到(JS拦截了F12) web3 抓包,发送repeater,在响应包中有Flag字段 web4 题目提示后台地址在robots,访问/robots.txt看到Disallow: /fl…...
基于机器学习的推荐算法研究与实现
摘要随着互联网的普及,人们可以通过搜索引擎、社交网络等方式获取大量的信息资源。但是,面对如此之多的信息,人们往往会感到迷失和困惑,无法快速准确地找到自己需要的信息。在这种情况下,推荐算法的出现为我们提供了一…...
(二十四)ATP应用测试平台——springboot集成fastdfs上传与下载功能
前言 本节内容我们主要介绍一下如何在springboot项目中集成fastdfs组件,实现文件的上传与下载。关于fastdfs服务中间键的安装过程,本节内容不做介绍。fastdfs是一个轻量级的分布式文件系统,也是我们文件存储中常常使用的组件之一,…...
linux好用命令+vs快捷键
linux好用命令 功能指令跳转到vim界面的最后一行shift键g复制当前路径下所有文件和目录(加-r才行)到target目录cp -r * /home/target删除指定文件rm -rf test.txt文件重命名(-i交互式提示)mv -i file1 file2移动某个内容…...
Git 构建分布式版本控制系统
版本控制概念Gitlab部署1.版本控制概念 1.1分类 (一)1 本地版本控制系统(传统模式) (二)2 集中化的版本控制系统 CVS、Subversion(SVN) (三)3 分布式…...
Day891.一主多从的切换正确性 -MySQL实战
一主多从的切换正确性 Hi,我是阿昌,今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候,要先主动跳过这些错误,通过主动跳过一个事务或者直接设置跳过指定的错误,用GTID解决找同步位点的问题 大多…...
【论文笔记】图像修复Learning Joint Spatial-Temporal Transformations for Video Inpainting
论文地址:https://arxiv.org/abs/2007.10247 源码地址:GitHub - researchmm/STTN: [ECCV2020] STTN: Learning Joint Spatial-Temporal Transformations for Video Inpainting 一、项目介绍 当下SITA的方法大多采用注意模型,通过搜索参考帧…...
代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II、总结
打卡第二天,认真做了两道题目,顶不住了好困,明天早上练完车回来再重新看看。 今日任务 第一章数组 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每…...
Python pickle模块:实现Python对象的持久化存储
Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。值得一提的是,pickle 是 python 语言的一个标准模…...
【C++】C/C++内存管理
文章目录1. C/C内存分布2. C语言当中的动态内存管理3. C 内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型4. operator new 和operator delete 函数5. new和delete的实现原理5.1 内置类型5.2 自定义类型6. 定位new表达式(placement-new)7. 常见面试题7.1 …...
【测试】自动化测试02
努力经营当下,直至未来明朗! 文章目录前言 回顾 预告一、常见的元素操作1. 输入文本sendKeys()2. 点击click3. 提交submit(通过回车键提交)4. 清除clear5. 获取文本getText()6. 获取属性对应的值getAttribute()7. 查看title和ur…...
Python空间分析| 02 利用Python计算空间局部自相关(LISA)
局部空间自相关 import esda import numpy as np import pandas as pd import libpysal as lps import geopandas as gpd import contextily as ctx import matplotlib.pyplot as plt from geopandas import GeoDataFrame from shapely.geometry import Point from pylab im…...
idea快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出;自定义快捷表达式
前言 idea可根据输入的简单表达式进行识别,快速生成语句 常用的快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出 自定义快捷表达式 博客地址:芒果橙的个人博客 【http://mangocheng.com】 一、idea默认的快捷表达式查看 Editor…...
【Spring】@Value注入配置文件 application.yml 中的值失败怎么办
本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了,即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…...
CleanMyMac清理工具软件功能优势介绍
CleanMyMac更新最新版本x4.12,完美适配新版系统macOS10.14,拥有全新的界面。CleanMyMac可以让您安全、智能地扫描和清理整个系统,删除大型未使用的文件,减少iPod库的大小,最精确的应用程序卸载,卸载不必要的…...
【面试题】对JS中的事件冒泡、事件捕获、事件委托的理解
大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。Dom标准事件流的触发的先…...
SAP 理解合并会计报表
随着企业集团的发展,集团内部会出现越来越多的公司;复杂的公司结构和复杂的集团内业务,使得集团内部管理困难重重,信息渠道严重失灵。除了内部管理的需要,企业还有义务向相关方提供详细的和及时的信息。ERP中的合并会计…...
Ubuntu 命令常用命令——定时启动程序
crontab -e 语法 crontab[ -u user ] file或 crontab[ -u user ] { -l | -r | -e }说明: crontab是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。 -U Lser 是指设定指定user的时程表,这个前提是你必…...
笔试题(十三):走迷宫
# 描述 # 定义一个二维数组 N*M ,如 5 5 数组下所示: # int maze[5][5] { # 0, 1, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 1, 0,}; # 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路&#…...
Gradle相关的知识学习
这里有一套博客文章写的比较通俗易懂:https://www.jianshu.com/p/8e1ddd19083a...
SpringMVC的工作原理
SpringMVC的工作原理流程图 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截…...
问卷数据分析流程
文章目录一、数据合并1. 读取数据2. 数据预览二、数据清洗1. 检验ID是否重复,剔除ID重复项2. 剔除填写时间小于xx分钟的值3.处理 量表题 一直选一个选项的问题三、数据清洗1.1 将问卷单选题的选项code解码,还原成原来的选项1.2 自动获取单选题旧的选项列…...
【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽
众所周知,目前SSD(固态硬盘)已取代HDD(机械硬盘)成为电脑中常见的存储设备,特别是在技术创新的持续推动下,如今SSD的速度和效率都在不断地提高,从SATA2 3GB发展到SATA3 6GBÿ…...
String对象的创建和比较
String类的概述 String类:代表字符串。 Java 程序中的所有字符串字面值(如 “abc” )都作 为此类的实例实现。 String是JDK中内置的一个类:java.lang.string 。 String表示字符串类型,属于引用数据类型,不…...
09 OpenCV图形检测
1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓,以及计算出这些轮廓的各种属性,例如面积、周长、质心等。 cv2.findContours() 函数的语法如下: contours, hiera…...
解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?
2月15日,西方的情人节刚刚过去一天,国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后,又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”,结束在中国的直接运营。目前,多家…...
中国建筑集团公司官网/seo关键词优化平台
一开始,没敢写,感觉会超时。。。其实就是暴力搜索。DFS 1 #include<iostream>2 #include<stdio.h>3 #include<string.h>4 #include<cmath>5 #include<algorithm>6 #include<queue>7 #define clc(a,b) memset(a,b,si…...
网站建设合同 完整版/百度seo排名培训
填写了Name 还是没有 修改步骤如下:...
长沙市做网站的/我想做个网站怎么做
1, 昨天主要进行了主界面的设计,问题是当从更深层次的界面返回上一级界面时,上一级界面不出现在屏幕中央,而是出现在了靠左上方的位置。今天进行游戏主代码的编写。 2,完善界面设置过程中遇到问题:每次启动…...
wordpress添加首页友情链接/站长统计 站长统计
2019独角兽企业重金招聘Python工程师标准>>> 一. 安装 由于scrapy进行网络抓取的便捷与强大功能,准备在win7下安装该框架,但遇到很多麻烦。 开始时安装的是Python3.5 ,利用pip工具安装,但总是遇到各种下载不下来的问题…...
谁给个国外的黄色网站/如何建立公司网站网页
作者 | CDA数据分析师来源 | CDA数据分析研究院本文涉及到的开发环境:操作系统 Windows 10数据库 MySQL 8.0Python 3.7.2 pip 19.0.3两种方法进行数据库的连接分别是PyMySQL和mysql.connector步骤:连接数据库生成游标对象执行SQL语句关闭游标关闭连接PyM…...
天天网站建设/西安网站关键词排名
本来不想谈这种招人骂的话题的,哎,不过今天在一个QQ群中遇到了类似的情况,站在现实的角度,说了几句自己学校的不好,然后遇到了一个喷子,而且还不是我们学校的。让我觉的这件事情很奇…...