![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
编程语言
编辑语言学习积累
longshengguoji
这个作者很懒,什么都没留下…
展开
-
numpy函数学习
numpy函数1.shape函数它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。它的输入参数可以使一个整数表示维度,也可以是一个矩阵2.tile函数他的功能是重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组3.数组对象数组是numpy中最重要的对象,我们通常使用array()方法来创建对象,他的参数是一个list对象4.reshape方法它就是原创 2016-12-07 19:08:14 · 1580 阅读 · 0 评论 -
django版 helloworld
1.用django 创建程序的第一步是配置开发环境,如何安装django见上一篇博客2.要创建一个django 项目非常简单,需要 startproject命令即可,输入命令:django-admin.py startproject 项目名称(此处为helloworld)3.django会在当前目录下生自动生成一个helloworld文件,其目录如下:以上是Django 1.4原创 2013-08-17 11:04:07 · 5614 阅读 · 0 评论 -
ubantu系统Django安装教程
1.首先下载django源码https://www.djangoproject.com/download/2.解压压缩包,输入命令: tar xzvf Django-1.5.2.tar.gz3.进入到解压后的文件夹,输入命令: cd Django-1.5.24.安装,输入命令: sudo python setup.py install5.测试是否成功原创 2013-08-17 09:03:12 · 2539 阅读 · 0 评论 -
python 可变数据和不可变数据解析
python 的数据类型和C不一样,有一种类型:可变类型 (mutable)和不可变类型(immutable)Python中所有变量都是值的引用,也就说变量通过绑定的方式指向其值。 而这里说的不可变指的是值的不可变。 对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。不可变的类型还有一个特性,就是可以计算其hash值,这样才原创 2013-08-14 10:00:20 · 5593 阅读 · 0 评论 -
python网络爬虫抓取图片
利用python抓取网络图片的步骤:1.根据给定的网址获取网页源代码2.利用正则表达式把源代码中的图片地址过滤出来3.根据过滤出来的图片地址下载网络图片import reimport urllibdef getHtml(url): page = urllib.urlopen(url) html = page.read() return htmlde原创 2013-08-13 13:21:13 · 33164 阅读 · 8 评论 -
python正则表达式介绍及使用方法
元字符:1.[ ] 常用来指定一个字符集:[abc]; [a-z]; [0-9] 元字符在字符集中不起作用:[akm$] 补集匹配不在区间范围内的字符:[^5] ; [^abc]2.^ 匹配行首。除非设置MULTILINE标志,它只是匹配字符串的开始。在MULTILINE模式里,它可以直接匹配字符串中的每个换行。3.$原创 2013-08-12 18:34:14 · 3842 阅读 · 0 评论 -
python中switch语句用法
python中是没用switch语句的,这应该是体现python大道至简的思想,python中一般多用字典来代替switch来实现。#coding: utf-8from __future__ import divisiondef jia(x,y): print x+ydef jian(x,y): print x-ydef cheng(x,y): print原创 2013-08-12 10:50:46 · 100771 阅读 · 0 评论 -
python文件类型及运行方式
1.一般ubantu系统中都默认集成了python的环境,所以在命令行敲入python命令,即可运行python程序,敲入exit()可退出python环境2.新建python文件>>>vim helloworld.py然后在helloworld.py中键入#!/usr/bin/pythonprint "Hello world">>>python helloworld.py原创 2013-07-21 10:47:14 · 3787 阅读 · 0 评论 -
python控制语句
1.关键知识点1.python中的相等意味着1.两个不同的名字关联的对象,具有相同的值2.两个不同的名字与同一个对象(具有相同ID的对象)关联==检查两个名称引用的对象是否具有相同的值is检查两个名字是否引用同一个对象2.比较两个浮点数是不是相等应该用(x-y)3.python的牛叉之处:比较X是不是大于等于A小于等于B的时候用 A 4.Python的赋值与其他编程语言的不同之处在于pyt原创 2013-07-11 19:27:42 · 3424 阅读 · 0 评论 -
python画五角星和六角星程序
1.五角星import turtleturtle.forward(100)turtle.right(144)turtle.forward(100)turtle.right(144)turtle.forward(100)turtle.right(144)turtle.forward(100)turtle.right(144)turtle.forward(100)turtl原创 2013-07-10 12:17:19 · 29829 阅读 · 1 评论 -
STL之七:STL各种容器的使用时机详解
C++标准程序库提供了各具特长的不同容器。现在的问题是:该如何选择最佳的容器类别?下表给出了概述。但是其中有些描述可能不一定实际。例如:如果你需呀处理的元素数量很少,可以虎落复杂度,因为线性算法通常对元素本身的处理过程比较快,这种情况下,“显性复杂度搭配快速的元素处理”要比“对数复杂度搭配慢的元素处理”来得划算。 作为对上表的补充,使用时: 1.缺省情况下应该使用v原创 2013-01-28 20:59:59 · 3890 阅读 · 1 评论 -
STL之六:map/multimap用法详解
map/multimap 使用map/multimap之前要加入头文件#include,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。map和multimap内部的数据结构也是平衡二叉树。 map和multimap根据元素的key自动对元素进行排序原创 2013-01-27 21:51:37 · 27540 阅读 · 0 评论 -
STL之五:set/multiset用法详解
集合使用set或multiset之前,必须加入头文件Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。sets和multiset内部以平衡二叉树实现1. 常用函数1) 构造函数和析构函数set c:创建空集合,不包含任何元素set c(op):以op为排序准则,产生一个空原创 2013-01-27 15:17:38 · 57517 阅读 · 1 评论 -
STL之一:字符串用法详解
字符串是程序设计中最复杂的变成内容之一。STL string类提供了强大的功能,使得许多繁琐的编程内容用简单的语句就可完成。string字符串类减少了C语言编程中三种最常见且最具破坏性的错误:超越数组边界;通过违背初始化或被赋以错误值的指针来访问数组元素;以及在释放了某一数组原先所分配的存储单元后仍保留了“悬挂”指针。 string类的函数主要有: Member funct原创 2013-01-24 21:21:44 · 8754 阅读 · 0 评论 -
STL之四:list用法详解
list容器介绍相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。常用函数(1) 构造函数list c:创建一个空的listlist c1(c2):复制另一个同类型元素的list原创 2013-01-19 22:06:36 · 27091 阅读 · 4 评论 -
STL之三:deque用法详解
deque函数:deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。(1) 构造函数deque():创建一个空dequedeque(int nSize):创建一个deque,元素个原创 2013-01-19 19:55:18 · 76079 阅读 · 1 评论 -
STL之二:vector容器用法详解
vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。 vector类常用的函数如下所示: 1.构造函数vector():创建一个空vectorvector(int nSize)原创 2013-01-15 23:16:53 · 59395 阅读 · 11 评论 -
traits技术详解
STL模版库非常强调软件的复用,traits技术是采用的重要手段。traits提取不同类的共性,以便能统一处理。traits技术依靠显示模版特殊化来把代码中因类型不同而发生变化的片段拖出来,用统一的接口来包装。这个接口可以包含一个C++类所能包含的任何东西,如内嵌类型、成员函数、成员变量。作为客户的模版代码,可以通过traits模版类所公开的接口来简洁访问。示例:一直整形数组类CI原创 2013-01-10 20:56:40 · 2493 阅读 · 0 评论 -
C++编程规范之21:避免跨编译单元的初始化依赖
摘要: 保持顺序,不同编译单元中的名字空间级对象决不应该在初始化上互相依赖,因为其初始化顺序是未定义的。这样做会惹出很多麻烦,轻则在项目中稍做修改就会引发奇怪的崩溃,重则出现严重的不可移植问题——即使是同一编译器的新版本也不行。 在不同的编译单元中定义两个名字空间级的对象时,先调用哪一个对象的构造函数是没有定义的。经常工具可能会碰巧按照编译单元目标文件的连接顺序初始化,但这种假原创 2013-12-11 08:47:26 · 2856 阅读 · 0 评论 -
C++编程规范之20:避免函数过长,避免嵌套过深
摘要: 短胜于长,平胜于优,过长的函数和嵌套过深的代码块的出现,经常是因为没能赋予一个函数以一个紧凑的职责所致,这两种情况通常都能够通过更好的重构予以解决。 每个函数都应该顾其名而能知其义,易于理解的工作单元。如果于此相反,函数试图将多个这样的小概念合并到一个长的函数体中,那么它最终将不堪重负。 过长的函数和嵌套过深的代码块都是使函数更难于理解和维护的密不可分的两大元原创 2013-12-10 20:59:02 · 10583 阅读 · 0 评论 -
C++编程规范之19:总是初始化变量
摘要: 一切从白纸开始,未初始化的变量是C和C++程序中错误的常见来源。养成在使用内存之前先清除的习惯,可以避免这种错误,在定义变量的时候就将其初始化。 按照C和C++相同的低层高效率传统,通常并不要求编译器初始化变量,除非你显式地这样做。应该显示地初始化变量。 几乎没有理由不对变量进行初始化。以独立于使用的方式来定义变量,然后在要使用的时候再赋值,这种方式已经过时了原创 2013-12-10 20:56:24 · 2444 阅读 · 4 评论 -
C++编程规范之18:尽可能局部地声明变量
摘要: 避免作用域膨胀,对于需求如此,对于变量也是如此。变量将引入状态,而我们应该尽可能少地处理状态,变量的生存期也是越短越好。 变量的生存期超过必需的长度时会产生以下几个缺点: 1. 它们会使程序更难以理解和维护。 2. 他们的名字会污染上下文。 3. 他们不能总是被合理地初始化。 我们在定义变量的时候没有原创 2013-12-10 20:54:39 · 1754 阅读 · 0 评论 -
C++编程规范之17:避免使用“魔数”
摘要: 程序设计并非魔术,所以不要故弄玄虚,要避免在代码中使用诸如42和3.1415926这样的文字常量。它们本身没有提供任何说明,并且因为增加了难于检测的重复而使维护更加复杂。可以用符号名称和表达式替换它们。 名称能够增加信息,并提供单一的维护点,而程序中到处重复的原始数据是无名的,维护起来很麻烦。常量应该是枚举符或者const值,有合适的作用域和名称。 经常会有此原创 2013-12-10 20:52:56 · 3579 阅读 · 0 评论 -
C++编程规范之12:懂得何时和如何进行并发性编程
摘要: 如果应用程序使用了多个线程或者进程,应该知道如何尽量减少共享对象,以及如何安全地共享必须共享的对象。在多线程和并发编程中最重要的是要避免死锁、活锁和恶性的竞争条件。 在编写多线程程序时要注意做到以下几点: 1.参考目标平台的文档,了解该平台的同步化原语。 2.最好将平台的原语用自己设计的抽象包装起来。 3.确保正在使用的类型在多线程程序原创 2013-12-10 20:49:33 · 1519 阅读 · 0 评论 -
C++编程规范之16.避免使用宏
摘要: 宏是C和C++语言的抽象设施中最生硬的工具,它是披着函数外衣的饥饿的狼,很难驯服,它会我行我素地游走于各处。要避免使用宏。 这一点在effective C++中也进行了解释。C++的宏的主要问题在于,他们表面上看起来很好,而实际上做的却是另一回事。宏会忽略作用域,忽略类型系统,忽略所有其他的语言特性和规则,而且会劫持它为文件其余部分所定义的符号。宏调用看上去很像符号或者原创 2013-12-09 21:28:42 · 1712 阅读 · 0 评论 -
C++编程规范之15:积极使用const
摘要: Const是我们的朋友:不变的值更易于理解、跟踪和分析,所以应该尽可能地使用常量代替变量,定义值的时候,应该把const作为默认的选项,常量很安全,在编译时会对其进行类型检查,而且它与C++的类型系统已浑然一体。不要强制转换const的类型,除非要调用常量不正确的函数。 常量能够简化代码,因为只需查看定义处的代码就鞥知道它在各处的值了。常量正确性是值得实现的,它已经得原创 2013-12-09 21:21:07 · 1785 阅读 · 0 评论 -
C++编程规范之14:宁要编译和连接时错误,也不要运行时错误
摘要: 能够在编译时做的事情,就不要推迟到运行时;编写代码时,应该在编译期间使用编译器检查不变式,而不应该在运行时再进行检查。运行时检查取决于控制流和数据的具体情况,这意味着很难知道检查是否彻底。相比而言,编译时检查与控制流和数据无关,一般情况下都能够获得更高的可信度。 在静态检查和动态检查的问题上分为两大阵营,静态检查阵营有:C++、Java,ML,Haskell;动态阵营有原创 2013-12-09 21:19:31 · 1677 阅读 · 0 评论 -
C++编程规范之13:确保资源为对象所拥有。使用显示的RAII和智能指针
摘要: 利器在手,不要再徒手为之:C++的“资源获取及初始化”(ResourceAcquisition Is Initialization,RAII)惯用法是正确处理资源的利器。RAII使编译器能够提供强大且自动的保证,这在其他语言中可是需要脆弱的手工编写的惯用法才能实现的。分配原始资源的时候,应该立即将其传递给属主对象。永远不要在一条语句中分配一个以上的资源。 这就要求我们的原创 2013-12-09 21:17:11 · 1938 阅读 · 0 评论 -
C++编程规范之11:隐藏信息
摘要: 不要泄密,不要公开提供抽象的实体的内部信息。 为了尽量减少操作抽象的调用代码和抽象的实现之间的依赖性,必须隐藏实现内部的数据。否则,调用代码就能够访问该信息,或者更糟,操作该信息,而原来应属于内部的信息就泄漏给了调用代码所依赖的抽象。应该公开抽象,而不是数据。 信息隐藏主要从一下两方面降低了项目的成为,加快了项目的进度,减少了项目的风险。1.原创 2013-12-08 21:41:57 · 1616 阅读 · 0 评论 -
C++编程规范之35:避免从并非要设计成基类的类中继承
摘要: 有些人并不想生孩子:本意是要独立使用的类所遵守的设计蓝图与基类不同。将独立类用作基类是一种严重的设计错误,应该避免。要添加行为,应该添加非成员函数而不是成员函数。要添加状态,应该使用组合而不是继承。要避免从具体的基类中继承。 在添加新功能时应该通过新的非成员函数来添加,为了避免名字查找问题,一定要将这些函数与要扩展的类型放在同一个名字空间中。有些人不喜欢非成员函数,因为原创 2013-12-27 18:26:53 · 1662 阅读 · 1 评论 -
C++编程规范之36:优先提供抽象接口
摘要: 偏爱抽象艺术吧:抽象接口有助于我们集中精力保证抽象的正确性,不至于受到实现或者状态管理细节的干扰。优先采用实现了抽象接口的设计层次结构。应该定义和继承抽象接口。抽象接口是完全由(纯)虚函数构成的抽象类,没有状态(成员设计),通常也没有成员函数实现。在抽象接口中避免使用状态能够简化整个层次结构的设计。 应该遵守依赖倒置原理(DependencyInversion Pr原创 2013-12-29 17:45:02 · 1681 阅读 · 1 评论 -
C++编程规范之37:公用继承即可替换性。继承,不是为了重用,而是为了被重用
摘要: 知其然:公用继承能够使基类的指针或者实际引用指向某个派生类的对象,既不会破坏代码的正确性,也不需要改变已有的代码。 还要知其所以然:不要通过公用继承重用(基类中的已有)代码,公用继承是为了被(已经多态地使用了基对象的已有代码)重用的。 按照Liskov替换原则(LiskovSubstitution Principle),公用继承所建模的必须总是“是一个(is-原创 2013-12-30 19:29:44 · 1952 阅读 · 1 评论 -
C++编程规范之39:考虑将虚拟函数生命为非公用的,将公用函数声明为非虚拟的
摘要: 在基类中进行修改代码高昂:请将公用函数设为非虚拟的。应该将虚拟函数设为私有的,或者如果派生类需要调用基类版本,则设为保护的。 在面向对象层次结构中进行修改是昂贵的,所以应该实施完整的抽象:将公用函数设为非虚拟的,将虚拟函数设为私有的。这就是所谓的非虚拟接口模式。 公用虚拟函数本质上有两种不同而且互相竞争的职责,针对的是两种不同而且互相竞争的目标: 1原创 2014-01-01 12:59:37 · 1539 阅读 · 1 评论 -
C++编程规范之40:要避免提供隐式转换
摘要: 并非所有的变化都是进步。隐式转换所带来的影响经常是弊大于利。在为自定义类型提供隐式转换之前,请三思而行,应该依赖的是显示转换。 隐式转换主要有两个主要的问题: 1.它们会在最意料不到的地方抛出异常。 2.他们并步总是能与语言的其他元素有效地配合。 隐式转换构造函数与重载机制配合得很糟糕,而且会使不可见的临时对象到处出现。在C++中,一个转换原创 2014-01-13 22:24:51 · 1811 阅读 · 1 评论 -
C++变成规范之41:将数据成员设为私有的,无行为的聚类(C语言形式的struct除外)
摘要: 它们不关调用者的事:将数据成员设为私有的。简单的C语言形式的struct类型只是将一组值聚集在了一起,并不封装或者提供行为,只有在这种struct类型中才可以将所有数据成员都设成公用的。要避免将公用数据和非公用数据混合在一起,因为这几乎总是设计混乱的标志。 信息隐藏是优秀软件工程的关键。应该将所有数据成员都设为私有的,不管是现在,还是可以能发生变化的将来,私有数据都是类原创 2014-01-14 09:15:53 · 3111 阅读 · 1 评论 -
C++编程规范之45:总是一起提供new和delete
摘要:它们是一揽子交易:每个类专门的重载void*operator new(parms)都必须与对应的重载void operator delete(void*, params)相随相伴,其中parms是额外参数类型的一个列表(第一个总是std:size_t)。数组形式的new[]和delete[]也同样如此。 很少需要提供自定义的new或者delete,但是如果需要其中一个,那么通常原创 2014-02-20 22:27:22 · 1568 阅读 · 0 评论 -
C++编程规范之10:尽量减少全局和共享数据
摘要: 共享会导致冲突,避免共享数据,尤其是全局数据。共享数据会增加耦合度,从而降低可维护性,通常还会降低性能。 全局变量和静态变量会使程序的逻辑变得更加复杂,使程序不同的部分耦合的更加紧密。共享数据对单元测试会产生不良影响,因为使用共享数据的代码片段的正确性不进取决于数据变化的过程,更取决于以后会使用该数据的未知代码区域的机能。 全局名字空间中的对象名称还会污染全局名字原创 2013-12-08 09:17:19 · 1766 阅读 · 1 评论 -
#pragma once与 #ifndef的区别
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #转载 2012-12-17 15:57:57 · 792 阅读 · 0 评论 -
C++编程规范之34:用组合代替继承
摘要: 避免继承带来的重负:继承是C++中第二紧密的耦合关系,仅此于友元关系。紧密的耦合是一种不良现象,应该尽量避免。因此,应该用组合代替继承,除非知道后者确实对设计有好处。与继承相比,组合有如下优点:1. 在不影响调用代码的情况下具有更大的灵活性。2. 更好的编译时间隔,更短的编译时间。3. 奇异现象减少。4. 更广的适用原创 2013-12-22 23:48:30 · 2268 阅读 · 1 评论 -
C++编程规范之33用小类代替巨类
摘要: 分而治之:小类更易于编写,更易于保证正确、测试和使用。小类更有可能适用于各种不同的情况。应该用这种小类体现简单概念,不要用大杂烩式的类,它们要体现的概念既多又复杂。 设计花哨的大类,是刚开始进行面向对象设计时常犯的典型错误。能够毕其功于一役,让一个类提供完整和复杂的功能,当然是很诱人的。但是,设计易于组合的更小的、尽量小的类,才是实践中更为成果的方法,这对任何系统都适用原创 2013-12-22 23:47:14 · 1874 阅读 · 1 评论