在整个应用程序,只有三行声明。这是最短单WIN32应用,但它的功能是非常有限,简单地显示一个消息框,示出来,其他什么事情也没有做。以下就来分析这三行语句了。别小看这三行语句。其实是隐藏着非常多知识点在其背后。比方使用了三个keyword:from、import和None。当中fromkeyword和importkeyword做成一个语句表达形式,它们的简单意思就是表示从某个模块(库)里导入模块顶层的一些对象。表现的形式例如以下:

from 模块(库)  import 对象

在这里相关语句为:

from ctypes import *

那么这行语句的意思就是从ctypes模块(库)里导入全部顶层的对象。星号(*)是表示全部对象,当然。也是能够指定特定名称的对象导入。比方以下的语句:

from ctypes import windll

这行语句表示就仅仅导入windll对象。这样的方式与星号(*)的差别是限制了从模块里导入的对象类型。假设一个模块里的代码比較多。就倾向使用指定对象名称导入。这样能够避免命名冲突。假设想使用比較简单,使用星号方式是比較方便好用。

另外使用from形式导入时。跟直接使用import是有差别的。from形式表示从模块里拷贝顶层作用域里全部的对象到眼下from语句所在作用域来。

假设原来导入的模块发生了改变。from 形式拷贝的对象名称是不会改变的。这时就须要比較小心那些不断地改变的对象,最好不要使用from的形式了。而使用import的形式。在Python里能够导入非常多类型的模块,比方Python写的模块文件。或者C写的符合Python调用接口的模块文件。又或者C++写的符合Python调用接口的模块文件。

ctypes库

在这语句里是导入了ctypes库(模块),那么ctypes库是干什么用呢?简而言之。ctypes库就是用来帮助Python从源代码里调用C语言写的动态连接库(DLL)。从一门语言调用另外一门语言是一个复杂的过程,那么为什么要调用呢?可能原因是以下几点:

1)系统模块是其实的标准。无法自行开发。比方在Windows操作系统是使用C和C++开发的,因此要使用Win32的API接口。必须使用C语言的方式来调用系统的功能。另外操作系统的开发厂家也不可能提供全部其他语言的接口。

2)功能模块须要更高的效率。因为Python是动态语言、解释型语言,运行速度介于编译型语言(比方C、C++)和全然动态解释语言的速度之间(比方Basic)。比方有一段算法计算非常大。要求性能非常高,就能够使用C或C++语言来开发一个动态连接库,然后让Python来调用,就能够提高Python程序的总体运行性能。

3)曾经使用C或C++开发的旧模块,须要使用Python打电话。在为了与资源的一次保护兼容。

版权声明:本文博主原创文章,博客,未经同意不得转载。

from声明的更多相关文章

  1. Fis3的前端工程化之路[三大特性篇之声明依赖]

    Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...

  2. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  3. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

  4. HTML文档声明

    前面的话   HTML文档通常以类型声明开始,该声明将帮助浏览器确定其尝试解析和显示的HTML文档类型.本文将详细介绍文档声明DOCTYPE 特点   文档声明必须是HTML文档的第一行.且顶格显示, ...

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. MFC中成员变量的声明顺序与析构顺序

    第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...

  7. C++模板编程:如何使非通用的模板函数实现声明和定义分离

    我们在编写C++类库时,为了隐藏实现,往往只能忍痛舍弃模版的强大特性.但如果我们只需要有限的几个类型的模版实现,并且不允许用户传入其他类型时,我们就可以将实例化的代码放在cpp文件中实现了.然而,当我 ...

  8. 错误: 从内部类中访问本 地变量vvv; 需要被声明为最终类型

    从github 下载了源码, 进行编译, 出现了下面的错误 E:\downloads\ff\elasticsearch-master\elasticsearch-master>GRADLE :b ...

  9. js变量声明作用域问题

    1.先来看两个题 var a = 1; foo1(); function foo1(){ console.log(a); //输出1 }; foo2(); var a = 1; function fo ...

  10. CSS权威指南之css声明,伪类,文本处理--(简要笔记一)

    1.css层叠的含义 后面的会覆盖前面的样式 2.每个元素生成一个框,也称盒.   3.替换元素和非替换元素. img如果不指定src的外部路径,该元素就没有意义.他由文档本身之外的一个图像文件来替换 ...

随机推荐

  1. WinForm 国际化开发一例

    1.新建一个WinForm程序(在中文版的Windows下),如下,添加1个Button和1个Label 设置Form1的localizable属性为True(Form1的properties里的De ...

  2. BZOJ 2006 NOI2010 超级钢琴 划分树+堆

    题目大意:给定一个序列.找到k个长度在[l,r]之间的序列.使得和最大 暴力O(n^2logn),肯定过不去 看到这题的第一眼我OTZ了一下午... 后来研究了非常久别人的题解才弄明确怎么回事...蒟 ...

  3. JS 查找遍历子节点元素

    function nextChildNode(node,clazz,tagName){ var count= node.childElementCount; for(var i=0;i<coun ...

  4. JAVA IP地址转成长整型方法

    JAVA IP地址转成长整型方法 代码例如以下: /** * IP转成整型 * @param ip * @return */ public static Long ip2int(String ip) ...

  5. Spark里面:获取图Spark有多少行代码

    Spark1.0.0公布一个多月,有多少行代码就(Line of Code, LOC)? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW56aHNvZn ...

  6. 【DataStructure】Some useful methods about linkedList(三)

    Method 4: Gets the value of element number i For example, if list is {22, 33, 44, 55, 66, 77, 88, 99 ...

  7. Windows 8实例教程系列 - 数据绑定高级实例

    原文:Windows 8实例教程系列 - 数据绑定高级实例 上篇Windows 8实例教程系列 - 数据绑定基础实例中,介绍Windows 8应用开发数据绑定基础,其中包括一些简单的数据绑定控件的使用 ...

  8. shell script 入门 笔记

    shell script 入门 在 shell script 注意必须使用完全相同写在下面: 1.  指令的运行是从上而下.从左而右的分析与运行: 2.  指令的运行就如同第五章内提到的: 指令.选项 ...

  9. 2C 产品的本质是人性,2B 产品的背后是业务(转)

    本文作者李源是 BLUES 原来做 YY 语音客户端产品时候的同事,原来针对 YY 语音的游戏用户做 2C 的 PC 客户端产品和 APP,后来到某品牌手机做 2B 的后台系统.以下文章,是作者经历了 ...

  10. 古老server源代码迁移到新server

    因为老vsts资源server不久,准备存档,现在在旧的需要server该代码仍然在使用的所有迁移到新的vstsserver在. 因此,我们需要迁移所有需要也许是习惯了新的代码vsts在之上.代码的迁 ...