编程
文章平均质量分 78
Python编程导师
Python编程导师
展开
-
Python爬虫:让“蜘蛛”帮我们工作
对于少量的数据,可以人工去找。但是对于大量的数据,如果在获取数据之后还要进行分析,则靠人工无法完成任务,这时就需要通过计算机程序帮助我们完成任务,这种程序就叫作。进阶版是在《看漫画学Python》的基础上讲解Python进阶的知识,如果你看过《看漫画学Python》,那么你一定很喜欢《看漫画学Python 2》。解析HTML数据是通过BeautifulSoup对象实现的,BeautifulSoup对象的常用函数如下。lxml:用C语言编写的解析器,速度很快,依赖于C库,在CPython环境下可以使用它。原创 2022-09-06 09:59:38 · 1090 阅读 · 0 评论 -
Python爬取哔哩哔哩(bilibili)视频
本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流。好了多了就不多说了喜欢的朋有可以收藏,转发请复原文链接谢谢。一、环境准备我这里使用的是环境如下仅供参考:开发工具: pycharmpython环境:python-3.8.0依赖的包: shutil,os,re,json,choice,requests,lxml二、页面分析我在这里就拿前段时间非常火的马老师的视频来举例子吧。视频链接: ww转载 2020-12-12 18:04:15 · 1412 阅读 · 0 评论 -
Python代码制作“恐龙跳一跳“小游戏
开发工具Python版本:3.6.4相关模块:pygame模块;以及一些Python自带的模块。相关文件卫星:web7599环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。原理介绍游戏规则简介:玩家通过空格键控制一只小恐龙的前进方式,当小恐龙触碰到植物或者飞龙时,游戏结束。小恐龙躲避的植物和飞龙越多,得分越高。逐步实现:Step1:定义精灵类为了方便实现小恐龙和植物以及飞龙之间的碰撞检测,我们先定义一些精灵类,包括:① 植物原创 2020-12-12 17:53:44 · 1585 阅读 · 0 评论 -
python“渡劫”进阶期(继承、多态、私有化、异常捕获、类属性和类方法)
1.单继承## 封装,继承和多态## 1.封装1、满足把内容封装到某个地方,另一个地方去调用封装的内容2、使用初始化构造方法,或者使用self获取封装的内容## 2.继承子类继承父类的属性和内容1.1单继承示例class Animal: def eat(self): print('吃饭了') pass def drink(self): print('喝水了') passclass Dog(A原创 2020-09-13 09:55:09 · 2450 阅读 · 0 评论 -
C++俄罗斯方块(源码)值得收藏学习!
VC++俄罗斯方块源码带声音,操作说明:利用键盘控制方块的移动: ↑ 方块旋转 ↓ 直接落下 ←向左移动 → 向右移动。消除行数已经超过10级,游戏结束。 游戏具体玩法:选中游戏界面的"游戏"|"游戏开始"来开始游戏,每当用方块填充完一行或者多行时,则可以消除当前这一行或者多行的方块,并得到一定积分。当方块堆放的高度超过游戏所规定的最大高度,即游戏界面最上面的边界。则认定游戏结束。开始时将要出现方块没有生成,其不能赋值给当前方块数组。 判碰撞,遇到了边界或者有其他方块档住我觉得这个方法对编写原创 2020-05-18 15:37:55 · 1385 阅读 · 6 评论 -
C++冒泡排序算法排序详解!
冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。C++ 冒泡排序算法的实例源代码,一些排序方法的代码集锦,该函数模板使用冒泡法对集合元素进行排序,参数说明: collection 集合对象,集合对象必须提供 [] 操作。 element 集合元素,该参数的作用仅仅是确定集合元素类型, 参数的...原创 2020-02-22 15:47:43 · 867 阅读 · 0 评论 -
c/c++资料:编程零基础到精通电子书+ppt分享!
C++大家已经是编程大咖必会的一门语言,内容多而复杂,但是学好了收入也是和努力成正比的。不少人因为现在的工作薪水低而学习最后生活更加美好。大学中IT行业更备受瞩目,C++现在的趋势已经跟的上时代,处处离不开IT行业,小编今天特意整理了很多之前学过的C++电子书以及ppt分享给大家。视频每天都会有更新的,还在犹豫什么?机会不容错过。...原创 2020-02-22 15:33:38 · 614 阅读 · 1 评论 -
自己动手制作C 语言编译器(8):表达式
这是整个编译器的最后一部分,解析表达式。什么是表达式?表达式是将各种语言要素的一个组合,用来求值。例如:函数调用、变量赋值、运算符运算等等。表达式的解析难点有二:一是运算符的优先级问题,二是如何将表达式编译成目标代码。我们就来逐一说明。运算符的优先级运算符的优先级决定了表达式的运算顺序,如在普通的四则运算中,乘法*优先级高于加法+,这就意味着表达式2 + 3 * 4的实际运行顺序是2 ...原创 2019-01-17 11:13:05 · 728 阅读 · 0 评论 -
自己动手制作C 语言编译器(9):总结
恭喜你完成了自己的 C 语言编译器,本章中我们发一发牢骚,说一说编写编译器值得注意的一些问题;编写编译器时遇到的一些难题。本系列:自己动手制作C 语言编译器(0):前言自己动手制作C 语言编译器(1):设计自己动手制作C 语言编译器(2):虚拟机自己动手制作C 语言编译器(3):词法分析器自己动手制作C 语言编译器(4):递归下降自己动手制作C 语言编译器(5):变量定...原创 2019-01-17 20:44:02 · 1408 阅读 · 0 评论 -
C++11编程知识:右值引用
概述右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i;这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通...原创 2019-01-18 10:59:55 · 230 阅读 · 0 评论 -
C语言精华:指针有害健康?
黑暗的内存很多人对 C 语言深恶痛绝,仅仅是因为 C 语言迫使他们在编程中必须手动分配与释放内存,然后通过指针去访问,稍有不慎可能就会导致程序运行运行时出现内存泄漏或内存越界访问。C 程序的内存泄漏只会发生在程序所用的堆空间内,因为程序只能在堆空间内动态分配内存。NULL 指针、未初始化的指针以及引用的内存空间被释放了的指针,如果这些指针访问内存,很容易就让程序挂掉。除了堆空间,程序还...原创 2019-01-18 18:49:10 · 665 阅读 · 0 评论 -
C++小知识:不要节约代码行数
本篇案例来自 KDE4 源码。错误代码:void LDAPProtocol::del( const KUrl &_url, bool ){ .... if ( (id = mOp.del( usrc.dn() ) == -1) ) { LDAPErr(); return; } ret = mOp.waitForResult( id,...原创 2019-01-14 11:38:13 · 168 阅读 · 0 评论 -
C++小知识:为什么错误代码能正常工作
本篇案例来自 Miranda NG 源码。错误代码:#define MF_BYCOMMAND 0x00000000Lvoid CMenuBar::updateState(const HMENU hMenu) const{ .... ::CheckMenuItem(hMenu, ID_VIEW_SHOWAVATAR, MF_BYCOMMAND | dat-&g...原创 2019-01-14 11:59:39 · 509 阅读 · 0 评论 -
C++中引用和匿名对象的理解和本质剖析
大家对C++的引用应该都不陌生吧,抱着既要知其然,也要知其所以然的态度。下面将按照是什么?怎么用?为什么需要?本质剖析的流程来向大家一一描述。引用是什么?引用其实就是给变量起的一个别名,使用这个别名跟使用变量名没有区别。那什么又是变量名呢?变量名实质上是一段连续存储空间的别名,是一个标号(门牌号),编译器通过变量来申请并命名内存空间,程序员可以通过变量的名字可以使用存储空间。也...原创 2019-01-24 16:18:53 · 481 阅读 · 0 评论 -
C++ 线程池实现原理
背景多线程编程是C++开发者的一个基本功, 但是很多开发者都是直接使用公司给包装好的线程池库, 没有去了解具体实现,有些实现也都因为高度优化而写得讳莫如深,让初学者看得吃力。所以写这篇文章主要是想以非常简单的方式讲讲实现原理, 希望初学者看完之后不是觉得「不明觉厉」,而是觉得「原来如此」。面朝代码首先先来一段超级简单(注释丰富)的代码展示多线程编程的经典写法。注: 该段代码和完...原创 2019-01-24 19:46:44 · 3072 阅读 · 0 评论 -
要是有了垃圾回收,还会不会发生内存泄漏?
问题的发现这个问题是我在写C++时考虑到的,C++需要手动管理内存,虽然现在标准库中提供了一些智能指针,可以实现基于引用计数的自动内存管理,但现实环境是很复杂的,我们仍要注意循环引用的问题。还有一个容易被忽视的问题就是对象间关系的“占有”和“非占有”,这个问题其实在具有GC的C#和Java中也一样存在。目前.NET和Java的GC策略都属于Tracing garbage collectio...原创 2019-01-24 20:38:20 · 244 阅读 · 0 评论 -
面向指针编程(一)
面向对象编程,面向设计模式编程(亦即设计模式),面向接口编程,面向模板编程(亦即泛型编程),面向函数编程(亦即函数式编程),面向多核时代的并行编程,面向大数据的机器学习编程……这么多年,大家要面向的东西已经够多了,然而我看到的现象是,很多编程语言让大家面向 xxx 的同时在竭力回避指针。我可不想面向这么多东西,所以我只好加入指针的黑暗势力。我要不自量力的来写一篇《面向指针编程》作为投名状,借以表示...原创 2019-01-19 20:54:09 · 198 阅读 · 0 评论 -
面向指针编程(二)
数据再抽象上一节的代码有些冗长,我们可以尝试对其进行精简。首先看下面这三个结构体及其 create函数:struct point { double x; double y;};struct rectangle { double width; double height;};struct circle { struct point *cen...原创 2019-01-19 20:56:43 · 222 阅读 · 0 评论 -
自己动手制作C 语言编译器(0):前言
“手把手教你构建 C 语言编译器” 这一系列教程将带你从头编写一个 C 语言的编译器。希望通过这个系列,我们能对编译器的构建有一定的了解,同时,我们也将构建出一个能用的 C 语言编译器,尽管有许多语法并不支持。在开始进入正题之前,本篇是一些闲聊,谈谈这个系列的初衷。如果你急切地想进入正篇,请跳过本章。前言为什么要学编译原理如果要我说计算机专业最重要的三门课,我会说是《数据结构》、《...原创 2019-01-15 11:12:31 · 1194 阅读 · 0 评论 -
C++的泛型编程
代码膨胀C++ 的泛型编程是基于模板实现的,而 C++ 的模板采用的是代码膨胀技术。例如 std::list 容器,如果你将 int 类型的数据存进去,C++ 编译器就为你生成一个专门用来存 int 类型数据的列表数据结构。也就是说,你向 std::list 容器中存放什么类型,C++ 编译器就为你生成相应的列表数据结构。理论上,数据的类型是无限的,因此 C++ 要生成的列表数据结构也是无限的。...原创 2019-01-20 19:45:08 · 3250 阅读 · 0 评论 -
宏语言为何不受欢迎?
人类用计算机处理文本主要是依赖宏语言以及一些专用的文本编辑器。事实上,早期的文本编辑器只提供基本的文本编辑功能,然后借助宏语言进行功能扩展。结果人类很快就发现,基于宏扩展的编辑器,功能越复杂,它的行为就越诡异。于是,文本编辑器的扩展语言很快就被换成了当时的一种通用的动态类型的函数式编程语言——Lisp。实际上,这就是 Emacs 的前世与今生。研究编程语言设计的人,所追求的目标是,怎样定义一套文...原创 2019-01-21 10:36:16 · 230 阅读 · 0 评论 -
有没有一段代码,让你觉得人类的智慧也可以璀璨无比?
Kyle McCormick 在 StackExchange 上发起了一个叫做Tweetable Mathematical Art的比赛,参赛者需要用三条推这么长的代码来生成一张图片。具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、 BL 三个函数,每个函数都不能超过 140 个字符。每个函数都会接到 i 和 j 两个整型参数(0 ≤ i, j ≤ 1023),然后需要返回一个 0...原创 2019-01-21 10:41:36 · 237 阅读 · 0 评论 -
ProtoBuf 反射详解
Protocol Buffer 简称 ProtoBuf,是用于结构化数据串行化的灵活、高效、自动的方法,又如 XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。本文主要介绍 protobuf 里的反射功能,使用的pb版本为2.6.1,同时为了简洁,对 repeated/extensio...原创 2019-01-25 20:20:32 · 2044 阅读 · 0 评论 -
程序员是否有义务做好代码的注释?你做好代码注释了吗?
关于编程,代码注释是一个很重要的部分,从某种程度上,代码注释也反应了一个程序员的专业素养,下面我们就来聊聊程序员和代码注释的那些事。一些典型的场景场景一:某天,一个程序员因为一些事情感到心理很委屈,于是他决定,以后写代码的时候,我尽量将注释写得模棱两可,写得简单些。场景二:某天,一个程序员因为工作分配不均,然后他决定,尽可能的少写注释或者文档。两种常见的注释//和/**...原创 2019-01-25 20:21:51 · 215 阅读 · 0 评论 -
学会了C语言/C++能做什么?我们一起来看看吧!
大部分初学者都在想!!学会了C/C++能做什么程序员,今天我就来告诉大家!服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等!这就是我们的答案,,不知道其中有没有各位想去发展的方向呢!有兴趣学习交流C语言C++编程的伙伴可加群:941 636 0...原创 2019-01-25 20:25:04 · 4404 阅读 · 0 评论 -
为什么我说C语言是最好的游戏开发语言!
我需要的开发语言是什么样的?有些要求是没有商量余地的。首先,它必须是可靠的。我不能接受把时间浪费在处理那些不是我引起的bug上。过去我开发的很多游戏都是基于flash的,现在flash技术已经离寿终正寝不远了。我不想花费时间将老游戏移植到新的平台上,我想开发新的游戏。我需要找一个我有信心它能存在很长一段时间的平台。同样我不希望把自己绑定在一个特定的操作系统上,我理想 的操作系统最好有开...原创 2019-01-21 15:09:46 · 778 阅读 · 0 评论 -
自己动手制作C 语言编译器(1):设计
这篇文章我们要从整体上讲解如何设计我们的 C 语言编译器。本系列:首先要说明的是,虽然标题是编译器,但实际上我们构建的是 C 语言的解释器,这意味着我们可以像运行脚本一样去运行 C 语言的源代码文件。这么做的理由有两点:1.解释器与编译器仅在代码生成阶段有区别,而其它方面如词法分析、语法分析是一样的。2.解释器需要我们实现自己的虚拟机与指令集,而这部分能帮助我们了解计算机的工作原理...原创 2019-01-15 20:29:08 · 2394 阅读 · 1 评论 -
自己动手制作C 语言编译器(2):虚拟机
本章我们要构建一台虚拟的电脑,设计我们自己的指令集,运行我们的指令集,说得通俗一点就是自己实现一套汇编语言。它们将作为我们的编译器最终输出的目标代码。计算机的内部工作原理我们关心计算机的三个基本部件:CPU、寄存器及内存。代码(汇编指令)以二进制的形式保存在内存中,CPU 从中一条条地加载指令执行。程序运行的状态保存在寄存器中。内存我们从内存开始说起。现代的操作系统都不直接使用内存...原创 2019-01-15 20:30:35 · 1255 阅读 · 0 评论 -
漫谈 C++:良好的编程习惯与编程要点
以良好的方式编写C++ class假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。① Header(头文件)中的防卫式声明complex.h:# ifndef __COMPLEX__# define __COMPLEX__class complex{ }# endif防止头文件的内容被多次包含。② 把数据放在pr...原创 2019-01-26 11:01:39 · 193 阅读 · 0 评论 -
C++ 引用计数技术及智能指针的简单实现
1.智能指针是什么简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变.所不同的是,智能指针能够对内存进行进行自动管理,避免出现悬垂指针等情况。2.普通指针存在的问题C语言、C++语言没有自动内存回收机制,关于内存的操作的安全性依...原创 2019-01-26 11:10:49 · 170 阅读 · 0 评论 -
图说C++对象模型:对象内存布局详解
0.前言文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。文章如果有解释不清、解释不通或疏漏的地方,恳请指出。1.何为C++对象模型?引用《深度探索C++对象模型》这本书中的话:有两个概念可以解释C++对象模型:语言中直接支持面向...原创 2019-01-26 15:51:23 · 142 阅读 · 0 评论 -
自己动手制作C 语言编译器(3):词法分析器
本篇我们要讲解如何构建词法分析器。什么是词法分析器简而言之,词法分析器用于对源码字符串做预处理,以减少语法分析器的复杂程度。词法分析器以源码字符串为输入,输出为标记流(token stream),即一连串的标记,每个标记通常包括:(token, token value)即标记本身和标记的值。例如,源码中若包含一个数字'998',词法分析器将输出(Number, 998),即(数字,99...原创 2019-01-16 10:59:17 · 1127 阅读 · 0 评论 -
给初学算法者的礼物:三个精彩算法的解析
我在这里提供我见识到的三个精彩算法的解析,强烈地推荐给初学的算法爱好者,它们可能会令你眼界大开,同时坚定你在算法大道上勇往直前的信念。#3. 二进制是人类的好朋友,在线的树的最近公共祖先(LCA)算法:利用数的二进制表示可以产生很多加速算法,online-LCA是其中之一。许多算法的加速是对数率的,就是利用了数的二进制表示。首先定义二维数组:prede[N+1][B+1], N表示树的...原创 2019-01-21 21:03:41 · 225 阅读 · 0 评论 -
自己动手制作C 语言编译器(4):递归下降
本章我们将讲解递归下降的方法,并用它完成一个基本的四则运算的语法分析器。什么是递归下降传统上,编写语法分析器有两种方法,一种是自顶向下,一种是自底自上。自顶向下是从起始非终结符开始,不断地对非终结符进行分解,直到匹配输入的终结符;自底向上是不断地将终结符进行合并,直到合并成起始的非终结符。其中的自顶向下方法就是我们所说的递归下降。终结符与非终结符没有学过编译原理的话可能并不知道...原创 2019-01-16 13:10:48 · 559 阅读 · 1 评论 -
自己动手制作C 语言编译器(5):变量定义
本章中我们用 EBNF 来大致描述我们实现的 C 语言的文法,并实现其中解析变量定义部分。由于语法分析本身比较复杂,所以我们将它拆分成 3 个部分进行讲解,分别是:变量定义、函数定义、表达式。EBNF 表示EBNF 是对前一章提到的 BNF 的扩展,它的语法更容易理解,实现起来也更直观。但真正看起来还是很烦,如果不想看可以跳过。program ::= {global_declar...原创 2019-01-16 15:08:50 · 493 阅读 · 0 评论 -
C++11带来的优雅语法
自动类型推导 autoauto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以简化我们的编程工作;auto是在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响;另外,似乎auto也并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。auto a; // 错误,auto是通过初始化表达式进⾏类型推导,如果没有...原创 2019-01-22 11:28:19 · 352 阅读 · 0 评论 -
C++(11)在时空性能方面的改进
主要包括以下方面:1.新增的高效容器:array、forward_list以及unordered containers;2.以及常量表达式、静态断言和move语义;大小固定容器 arraystd::array是一个支持随机访问且大小(size)固定的容器,它是c++11中新增的容器。它有如下特点:不预留多余空间,只分配必须空间(译注:size() == capacity())。...原创 2019-01-22 13:47:30 · 238 阅读 · 0 评论 -
自己动手制作C 语言编译器(6):函数定义
由于语法分析本身比较复杂,所以我们将它拆分成 3 个部分进行讲解,分别是:变量定义、函数定义、表达式。本章讲解函数定义相关的内容。EBNF 表示这是上一章的 EBNF 方法中与函数定义相关的内容。variable_decl ::= type {'*'} id { ',' {'*'} id } ';' function_decl ::= type {'*'} id '(' pa...原创 2019-01-16 19:56:45 · 351 阅读 · 0 评论 -
C++11中对类(class)新增的特性
突然发现以前的一篇老文default/delete 控制默认函数在我们没有显式定义类的复制构造函数和赋值操作符的情况下,编译器会为我们生成默认的这两个函数:默认的赋值函数以内存复制的形式完成对象的复制。这种机制可以为我们节省很多编写复制构造函数和赋值操作符的时间,但是在某些情况下,比如我们不希望对象被复制,在之前我们需要将复制构造函数和赋值操作符声明为private,现在可以使用del...原创 2019-01-22 18:54:27 · 192 阅读 · 0 评论 -
C++虚表,你搞懂了吗?
前言我们说的虚表其实有很多种叫法:virtual method table(VMT)virtual function table(vftable)virtual call tabledispatch tablevtable这些都是虚表的意思。虚表是一种利用程序语言实现的dynamic dispatch机制,或者说runtime method binding机制,也就是我...原创 2019-02-14 16:50:22 · 298 阅读 · 0 评论