【转】第00课导读:生活中的设计模式——启程之前,请不要错过我

      • 为什么叫设计模式
        • 什么是设计模式
        • 设计模式与生活有什么联系
      • 为什么要学设计模式
      • 如何进行学习
      • 为什么选择 Python
        • 弥补市场空缺
        • 大势所趋,Python 已然成风
      • 简单的 Python 基础
        • Python 的特点
        • 基本语法
        • 常用容器
          • List(列表)
          • Tuple(元组)
          • Dictionary(字典)
        • 类的定义
        • Demo 让你顿悟
      • 重要说明

两年前 CSDN 出了一个产品叫 ink,旨在提供一个高质量的写作环境,那时就有写设计模式这一系列的想法了,而且也确实写了,在 ink 里写了三篇文章,后来不知道什么原因这个产品下架了,写的三篇文章也没了,这事也就一直被搁置了;直到今天,我想重新开始,以全新的方式和思路重新写这一系列内容!

  • 文章的特点: 从生活的小故事开始,由浅入深,逐步阐述设计模式的思想,并抽象出代码模型(骨架)。
  • 追求的境界: 用最通俗的语言阐述最难懂的概念;用最简单的语法实现最复杂的逻辑;用最短小的代码写出最强悍的程序!

为什么叫设计模式

什么是设计模式

设计模式最初是被 GoF 于 1995 年提出的,GoF(Gang of Four,四人帮)即 Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides。他们四人于 1995 年出版了一本书《Design Patterns:Elements of Reusable Object-Oriented Software》(翻译成中文是《设计模式 可复用面向对象软件的基础》),第一次将设计模式提升到理论高度,并将之规范化,该书提出了 23 种经典的设计模式。

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、无数工程师实践的代码设计经验的总结,它是面向对象思想的高度提炼和模板化,使用设计模式是为了让代码具有更高的可重用性,更好的灵活性和可拓展性,更易被人阅读和理解。GoF 提到的模式有四个基本要素:

  • 模式名称:助记名,方便讨论、交流、传播;
  • 问题:该模式是用来解决哪类实际问题,即它的应用场景;
  • 解决方案:设计的组成部分,它们之间的相互关系及各自的职责和协作方式;
  • 效果:使用模式能达到的效果,即对使用条件的权衡取舍。

设计模式与生活有什么联系

我一直坚信:程序源于生活,又高于生活!程序的灵魂在于思维的方式,而思维的灵感来源于生活的精彩。互联网是一个虚拟的世界,而程序本身就是对生活场景的虚拟和抽象,每一个模式我都能在生活中找到他的影子。比如,说到状态模式我能想到水有冰、水、气三种状态,而人也有少、壮、老三个不同的阶段;提起中介模式我能立马想到房产中介;看到单例模式,脑海中会即刻浮现心目中的那个她……

设计模式是面向对象的高度抽象和总结,而越是抽象的东西,越难以理解。本系列文章的目地就是为了降低设计模式的阅读门槛,以生活中的小故事开始,用风趣的方式,由浅入深地讲述每一个模式。让你再次看到设计模式时不只是一个模式,还是生活中的一个个小确幸!程序不是冷冰冰的代码,它还有生活的乐趣和特殊意义。

为什么要学设计模式

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,这些解决方案是众多软件开发人员经过相当长的一段时间的试验和总结的成果。所以不管你是新手还是老手,学习设计模式都将为你的代码设计带来莫大的帮助。

学习设计模式的理由有很多,这里只列出几个最现实的:

  • 摆脱面试的窘境,不管是前端工程师还是后端工程师,亦或是全栈工程师,设计模式是面试时必问的一道题。
  • 让程序设计能力有一个质的提升,不再是写一堆结构复杂、难以维护的烂代码。
  • 对面向对象的思想有一个更高层次的理解。

如何进行学习

1.熟悉一门面向对象语言

首先,要熟悉至少一门面向对象的计算机语言。如果没有,请根据自己的学习爱好,或希望从事的工作,先选择一门面向对象语言(C#、Java、Python、Go 等都可以)进行学习和实战,对抽象、继承、多态、封装有一定的基础之后,再来看本系列的文章内容。

2.了解 Python 的基本语法

对 Python 的基本语法有一个简单了解。Python 语法非常简单,只要有一定的编程语言基础,通过下文的介绍很快就能理解的。

3.学会阅读 UML 图

UML(Unified Modeling Language)称为统一建模语言或标准建模语言,是面向对象软件的标准化建模语言。UML 规范用来描述建模的概念有:类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作以及状态。

UML 类图表示不同的实体(人、事物和数据)如何彼此相关;换句话说,它显示了系统的静态结构。想进一步了解类图中的各种关系,可参考以下文章:

  • UML 类图关系大全
  • UML 类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

4.阅读本系列文章

通过阅读本系列文章,以轻松愉快的方式学习设计模式和编程思想。本系列文章没有阅读的先后顺序,每一章都是单独成文,可从任意一篇文章开始。

为什么选择 Python

虽然说设计模式与编程语言没有关系,它是对面向对象思想的灵活应用和高度概括,可以用任何一种语言来实现它,但总归是需要用一种语言进行举例的。本系列文章的所有示例代码均使用 Python 语言编写,为什么选择 Python,主要是基于以下两个原因。

弥补市场空缺

设计模式于 1995 被 GoF 提出,被广泛应用于热门的面对象语言。目前用 Java、C# 描述的设计模式的书籍和资料已经非常多了,但用 Python 来描述的真是太少了;我在当当上搜索了一下“Python 设计模式”关键字,发现只有那零星的几本书。而作为已经挤进 Top4 的 Python 语言,这明显是不够的。同时,Python 已经越来越成熟,也越来越多地被使用,作为一个有技术追求的 IT人有必要了解一下基于 Python 代码设计。

大势所趋,Python 已然成风

  • C 语言诞生于 1972 年,确随着 Unix 的诞生才深深植根于各大操作系统;
  • C++ 语言诞生于 1983 年,确因微软的可视化桌面操作系统才得以广泛传播;
  • Java 语言诞生于 1995 年,确因互联网的迅速崛起才变得家喻户晓;
  • Python 语言诞生于 1991 年,而下一场技术革命已然开始,AI 时代已然成风。在 AI 领域中已经被广泛使用的 Python 语言必将成为下一个时代的第一开发语言!

最热门的 AI 开源框架 PyTorch 和 TensorFlow 都已经采用了 Python 作为接口和开发语言。除此之外,还有一堆的 AI 相关的框架库,也都纷纷采用,如 AIMA、pyDatalog、SimpleAI、PyBrain、PyML 等。

作为这么一门有前途的语言,必然是要去学习和使用的。

简单的 Python 基础

如果已经熟悉 Python 语言,这一部分的内容可直接跳过!

Python 的特点

Python 崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。

与 Java 和 C++ 这些语言相比,Python 最大的两个特点是:

  • 语句结束不用分号“;”。
  • 代码块用缩进来控制,而不用大括号“{}”。

刚转过来的时候可能会有点不适,用一段时间就好了!

个人觉得,在所有的高级计算机语言中,Python 是最接近人类自然语言的。Python 的语法、风格都与英文的书写习惯非常接近,Python 的这种风格被称为 Pythonic,如条件表达式,在 Java 和 C++ 中是这样的:

int min = x < y ? x : y

而 Python 是这样的:

min = x if x < y else y

有没有觉得第二种方式更接近人类的自然思维?

基本语法

数据类型

Python 是一种弱类型的语言,变量的定义不需要在前面加类型说明,而且不同类型之间可以方便地相互转换。Python 有五个标准的数据类型:

  • Numbers(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

其中 List、Tuple、Dictionary 为容器,将在下一部分介绍。Python 支持四种不同的数字类型:int(有符号整型)、long(长整型)、float(浮点型)、complex(复数)。

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

Demo:

 
  1. age = 18 # int

  2. weight = 62.51 # float

  3. name = "Tony" # string

  4. print("age:", age)

  5. print("weight:", weight)

  6. print("name:", name)

  7. # 变量的类型可以直接改变

  8. age = name

  9. print("age:", age)

  10.  
  11. a = b = c = 5

  12. # a,b,c三个变量指向相同的内存空间,具有相同的值

  13. print("a:", a, "b:", b, "c:", c)

  14. print("id(a):", id(a), "id(b):", id(b), "id(c):", id(c))

结果:

 
  1. age: 18

  2. weight: 62.51

  3. name: Tony

  4. age: Tony

  5. a: 5 b: 5 c: 5

  6. id(a): 1457772400 id(b): 1457772400 id(c): 1457772400

常用容器

List(列表)

List(列表)是 Python 中使用最频繁的数据类型,用 [ ] 标识。

列表可以完成大多数集合类的数据结构实现。类似于 Java 中的 ArrayList,C++ 中的 Vector。此外,一个 List 中还可以同时包含不同类型的数据,支持字符、数字、字符串,甚至可以包含列表(即嵌套)。

  • 列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
  • 加号(+)是列表连接运算符,星号(*)是重复操作。

Demo:

 
  1. list = ['Thomson', 78, 12.58, 'Sunny', 180.2]

  2. tinylist = [123, 'Tony']

  3. print(list) # 输出完整列表

  4. print(list[0]) # 输出列表的第一个元素

  5. print(list[1:3]) # 输出第二个至第三个元素

  6. print(list[2:]) # 输出从第三个开始至列表末尾的所有元素

  7. print(tinylist * 2) # 输出列表两次

  8. print(list + tinylist) # 打印组合的列表

  9. list[1] = 100 # 修改第二个元素的值

  10. print(list) # 输出完整列表

  11. list.append("added data")

  12. print(list) # 输出增加后的列表

结果:

 
  1. ['Thomson', 78, 12.58, 'Sunny', 180.2]

  2. Thomson

  3. [78, 12.58]

  4. [12.58, 'Sunny', 180.2]

  5. [123, 'Tony', 123, 'Tony']

  6. ['Thomson', 78, 12.58, 'Sunny', 180.2, 123, 'Tony']

  7. ['Thomson', 100, 12.58, 'Sunny', 180.2]

  8. ['Thomson', 100, 12.58, 'Sunny', 180.2, 'added data']

Tuple(元组)

Tuple(元组)是另一个数据类型,元组用“()”标识,内部元素用逗号隔开。元组不能二次赋值,相当于只读列表,用法与 List 类似。Tuple 相当于 Java 中的 final 数组,C++ 中的 const 数组。

Demo:

 
  1. tuple = ('Thomson', 78, 12.58, 'Sunny', 180.2)

  2. tinytuple = (123, 'Tony')

  3. print(tuple) # 输出完整元组

  4. print(tuple[0]) # 输出元组的第一个元素

  5. print(tuple[1:3]) # 输出第二个至第三个的元素

  6. print(tuple[2:]) # 输出从第三个开始至列表末尾的所有元素

  7. print(tinytuple * 2) # 输出元组两次

  8. print(tuple + tinytuple)# 打印组合的元组

  9. # tuple[1] = 100 # 不能修改元组内的元素

结果:

 
  1. ('Thomson', 78, 12.58, 'Sunny', 180.2)

  2. Thomson

  3. (78, 12.58)

  4. (12.58, 'Sunny', 180.2)

  5. (123, 'Tony', 123, 'Tony')

  6. ('Thomson', 78, 12.58, 'Sunny', 180.2, 123, 'Tony')

Dictionary(字典)

Dictionary(字典)是 Python 中除列表以外最灵活的内置数据结构类型。字典用“{ }”标识,字典由索引(key)和它对应的值 value 组成,相当于 Java 和 C++ 中的 Map。

列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

Demo:

 
  1. dict = {}

  2. dict['one'] = "This is one"

  3. dict[2] = "This is two"

  4. tinydict = {'name': 'Tony', 'age': 24, 'height': 177}

  5. print(dict['one']) # 输出键为'one' 的值

  6. print(dict[2]) # 输出键为 2 的值

  7. print(tinydict) # 输出完整的字典

  8. print(tinydict.keys()) # 输出所有键

  9. print(tinydict.values())# 输出所有值

结果:

 
  1. This is one

  2. This is two

  3. {'name': 'Tony', 'age': 24, 'height': 177}

  4. dict_keys(['name', 'age', 'height'])

  5. dict_values(['Tony', 24, 177])

类的定义

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾,如下实例:

 
  1. class ClassName:

  2. '类的帮助信息' #类文档字符串

  3. class_suite #类体

类的帮助信息可以通过 ClassName.__doc__ 查看,class_suite 由类成员,方法,数据属性组成。如:

 
  1. class Test:

  2. "这是一个测试类"

  3.  
  4. def __init__(self):

  5. self.__ivalue = 5

  6.  
  7. def getvalue(self):

  8. return self.__ivalue

其中,__init__ 为初始化函数,相当于构造函数。

访问权限:

  • __foo__:定义的是特殊方法,一般是系统定义名字,类似 __init__() 之类的。
  • _foo:以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *。
  • __foo:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。

类的继承:

继承的语法结构如下:

 
  1. class 派生类名(基类名):

  2. 类体

Python 中继承中的一些特点:

  • 在继承中基类的构造(__init__() 方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
  • 在调用基类的方法时,需要使用 super() 前缀。
  • Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找(先在本类中查找调用的方法,找不到才去基类中找)。

如果在继承元组中列了一个以上的类,那么它就被称作“多重继承”。

基础重载方法

Python 的类中有很多内置的方法,我们可以通过重写这些方法来实现一些特殊的功能,这些方法有:

序号方法描述简单的调用
1__init__(self [,args…] )构造函数obj = className(args)
2__del__(self)析构方法, 删除一个对象del obj
3__repr__(self)转化为供解释器读取的形式repr(obj)
4__str__(self)用于将值转化为适于人阅读的形式str(obj)
5__cmp__(self, x)对象比较cmp(obj, x)

Demo 让你顿悟

我们将一段 Java 的代码对应到 Python 中来实现,进行对比阅读,相信很快就能明白其中的用法。Java 代码如下:

 
  1. class Person {

  2. public static int visited;

  3.  
  4. Person(String name, int age, float height) {

  5. this.name = name;

  6. this.age = age;

  7. this.height = height;

  8. }

  9.  
  10. public String getName() {

  11. return name;

  12. }

  13.  
  14. public int getAge() {

  15. return age;

  16. }

  17.  
  18. public void showInfo() {

  19. System.out.println("name:" + name);

  20. System.out.println("age:" + age);

  21. System.out.println("height:" + height);

  22. System.out.println("visited:" + visited);

  23. Person.visited ++;

  24. }

  25.  
  26. private String name;

  27. protected int age;

  28. public float height;

  29. }

  30.  
  31. class Teacher extends Person {

  32.  
  33. Teacher(String name, int age, float height) {

  34. super(name, age, height);

  35. }

  36.  
  37. public String getTitle() {

  38. return title;

  39. }

  40.  
  41. public void setTitle(String title) {

  42. this.title = title;

  43. }

  44.  
  45. public void showInfo() {

  46. System.out.println("title:" + title);

  47. super.showInfo();

  48. }

  49.  
  50. private String title;

  51.  
  52. }

  53. public class Test {

  54. public static void main(String args[]) {

  55. Person tony = new Person("Tony", 25, 1.77f);

  56. tony.showInfo();

  57. System.out.println();

  58. Teacher jenny = new Teacher("Jenny", 34, 1.68f);

  59. jenny.setTitle("教授");

  60. jenny.showInfo();

  61. }

  62. }

对应的 Python 代码:

 
  1. class Person:

  2. "人"

  3. visited = 0

  4.  
  5. def __init__(self, name, age, height):

  6. self.__name = name

  7. self._age = age

  8. self.height = height

  9.  
  10. def getName(self):

  11. return self.__name

  12.  
  13. def getAge(self):

  14. return self._age

  15.  
  16. def showInfo(self):

  17. print("name:", self.__name)

  18. print("age:", self._age)

  19. print("height:", self.height)

  20. print("visited:", self.visited)

  21. Person.visited = Person.visited +1

  22.  
  23. class Teacher(Person):

  24. "老师"

  25.  
  26. def __init__(self, name, age, height):

  27. super().__init__(name, age, height)

  28. self.__title = None

  29.  
  30. def getTitle(self):

  31. return self.__title

  32.  
  33. def setTitle(self, title):

  34. self.__title = title

  35.  
  36. def showInfo(self):

  37. print("title:", self.__title)

  38. super().showInfo()

  39.  
  40.  
  41. def testPerson():

  42. "测试方法"

  43. tony = Person("Tony", 25, 1.77)

  44. tony.showInfo()

  45. print();

  46.  
  47. jenny = Teacher("Jenny", 34, 1.68);

  48. jenny.setTitle("教授");

  49. jenny.showInfo();

  50.  
  51. testPerson()

自己测试一下,会发现结果是一样的:

 
  1. name: Tony

  2. age: 25

  3. height: 1.77

  4. visited: 0

  5.  
  6. title: 教授

  7. name: Jenny

  8. age: 34

  9. height: 1.68

  10. visited: 1

重要说明

  • 为了降低程序复杂度,本系列文章中用到的所有示例代码均不考虑多线程安全,望借鉴 Demo 的读者注意。
  • 本系列所有 Demo 均是在 Python 3.6.3 下编写的,Python 3.0 以上应该都可以正常运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【探究】信号槽到底能不能有返回值?

【探究】信号槽到底能不能有返回值&#xff1f; 前言 Qt信号槽到底可不可以有返回值呢&#xff1f;问了下身边的同事&#xff0c;有的人说可以&#xff0c;有的人说不可以。在实际项目中&#xff0c;确实没看到过有人使用带返回值的信号槽&#xff0c;可以说存在感很低。平时…

python yield 简单用法_通过实例简单了解python yield使用方法

实例代码如下def demo():print("开始执行...")while 1:res yield 这是返回值print("res:",res)d1 demo()print(d1)print(next(d1))print("*"*20)print(next(d1))执行结果如下&#xff1a;开始执行...这是返回值********************res: None这…

【转】第01课:生活中的监听模式——一坑爹的热水器

用程序来模拟生活从剧情中思考监听模式 监听模式监听模式的模型抽象 代码框架类图基于框架的实现模型说明 设计要点推模型和拉模型应用场景 【故事剧情】 刚刚大学毕业的 Tony 只身来到北京这个硕大的城市&#xff0c;开始了北漂的生活。但刚刚毕业的他身无绝技、包无分文&…

【经验】Qt项目开发必备工具

在实际的项目中&#xff0c;除了需要掌握Qt开发框架本身&#xff0c;还需要掌握一些开发工具。这些工具能起到事半功倍的效果&#xff0c;甚至某些工具是开发不可或缺的。下面笔者就介绍一些常用的开发工具的用法及下载地址&#xff0c;希望对缺少实际项目经验的同学提供一些参…

c与python内存传递_python - 从Python向C ++传递COM指针数组 - 堆栈内存溢出

我已经阅读了许多文档&#xff0c;示例和StackOverflow主题&#xff0c;但仍然无法正常工作&#xff01; 我正在为我的C COM对象编写一个Python接口。 这不是我第一次这样做。 过去&#xff0c;我已经成功地使用comtypes获取单个接口指针&#xff0c;并将它们传递给我的COM类&…

【转】TCP/IP协议--TCP的超时和重传

TCP是可靠传输。可靠之一体现在收到数据后&#xff0c;返回去一个确认。但是不能完全避免的是&#xff0c;数据和确认都可能丢失。解决这个办法就是&#xff0c;提供一个发送的重传定时器&#xff1a;如果定时器溢出时还没收到确认&#xff0c;它就重传这个报文段。 想法是完美…

【技术】Qt对话框讲解

前言 Qt中对话框QDialog是几乎每个项目都会用到的GUI窗口对象。本文通过讲解QDialog及其子类在项目中经常被用到的功能点&#xff0c;帮助小伙伴们理解和掌握其使用方法。 QDialog QDialog是Qt对话框类树中的基类&#xff0c;Qt为我们提供了很多QDialog子类&#xff0c;即标…

mysql集群方案对比_MySQL云原生方案在携程开发测试场景中的实践

一、背景与使用场景随着Kubernetes平台在容器云计算领域的一统天下&#xff0c;云原生 (Cloud Native) 一词也被提的越来越频繁。各类应用纷纷走上了容器化、云原生化的道路&#xff0c;无状态服务应用在Kubernetes平台上的运行&#xff0c;已经得到了大规模生产级别的实践认可…

UML核心问题

帮助读者理解每种图是为了展现什么内容、解决什么核心问题而存在的。 下面按照重要性先后依次说明。 1. 用例图 核心&#xff1a;人、目标、功能 以人为出发点&#xff0c;描述人实现一个目标需要使用哪些功能&#xff0c;仅仅指出功能点就行&#xff0c;点到即止&#xff0c…

【转】setsocketopt getsocketopt比较全的参数说明

setSocketOption各项的含义 DELAY 小缓冲写入延迟值。如果为0&#xff0c;则禁用了TCP对于小缓冲区操作的Nagle算法。如果需要启动该算法则需要把该值设置为非0 KEEPLIVE 保持连接的特性。如果该值为0&#xff0c;则禁用了保持连接的特性。如果要启动该特性则要把…

vb.net datagridview数据批量导入sql_【自学C#】|| 笔记 44 ComboBox:组合框控件数据绑定...

一、ComboBox&#xff1a;组合框控件数据绑定在 Windows 应用程序中很多控件都提供了 DataSource 属性&#xff0c;并将 DataSet 或 DataTable 的值直接赋给该属性&#xff0c;这样在控件中即可显示从数据库中查询出来的数据。 常用的数据绑定控件有文本框(TextBox)、标签(L…

【转】C#Socket编程详解(一)TCP与UDP简介

一、TCP与UDP 1、TCP 1.1 定义 TCP&#xff08;TransmissionControl Protocol&#xff09;传输控制协议。 是一种可靠的、面向连接的协议&#xff08;eg:打电话&#xff09;、传输效率低全双工通信&#xff08;发送缓存&接收缓存&#xff09;、面向字节流。使用TCP的应…

【精华】掌握Qt调试技术

前言 软件调试&#xff0c;是开发过程中必备的技能。通过调试可以发现软件存在的bug&#xff0c;即缺陷。调试可以帮助开发者窥探到软件运行过程中的详细状态&#xff0c;从而为消除bug提供重要信息。调试的英文是debug&#xff0c;前面的de在英文中表示“反对”&#xff0c;“…

ps海报合成教程_如何利用PS制作海报?详细教程来了!

今天能学长给大家带来一套利用PS做【月满中秋】海报的教程。福利干货到&#xff0c;请大家接住&#xff01;话不多说&#xff0c;直接上教程【月满中秋-第一课】月满中秋-海报制作教程https://www.zhihu.com/video/1187797197951918080为了方便大家阅读&#xff0c;本篇文章特地…

【转】WebSocket详解(一):初步认识WebSocket技术

1、前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性&#xff0c;随着web技术被广泛用于web APP的开发&#xff0c;这些新特性得以推广和使用&#xff0c;而websocket作为一种新的web通信技术具有巨大意义。 本文将带您认识WebSocket。也可查看本文的下篇&#x…

【Qt调试技巧】Profile配置使用及一些坑

介绍 不知从哪个版本起&#xff0c;Qt Creator中的构建配置中&#xff0c;增加了一种新型配置&#xff0c;名叫“Profile”&#xff0c;如下图所示&#xff1a; 官方对Profile的描述是&#xff1a;Profile是介于Debug和Release中间的一种配置。具体是什么意思呢&#xff1f;…

python 语句简写_自学Python-语句之列表推导式

先举例分析运行过程&#xff1a;例如&#xff1a;#将list_a[1,2,3,4,5]元素扩大10倍&#xff0c;生成新的列表。如果按传统的for循环来写&#xff1a;--------------------list_a[1,2,3,4,5]list_b[]for x in list_a:list_b.append(x*10)print(list_b)输出&#xff1a;[10, 20,…

Qt中使用OpenSSL

概述 OpenSSL官网 OpenSSL官网&#xff1a;OpenSSL是一个开源跨平台的加密库&#xff0c;应用广泛。Windows提供了自己的一套加密认证API&#xff0c;感兴趣的话可以参考&#xff1a;Windows Authentication Overview。 Qt官方文档&#xff1a; Secure Sockets Layer (SSL)…

【转】带你玩转Visual Studio——03.带你了解VC++各种类型的工程

上一篇文章带你玩转Visual Studio——带你新建一个工程一文中提到新建一个工程时会有很多的工程类型(图1)&#xff0c;现在将简单介绍各种类型工程的含义和主要用途。由于这里包含的工程类型太多&#xff0c;有很多本人也没有接触过&#xff0c;有些可能理解的不太对的地方还请…

数学学习过程中的感悟(一)

前言 最近在考研复习&#xff0c;回顾自己的学习数学的过程&#xff0c;有一些感悟&#xff0c;在此记录一下。 正文 大学的时候&#xff0c;学习到了高数&#xff0c;但是接触不久就丧失了兴趣。明明中学时代还很喜欢学习数学&#xff0c;为什么到了大学&#xff0c;一点兴…