- 博客(67)
- 资源 (1)
- 收藏
- 关注
原创 C++11 constexpr 关键字用法
constexpr 是 C++11 中增加的关键字,我们可以使用该关键字定义以下对象:编译期常量; 常量表达式函数; 编译期常量对象。以下代码运行环境为:win10 专业版 + vs2019 社区版。1. 编译期常量常量分为编译期常量、运行期常量。编译期常量指的是在编译阶段就可以确定其值,并将其结果展开到使用的地方,不占用内存空间。运行期常量本质上是只读的变量,需要占用内存空间,编译时无法确定其值,运行时,无法修改其值。constexpr 关键字就是用来定义编译期的..
2020-12-24 01:27:50
1547
1
原创 VS2015配置动态库
有时在VS2015中需要一次性配置库的目录,创建新的项目时能够无须再次配置库相关目录. 可进行如下配置:1. 打开 VS 属性管理器2. 配置库头文件所在目录3. 配置附加库目录也就是配置库 lib 文件所在目录.3. 配置DLL 所在目录将 DLL 所在目录配置到 PATH 环境变量中.4. 配置 lib 库名称在我们制作动态库的头文件中,添加如下代码, 相当于每次导入头...
2020-01-29 20:31:57
1925
转载 Django Middleware的几个关键方法
Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的。我们可以在 Middleware 这个地方把所有Request 拦截住,用我们自己的方式完成处理以后直接返回 Response。因此了解中间件的构成是非常必要的。Initializer: __init__(self)出于性能的考虑,每个已启用的中间件在每个服务器进程中只初始化一
2017-10-12 22:20:08
1736
原创 django开启gzip压缩
开启站点内容压缩gzip:MIDDLEWARE_CLASSES = ( 'django.middleware.gzip.GZipMiddleware', ) 使用django的gzip_page装饰器来指定对那些请求压缩:from django.views.decorators.gzip import gzip_page @gz
2017-10-12 22:16:18
2071
转载 Django中利用filter与simple_tag为前端自定义函数的实现方法
前言Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些的函数功能并不支持,例如通过模板来判断一个返回值是否是合法的数字类型,此时如果又不希望通过后台视图代码来实现的话,我们就可以自定义一些前端函数功能。Django为我们提供了两种方式
2017-10-02 18:37:20
628
转载 Python原生服务端签名生成请求订单信息「orderString」
接口文档:https://docs.open.alipay.com/204/105465/ 一、签名方法示例:「代码中的私钥是随机生成无法使用,做示例用」def sign(params): sort_param = sorted([(key, unicode(value, 'UTF-8').encode('UTF-8')) for key, value in params.it
2017-10-01 19:45:59
1457
转载 django static Cannot mix str and non-str arguments
I don't know what the difference is supposed to be, but I found a use case difference (using django 1.9.1 running via apache, wsgi on Python 3.4). In my app, I have some images in ImageFields in the
2017-09-29 16:16:25
2734
原创 django模板中使用include
假如我们有以下模板index.html,代码为: Title网页公共头部部分 网页body部分 网页公共底部部分做过web开发的童鞋知道大部分网页的公共头部,公共底部部分代码每个页面都一样,那么就应该将其单独拿出做为一个html, 这样修改这部分代码时候,不需要每个页面都修改, 所以在django中我们可以这么做:top.html网页公共头部
2017-09-26 22:07:58
12419
1
原创 c语言文件操作函数
1. 按照字符读写文件:fgetc(),fputc()2. 按照行读写文件:fputs(), fgets()3. 按照块读写文件:fread(), fwirte()4. 按照格式化读写文件:fprintf(),fscanf()5. 按照随机位置读写文件:fseek(), ftell(), rewind() 1. 字符读写函数int fputc(int ch, FILE
2017-09-25 23:49:17
402
原创 python中的匿名函数
在Python中函数分为两种,一种是通过def定义的函数,一种是lambda定义的匿名函数。lambda匿名函数适合定义一些单行语句的函数,可使代码更加简洁优美。但lambda函数局限性很大,通常我们只能定义一条单独的表达式,这个表达式的结果就是返回值。我们在匿名函数中无法使用多行语句、条件分支、异常处理。我们不适用lambda函数也可以编写python函数完成我们的功能。但lambda有
2017-09-25 23:45:47
844
原创 python中的self参数
当程序加载到内存开始运行时,那么函数代码会加载多份到内存吗?# 飞机1plane1 = HeroPlane(10, 100)plane1.fly()# 飞机2plane2 = HeroPlane(15, 100)plane2.fly()我们可以看出无论是plane1的fly()函数还是plane2()的fly()函数,是完全一样的实现,同时我们也知道计算机的内存是非常宝贵的资源
2017-09-25 23:41:46
2127
原创 django中HttpRequest对象
Django使用Request 对象和Response对象在系统间传递状态。当请求一个页面时, Django会建立一个包含请求元数据的 HttpRequest 对象. 当Django 加载对应的视图时, HttpRequest对象将作为视图函数的第一个参数. 每个视图会返回一个HttpResponse对象.注意:视图的第一个参数必须是HttpRequest对象.HttpRequest属
2017-09-25 23:33:02
1103
原创 django基础入门(6)-模板
如果我们的视图想给用户返回漂亮的页面,就需要在python代码中编写很多html css的代码。这会导致一些问题的出现, 例如:1. 任何页面的改动会牵扯到Python代码的改动, 网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便;2. 后台Python代码与设计HTML是不同的工作,页面设计人员应该编辑Python代码,他们应该与HTML打交道;3.
2017-09-25 23:17:52
273
原创 django基础入门(5)-视图
后台管理页面完成,接下来就要做公共访问的页面,对于django的设计框架MVT,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者使用视图时需要进行两步操作:1. 定义视图2. 配置URLconf1. 定义视图在Django中,视图可以是一个Python函数或者类, 被定义在views.py中.视图的参数是一个HttpRequest类型的对象
2017-09-25 23:09:46
325
原创 django基础入门(4)-后台管理
站点分为后台(网站内容管理)和前台(公共访问两部分),后台部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块.使用Django的管理模块,需要按照如下步骤操作:1. 管理界面本地化;2. 创建管理员;3. 注册模型类;4. 自定义管理页面.1. 管理界面本地化
2017-09-25 22:59:13
370
原创 django基础入门(3)-设计模型
1. 模型类当前项目的开发,都是数据驱动的,即分析出项目中所需要存储的数据,然后设计数据表及表结构,接下来再使用设计好的页面对表完成数据的crud.django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的crud.使用django进行数据库开发的步骤如下:1.在models.py中定义模型类2.迁移3.通过类和对象完成数据crud
2017-09-25 22:17:57
408
原创 django基础入门(2)-创建项目和应用
1. 创建django项目在当前用户的某个目录下创建项目,这样不会发生权限问题.我们在/home/Desktop/my_django/目录下创建项目.cd /home/Desktop/mkdir my_djangocd my_django在my_django目录中执行创建项目命令如下:django-admin startproject 项目名称接下来可以使用IDE打开此目录
2017-09-25 22:03:03
319
原创 virtualenvwrapper配置报错
1. 安装virtualenvsudo pip install virtualenv2. 安装virtualenvwrappersudo pip install virtualenvwrapper默认会将virtualenvwrapper安装到/usr/local/bin目录下,需要在用户的.bsharc文件中增加如下配置:# 1. Create a directory
2017-09-25 21:34:56
15511
7
原创 django基础入门(1)-搭建环境
通过新闻信息管理为例,使用django框架完成开发。通过案例对使用django框架有个全面的认识,包括开发流程、基本概念,本节并不指针概念细节展开讨论,细节在今后的课程中再进行讨论。在开发过程中,当需要使用python的包时可以联网安装:sudo pip install 包名称使用如上命令,会将包安装到/usr/local/lib/python3.4/site-packages下.
2017-09-25 21:19:47
300
原创 pygame编写飞机大战(9)-播放爆炸动画
当子弹和敌机碰撞,我们并不像单单将飞机和子弹消失,应该在其发生碰撞的位置播放一组爆炸动画,游戏效果更为逼真一些。那如何实现动画呢?动画实现思路很简单,我们将一组图片按照一定的时间间隔,将其按顺序绘制到屏幕上,即可显示为动画效果。这几张图片,我们首先将其load到游戏中,存放到一个列表中。当发生爆炸的时候,我们就将列表中的图片按照预先定义好的顺序,绘制到屏幕上。那么爆炸类如何写呢?
2017-09-24 11:43:32
8796
14
原创 pygame编写飞机大战(8)-碰撞检测
当英雄飞机发射的子弹击中敌人的飞机,那么敌人飞机和子弹都应该马上消失。根据我们的设计,子弹只需要设置visible属性为False即可,而敌人飞机只需要重新设置下初始位置,飞行速度即可。我们子弹和飞机都维护了一个矩形,rect(x, y, width, height), 其中x和y是矩形在窗口上的坐标,碰撞检测我们只需要循环遍历每一颗已经发射的子弹,也就是visible为True的子弹和每一个
2017-09-24 11:27:11
8147
1
原创 pygame编写飞机大战(7)-敌人飞机类
敌人飞机类的设计和英雄非常类似,区别在于英雄的坐标计算在每一帧的时候计算,每一帧绘制。当敌人飞出屏幕之后,自动再随机设置飞机的初始坐标,实现飞机无穷无尽从地图上面往下飞。# 敌人飞机class EnemyPlane(object): # 初始化敌人飞机 def __init__(self, scene): # 加载飞机资源 self.image
2017-09-24 10:32:34
3585
1
原创 pygame编写飞机大战(6)-英雄飞机类
英雄飞机在创建之初,在子弹列表中我们预先创建好30个子弹,这个创建多少个由自己定义。发射子弹的思路是,每次发射三个子弹,从子弹列表中首先选出3颗未发射的子弹,也就是visible=False的子弹,如果子弹列表中都已经发射出去,则本次不发射任何子弹。子弹在移动出屏幕之后,会自动将自己的状态设置为False状态。英雄飞机仍然有两个最为重要的action函数和draw函数, draw每一帧循环
2017-09-24 10:17:56
1465
1
原创 pygame编写飞机大战(5)-子弹类
我们现在编写子弹类,我们设计子弹为了通用一点,敌人飞机向下发射子弹,英雄飞机向屏幕上方发射子弹,那我们就在创建子弹的时候,设置传递一个参数,根据参数来选择子的子弹的图片和子弹移动的方向。这里注意一点,pygame.image.load()图片之后,我们可以通过图片对象的get_rect()方法来获得图片的矩形(矩形应该包括该图片在窗口里的x和y坐标,以及其宽和高),但是矩形的x和y坐标始终是(
2017-09-24 09:39:17
6970
1
原创 pygame编写飞机大战(4)-滚动地图
我们要实现飞机在场景中飞行的效果,我们可以选择背景地图滚动,相对来衬托飞机在移动。如何实现背景的滚动效果,我们可选取两张图片,两张图片交替向下移动,当某张图片完全移动到屏幕外侧,那么马上再次设置为开始位置,重新开始移动。图示入下:这里有两张一模一样的图片,这两张图片比较特殊,也就是图片的下边界和图片的上边界可以完美的无缝的对接在一起,好似一张图片一样。我们将这两张图片一张放在场景上外侧
2017-09-24 02:44:24
5285
4
原创 pygame编写飞机大战(3)-搭建游戏流程
简单的游戏实现流程应该是:1. 计算游戏中元素的坐标。也就是游戏每刷新一次,游戏中的元素,例如子弹坐标就会+1, 比如飞机的坐标计算等等;2. 计算出了游戏中的元素,飞机或者子弹的坐标,那么就需要将飞机和子弹的图片绘制到这个坐标的位置;3. 处理事件,游戏进行过程中,玩家会通过键盘或者鼠标点击、拖动、甚至关闭窗口等都属于事件,当玩家有这些操作的时候,我们要对玩家的操作做出响应。比如,如
2017-09-24 02:14:27
2593
1
原创 pygame编写飞机大战(2)-pygame快速入门
# ----------窗口相关操作-----------# 创建窗口scene = pygame.display.set_mode([屏幕宽,屏幕高])# 设置窗口标题pygame.display.set_caption("标题")# 设置窗口图标pygame.display.set_icon(image)# 将图片绘制到窗口scene.blit(image, (0, 0))
2017-09-24 01:41:36
1971
1
原创 pygame编写飞机大战(1)-准备
我们要做飞机大战效果如下:我们的开发环境:pycharm + python3.4.4 + pygame1.9.3pygame是可用来编写游戏的免费的Python模块。它是基于SDL(C语言游戏库)库的,使用pygame我们可以使用python创建完全基于界面的游戏。pygame几乎所有的平台和操作系统上运行。pygame官网: http://www.pygame.org...
2017-09-24 01:13:47
3130
9
原创 STL-adjacent_find算法
adjacent_find算法用于在容器中查找相邻重复元素。adjacent_find算法实现源码如下:template inline _FwdIt adjacent_find(_FwdIt _First, _FwdIt _Last){ return (_STD adjacent_find(_First, _Last, equal_to<>()));}templa
2017-09-23 14:31:46
447
原创 STL-find算法
find算法用于在容器中查找某个指定的值。find算法实现如下:template inline_InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val){ // find first matching _Val for (; _First != _Last; ++_First) if (*_First == _Val) br
2017-09-23 14:18:00
581
原创 STL-transform算法
transform算法的作用是 将一个容器中的值搬运到另一个容器中。提供了两个重载版本,我们先看下transform的源代码实现:重载版本一: template inline _OutIt_Transform(_InIt _First, _InIt _Last,_OutIt _Dest, _Fn1 _Func) { for(; _First !
2017-09-23 14:00:54
1232
原创 STL-foreach算法
for_each算法用于遍历容器中的元素,前提是容器必须要提供迭代器,例如stack容器、queue容器本身不提供迭代器,所以不能使用for_each算法。for_each的源码(P.J. Plauger版本)实现如下:templateinlinevoid for_each(_InIt _First, _InIt _Last,_Fn1 _Func){ for(; _First
2017-09-23 13:22:17
1623
原创 STL-函数对象适配器
适配器从字面上讲,是将一个事物经过适配之后变成另外一个事物,使之能够复合我们的需求。为什么要适配,显然现有的东西不满足我们的需要。比如说,我们需要调用一个有一个参数的函数,但是结果现在只有两个参数的函数,这时怎么办?我们可以通过适配器将两个参数的函数转换成一个参数的函数。stl中实现了几个不同用途的适配器,我们一一来看看如何使用,至于stl实现这些适配器的思路,我们稍后在下一篇文章再给大家分析
2017-09-23 13:06:25
514
原创 STL-map和multimap容器
1. map/multimap基本概念Map/multimap内部是以红黑树为实现机制,具有能够自动对元素进行排序和查找效率优良的特性。所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。Multimap和map的操作类似,唯一区别multimap键值可重复。请问:我们可以
2017-09-23 12:16:45
216
原创 STL-set/multiset容器
1. set/multiset容器基本概念set和multiset容器实现是基于红黑树,红黑树是平衡二叉树的一种,所以Set的特性是,所有元素都会根据元素的键值自动被排序。Set的元素即是键值又是实值。Set不允许两个元素有相同的键值。请问,我们可以通过set的迭代器改变set元素的值吗?不行,因为set元素值就是其键值,关系到set元素的排序规则。如果任意改变set元素值,会严重破坏se
2017-09-23 11:56:02
265
原创 STL-list容器
1. list容器基本概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置
2017-09-23 00:22:53
566
原创 STL-stack容器
1. stack容器基本概念stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,形式如图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。有元素推入栈的操作称为:push,将元素推出stack的操作称为pop.1.2 stack没有
2017-09-23 00:16:43
291
原创 STL-deque容器
1. deque容器基本概念Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。Deque容器和vector容器最大的差异,一在于deque允许使用常数项时间对头端进行元素的插入和删除操作。二在于deque没有
2017-09-22 02:02:58
364
原创 STL-vector容器
1. vector容器基本概念vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。Array是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。Vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。因此vector的运用
2017-09-22 01:52:03
300
原创 STL-string容器
1. string容器基本概念C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件。String和c风格字符串对比:1. Char*是一个指针,String是一个类, string封装了char*,管理这个字符串,是一个char*型的容器。2. String封装了很多实用的成员方法, 例如查找find,拷
2017-09-22 01:42:19
233
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人