首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果生成了exe,那我还需要安装py环境?需不需要一个chromedrive啊?

大家好,是皮皮。 一、前言 前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python打包的问题,一起来看看吧。...还有个问题想请教下,用pyinstaller生成的,如果生成了exe,那我还需要安装py环境?需不需要一个chromedrive啊?...二、实现过程 这里【小小明】给了一个指导,如下所示:py环境已经打包到exe,chromedrive可以让用户自动下载,selenium4的最新版是支持任何版本的chromedrive自动下载的。...后来【小小明】补充道:这是以前的自动下载驱动的代码了,现在已经过时了。无法处理115以上版本的谷歌游览器。直接使用selenium4最新版,不指定位置就可以自动下载驱动, 顺利地解决了粉丝的问题。...三、总结 大家好,是皮皮。这篇文章主要盘点了一个Python函数处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

11210

C++核心准则讨论:如果一个类是资源句柄,则它需要一个构造函数一个析构函数以及复制和或移动操作

class is a resource handle, it needs a constructor, a destructor, and copy and/or move operations 讨论:如果一个类是资源句柄...,则它需要一个构造函数一个析构函数以及复制和/或移动操作 Reason(原因) To provide complete control of the lifetime of the resource....如果所有成员都是资源句柄,请尽可能依靠默认的特殊操作。...现在,Named类具有默认的构造函数,析构函数以及有效的复制和移动操作(如果T具有)。...但是,如果类具有某些默认操作,则应具有全部默认操作,并且如果类具有作为资源句柄的成员,则应将其视为资源句柄。

52320
您找到你想要的搜索结果了吗?
是的
没有找到

C++核心准则​T.141:如果需要只在一个地方使用的简单的函数对象使用无名的lambda表达式

T.141: Use an unnamed lambda if you need a simple function object in one place only T.141:如果需要只在一个地方使用的简单的函数对象...,使用无名的lambda表达式 Reason(原因) That makes the code concise and gives better locality than alternatives....为lambda表达式命名有助于改善明确性,即使是该表达式只使用一次。...检索完全一致和差不多一致的lambda表达式(以便替换为命名函数或命名lamabda表达式) 原文链接 https://github.com/isocpp/CppCoreGuidelines/blob...这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

64120

C++ 里的“数组”

C++ 里有更接近数学里向量对象,名字是valarray(很少有人使用也不打算介绍)。 vector 的成员在内存里连续存放。...删除最后一个元素 可以使用 push_back 在尾部插入一个元素 可以使用 insert 在指定位置前插入一个元素 可以使用 erase 在指定位置删除一个元素 可以使用 emplace 在指定位置构造一个元素...如果元素类型没有提供一个保证不抛异常的移动构造函数,vector 此时通常会使用拷贝构造函数。...因此,我们如果需要用移动优化自己的元素类型的话,那不仅要定义移动构造函数(和移动赋值运算符,虽然 push_back 不要求),还应当将其标为 noexcept,或只在容器中放置对象的智能指针。...如果函数接口就是想复制一个小数组,那使用 void foo(array a) 这样的形式也完全没有问题。 其次,跟上面的问题关联,array 有了合理的复制行为。

9310

Unity基础教程系列(十)——卫星(Shape Relationships)

这给了我们一个轴。下一步,需要找到位于轴定义平面内的任意偏移向量。可以通过取轨道轴与另一个随机向量的叉积实现。...创建有效实例引用的唯一方法是通过具有单个shape参数的构造函数方法,我们使用该参数设置引用并复制其当前实例标识符。 ?...但是仍然存在一个默认的构造函数,例如在创建ShapeInstance数组时使用。这将导致空引用,因此我们还应该检查是否有形状引用。...要直接从保存索引转换为形状实例,我们向ShapeInstance添加一个替代的构造函数方法,该方法具有索引参数而不是Shape参数。它可以使用新的GetShape方法检索形状,然后设置其实例标识符。...通过添加每个形状的卫星数量范围对其进行配置。我们需要一个IntRange struct值,我们可以通过复制FloatRange并将使用的类型从float更改为int创建它。 ?

1.5K21

Java的前沿分享(1):value或许成为java的新关键字

我们知道什么是“值”,什么是“对象”,但是什么是“值对象”呢?不光你们懵逼,也是一脸懵逼,一起看看。...但是对于原始类型就不一样了,如果一个int类型的变量值为7,另一个也为7,区分它们有意义?这个7还是那个7?显然是无意义的。...但是凡事都有两面性,Java对象内存占用的大小取决于它所包含的信息的总和,对象头在 64 位系统上至少需要 16 个字节,在 32 位系统上至少需要 8 个字节(当然JVM可以通过配置项去设置如何保存对象头...没有构造super函数调用构造函数。将在不执行任何超类初始化代码的情况下创建实例。 无法在值类中使用synchronized关键字。 (可能)该类没有声明finalize()方法。...(可能)构造函数使用this设置构造函数主体中的字段,或者可能在所有字段都明确内存分配之后。

24050

Chrome 的小恐龙游戏,被我破解了...

行,那我就放弃了(周末的早晨可不想在 sources 里面扒源码) 也就是说,如果没有在全局变量里找到那个对象就可以选择性放弃了。...复制粘贴就太 low 了,让想想... ? 在原有窗口的基础上,再搞一个新窗口...这不就是 iframe !...emmm居然是函数,哦?函数,首字母还大写,这熟悉的味道,这不就是个构造函数!...由构造函数创建的实例对象,可通过原型链访问构造函数 prototype 上的变量和方法,也就是说,如果能找到这个小恐龙对应的实例,那么就能直接调用这个 setSpeed 方法了。...甚至都不需要看 Runner 函数的全部代码,就知道原来实例被保存一个名叫 instance_ 的 Runner 自身属性里,论起好变量名的重要性,行,那我就不客气了,直接调用! ?

1.1K31

剖析 Chrome 的小恐龙游戏

因为假设关于游戏的对象被暴露在了全局 3、如果没暴露在全局?...复制粘贴就太 low 了,让想想... 在原有窗口的基础上,再搞一个新窗口...这不就是 iframe !...函数,首字母还大写,这熟悉的味道,这不就是个构造函数!...由构造函数创建的实例对象,可通过原型链访问构造函数 prototype 上的变量和方法,也就是说,如果能找到这个小恐龙对应的实例,那么就能直接调用这个 setSpeed 方法了。...下意识地随手输入了一下这个 Runner 构造函数,真是山重水复疑无路柳暗花明又一村呐: 甚至都不需要看 Runner 函数的全部代码,就知道原来实例被保存一个名叫 instance_ 的 Runner

1.1K20

10大性能陷阱!每个C++工程师都要知道

除此之外,不可平凡复制类型也不能作为编译器常量进行编译器运算。所以,如果你的类是平凡的(只有数值和数字,不涉及堆内存分配),千万不要随手加上析构函数!...很小一部分是因为确实需要使用std::shared_ptr的场景(不到10%)。能想到的必须用std::shared_ptr的场景有:异步析构,缓存。...std::shared_ptr还有个陷阱是一定要使用std::make_shared()而不是std::shared_ptr(new T)构造,因为后者会分配两次内存,且原子计数和数据本身的内存是不挨着的...因此我们只应在必须时才使用std::function,比如需要存储一个不确定类型的函数。...,这也是上文推荐尽量选用可平凡析构对象的另一个理由。

92730

每个C++工程师都要了解的十个性能陷阱

会各被复制两次,在传入构造函数时一次,在构造时一次。...除此之外,不可平凡复制类型也不能作为编译器常量进行编译器运算。所以,如果你的类是平凡的(只有数值和数字,不涉及堆内存分配),千万不要随手加上析构函数!...很小一部分是因为确实需要使用std::shared_ptr的场景(不到 10%)。能想到的必须用 std::shared_ptr 的场景有:异步析构,缓存。...std::shared_ptr还有个陷阱是一定要使用std::make_shared()而不是std::shared_ptr(new T)构造,因为后者会分配两次内存,且原子计数和数据本身的内存是不挨着的...::function 封装会需要在堆上分配内存 因此我们只应在必须时才使用 std::function,比如需要存储一个不确定类型的函数

1.4K30

多图|入门必看:万字长文带你轻松了解LSTM全貌

(1表示保存,0表示完全遗忘)。 我们可以使用一个小型神经网络学习这个时间门: (请注意它与先前网络方程式相似的地方;这只是一个浅层神经网络。...另外,我们之所以使用S形激活函数是因为我们所需要的数字介于0至1之间。) 接下来,我们需要计算可以从xt中学习的信息,也就是长期记忆的候选添加记忆: ϕ是一个激活函数,通常被选作为tanh。...保存向量savet通常被称为输入门(因为它决定输入信息中需要保存到cell状态中的程度),表示为it。 关注向量focust通常被称为输出门,表示为ot。)...我们在上一节中探讨了几个隐状态的实例,但是还想使用LSTM的cell状态以及其他记忆机制。它们会如我们预期的那样被激活?或者说,是否存在令人意想不到的模式呢?...这样一便可提出另一个很受欢迎的LSTM变量——GRU。 又或者,也许你认为在决定需要记忆、保存和注意哪些信息时我们不应该只依赖于工作记忆——为什么不使用长期记忆呢?

1K81

Java集合:关于 Vector 的内容盘点

Vector 的思路和 ArrayList 基本是相同的,底层是数组保存元素,Vector 默认的容量是10,有一个增量系数,如果指定,那么每次都会增加一个系数的大小,否则就扩大一倍。...ArrayList 如果需要线程安全,可以使用 Collections.synchronizedList(new ArrayList(...)); 方法,获取一个线程安全的 List。...---- 二、Vector 的使用 1、构造函数 方法名 方法说明 public Vector() 此构造函数用于创建空向量,以使其内部数据数组的大小为10,其标准容量增量为零 public Vector...) 此构造函数用于创建具有指定初始容量和容量增量的空向量 public Vector(Collection<?...然而正因为 Stack 继承自 Vector,Stack 类已经不被官方推荐使用!! 官方推荐使用 LinkedList 构建栈!!

50010

闭关多日,整理一份C++中那些重要又容易忽视的细节

),->(成员访问),,(逗号),[](下标) ---- 面试题:C++类自动提供的成员函数 默认构造函数如果没有定义构造函数 默认析构函数如果没有定义 复制构造函数:、、、、 赋值运算符:、、、...,这时只会看p所赋值的对象如果p赋值的对象是派生类的对象,就会调用派生类的析构函数(毫无疑问,在这之前也会先调用基类的构造函数,在调用派生类的构造函数,然后调用派生类的析构函数,基类的析构函数,所谓先构造的后释放...---- 虚函数的工作原理 通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存一个指向函数地址数组的指针。...派生类对象包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该函数表将保存函数的地址;如果派生类没有重新定义虚函数,该vtbl将保存函数原始版本的地址。...调用虚函数时,程序将查看存储在对象中的vtbl地址,然后转向相应的函数地址表。如果使用类声明中定义的第一个函数,则程序将使用数组中中的第一个函数地址,并执行具有该地址的函数

57010

重新学习 javascript 的面向对象(part 5)

一个对象实例做模板进行复制,并且是借助原型链模式进行特殊复制 这种复制的方式会有一些特别的地方,例如,引用类型的值问题也是无法解决,复制可以借助 es5语法也可以不借助,前者更加强大一些。...出现这个情况主要是因为如果使用 push 的话,还是操作同一个内存指针,使用Object.create的话,会重新添加到新创建对象的可枚举属性,不是同一个内存指针了。...寄生式继承的思路跟寄生构造函数模式和工厂模式很类似,核心思想是创建一个仅用于封装继承过程的函数,该函数在内部以某种方式增强对象,最后再像真得是它做了所有工作一样返回对象。...这里需要注意如果需要给添加的新函数传参的话,是不可以在”克隆“的时候传的,需要在外面使用的时候传。 这是一种比较简单的实现继承的方式,在不考虑自定义类型和构造函数的情况下,也算是一种有用的模式。...图片来自https://www.jianshu.com/p/0045cd01e0be 原型链没被切断,是因为是用了寄生(复制)的方式进行超类原型对象复制,整个复制的话,会保存它的原型链,然后将这个复制出来的原型对象直接赋值给子类

36110

九、函数函数式编程

包括之前几篇文章介绍的执行上下文,变量对象,闭包,this等,都是围绕函数的细节展开。 很多人在学习中,很急切的希望自己快一点开始学习面向对象,学习模块,学习流行框架,迅速成为高手。...当我们的项目越来越大,那么需要保存的数据与状态就越来越多,因此,我们需要一个专门的模块维护这些数据,这个时候,一个叫做状态管理器的东西就应运而生。对于状态管理器,最出名的,想非redux莫属了。...如果你暂时看不懂,没有关系,知道如何使用就行,上面的代码可以直接运用于实践开发。记住,当你需要保存的状态太多的时候,你想到这一段代码就行。 函数自执行的方式另外还有其他几种写法,诸如!...基本数据类型复制,是值直接发生了复制,因此改变后,各自相互不影响。但是引用数据类型的复制,是保存在变量对象中的引用发生了复制,因此复制之后的这两个引用实际访问的实际是同一个堆内存中的值。...我们知道,函数的参数在进入函数后,实际是被保存在了函数的变量对象中,因此,这个时候相当于发生了一次复制。如下例。

59220

Chrome 浏览器的小恐龙游戏,被我破解了

因为假设关于游戏的对象被暴露在了全局 如果没暴露在全局?行,那我就放弃了(周末的早晨可不想在 sources 里面扒源码) 也就是说,如果没有在全局变量里找到那个对象就可以选择性放弃了。...复制粘贴之后再一个一个比对?太 low 了,让想想... 在原有窗口的基础上,再搞一个新窗口...这不就是 iframe !...typeof.png emmm居然是函数,哦?函数,首字母还大写,这熟悉的味道,这不就是个构造函数!...由构造函数创建的实例对象,可通过原型链访问构造函数 prototype 上的变量和方法,也就是说,如果能找到这个小恐龙对应的实例,那么就能直接调用这个 setSpeed 方法了。...下意识地随手输入了一下这个 Runner 构造函数,真是山重水复疑无路柳暗花明又一村呐: instance.png 甚至都不需要看 Runner 函数的全部代码,就知道原来实例被保存一个名叫 instance

4.8K229184

对象的传值与返回

如果使用引用和指针,单纯传递纯粹的对象时,编译器会如何处理呢?...为此,我们定义一个简单的类A,为了防止编译器对我们的代码优化处理(参考的前一篇博文),我们自己定义构造函数复制构造函数和赋值运算符重载函数。...调用结束后,使用ret 4指令将刚才压入的a的地址弹出栈,这样栈顶保存着完整参数对象(刚才开辟的12个字节)。这样参数对象被完整的复制出来了。 ?...参数对象的地址被x记录了下来,ebp+8记录的正是函数一个参数的内容,即返回值对象的地址!在拷贝构造函数调用之前,ecx保存的this指针正是返回值对象的,进栈的参数是x的地址,和我们预期的一样!...对象返回时,也需要函数处理的结果进行一次对象拷贝,不过被拷贝的返回值对象内存已经在函数调用之前已经开辟出来了,函数需要记录它的地址即可,然后调用拷贝构造函数初始化它。 3.

2.4K80

k 阶奇异值分解之图像近似

.bmp 的方式构造灰度图对应的图片对象,而是直接利用调用 convert 方法返回的灰度图对象,通过这种方式减少了一次磁盘的读取。...,该方法不是返回一个图片对象,而是一个图片对象对应的一个或者多个矩阵,因此没有必要使用 np.array 函数,直接把它当成数组就行了。...在这里利用 numpy 数组的广播机制,直接对一个数组✖255 的方式表示对数组中每个元素✖255。然后通过调用 astype 方法进行类型转换,其参数为需要转换的数据类型。...下面就来举个例子说一下它为什么可以压缩一个矩阵,假设有一个 1432 行 1910 列的一个矩阵,其中共有 1432✖1910=2735120 个元素,如果令 k=5 进行 k 阶奇异值分解,我们就只需要...对于 tensorflow 和 pytorch 来说,使用 CPU 运行时间比使用 GPU 运行时间短,可能是因为最后转为 numpy 数组的时候需要把数据从 GPU 的显存中复制到内存中花费时间。

94720

盘点 Java 创建对象的 x 操作

那么问你一个问题,你知道 Java 中如何创建对象? 这个问题仿佛是给 Java 新手来写的,好像有点瞧不起在座各位的样子,嗯。。。...,因为类也是一种对象;new 也负责调用对象构造函数,下面是使用 new 创建对象的代码 Object obj = new Object(); 这段代码中,我们在堆区域中分配了一块内存,然后把 obj...dup 会复制栈上的最后一个元素,然后再次将其推入栈;因此,如果在栈上有一个对象引用,并且调用了 dup,则现在在栈上有对该对象的两个引用。...使用反射来创建对象 使用反射来创建对象其实也是使用了 newInstance 方法,只不过这个方法是 Constructor ,Java 反射中构造器的方法,我们可以通过这种方式创建一个新的对象。...使用对象克隆创建对象 这是第四种创建方式,使用 Cloneable 类中的 clone() 方法创建,它的前提是你需要实现 Cloneable 接口并实现其定义的 clone 方法。

58420

JavaScript 编程精解 中文第三版 六、对象的秘密

这段代码使用了关键字this输出正在说话的兔子的种类。我们回想一下apply和bind方法,这两个方法接受的第一个参数可以用来模拟对象中方法的调用。这两个方法会把第一个参数复制给this。...如果需要,可以用新对象覆盖它。 或者,你可以将属性添加到现有对象,如示例所示。 按照惯例,构造器的名字是大写的,这样它们可以很容易地与其他函数区分开来。...如果没有,则首先创建保存当前值的对象,之后更新其位置,如有必要则移至下一行。 让我们使Matrix类可迭代。 在本书中,我会偶尔使用事后的原型操作为类添加方法,以便单个代码段保持较小且独立。...6.14 习题 6.14.1 向量类型 编写一个构造器Vec,在二维空间中表示数组。该函数接受两个数字参数x和y,并将其保存对象的同名属性中。...但是如果你的映射需要包含hasOwnProperty这个词呢? 你将无法再调用该方法,因为对象的属性隐藏了方法值。 你能想到一种方法,对拥有自己的同名属性的对象,调用hasOwnProperty

1.7K60
领券