首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】从C++/Java到Python入门(4)(完)

【Python】从C++/Java到Python入门(4)(完)

作者头像
ZifengHuang
发布2020-07-29 15:42:16
6790
发布2020-07-29 15:42:16
举报
文章被收录于专栏:未竟东方白未竟东方白

上篇写了关于对象和一些输入输出操作,接下来就是些杂项了,这篇就算是这个小系列的收尾了,摸就完事了。那么先是Python的灵魂(笑)所最需要用到的东西——模块导入:

模块

1.首先是几个术语:模块(module)是一个自包的由变量和函数等代码组成的.py文件,利用import直接可以引入。包(package)是由多个模块和子包组成的文件目录,一般来说目录下都包含有一个为__init__.py的文件。库(lib)为一个抽象概念,在Python中没有实体,用来统称Python中用来实现某一功能的代码集合,由模块和包组成。框架(framework)指一套被设计好的解决问题用的代码结构和集合,很多框架可以当作库来使用。

2.从上一点说的术语可以看出来,模块是这一切的基本,Python导入模块类似于Java,在文件的开头使用import 文件名进行导入。

3.在Python中不用担心C那样的重复引入的问题,不管执行了几次import,模块都只会被引入一次。

4.当我们只想导入模块中的一部分内容(例如只使用其中一两个函数),可以使用from 模块 import 函数1,函数2...的写法。通过from-import导入的函数可以被直接使用而不需要长长的前缀修饰

5.类似Java,from import里也可以用星号引入(*)代表引入全部,但是这样的写法不被推荐。如果要在包中使用这样的写法,记得要在__init__.py中定义一个包含所有模块名定义的列表__ALL__。

6.有一个要特别提到的模块是sys系统模块,sys.path()会打印出当前的搜索目录列表,搜索目录是Python用于搜索指定模块使用的,修改这个变量或者把模块放入目录中才能被import到。

7.使用模块中的函数的写法是:模块名.函数

8.注意只有带有__init__.py的目录才会被认为是一个包,使用包也可以类似利用点运算符模块只导入其中一个组件

9.还有一点,模块在被程序第一次引入的时候其主程序将会运行,如果我们希望自己的模块只有自身在运行时才执行一些内容,可以使用判断语句if __name__=="__main__":xxx 这个写法中,__name__参数只有当是模块本身在运行时才会为__main__,其他程序的引入不会执行。

10.还有,dir(模块)可以返回模块内所有名称组成的列表

异常

1.关于异常处理,Python也有类似与try-catch-finally语句可以使用,在Python中,异常的捕获是try-except-else-finally的格式。

2.和Java的差不多,在try中放入需要捕获的代码或函数之类;except捕获对应的异常类(必须是Exception类的子类),可以在异常类名后面添加as操作词来获得异常的具体对象;except可以不带有异常类代表捕获所有没有被列出的异常;else(可选)中的语句则会在try没有出现异常的时候被执行;finally(可选)则一样是表示无论如何都会执行的语句,若try中抛出了无法捕获的异常,则也会执行完finally的内容再进行进一步的抛出。

3.类似Java的throw来抛出异常,Python使用raise关键词来抛出异常,用法很简单,raise 异常类型(可选的提示字符串)。类似Java也可以直接使用raise来将目前在处理的异常抛到上层。

4.而自定义异常的方法则是新建一个继承自Exception的类,然后覆盖其__init__()和__str()__方法即可正常使用。

5.Java7之后,Java增强了try语句的能力,文件流之类的东西可以在try中被自动关闭了。相似的,Python有with-as语句可以自动执行生成对象的清理工作,用法很简单就是:with 赋值语句的右边 as 赋值语句的左边。

6.还有一个一直没有提到的操作,pass语句,可以做为一种占位符填充应该存在但暂时还没有编写的代码块

迭代器

1.迭代器(Iterator),有些类似C中的指针,Java中则本来就有迭代器Iterator,是用于遍历元素的一个对象,使用它可以很自由地在可遍历集合(例如列表)中遍历并处理目标元素。

2.要注意Python中的迭代器不同与C的指针,是单向移动,只准前进不能后退的。

3.迭代器的创建方法x=iter(目标对象),迭代器的移动方法next(迭代器)。

4.迭代器可相当于得到了集合的元素一样进行操作

5.生成器(generator)是使用了yield(让步等待)关键词而临时生成的迭代器,可以理解为可以使函数动态暂停下来,暂时保存下函数运行的信息,然后往外返回一个迭代器,这个迭代器一旦被调用到next()则会导致暂停下来的函数继续运行直到再次让步抛出迭代器。生成器可以用于方便地实现类似于递归的效果。

6.生成器可能一下子比较难理解,看看下面这个斐波那契数列的例子会好理解很多,主要是暂停运行的作用:

7.迭代器在遍历完集合元素后会抛出一个StopIterator的异常,要记得捕获。

标准函数库

1.这里只简单记下一些模块的主要用途,都可以直接import,详细去网络查询

2.操作系统相关——os

3.Python解释器相关——sys

4.文件相关——glob

5.正则表达式相关——re

6.数学相关——math

7.网络相关——socket,urllib

8.时间相关——datetime

9.性能评判相关——timeit

10.测试相关——doctest

11.线程相关——threading

交互式编程

1.交互式编程其实是Python的一大亮点,它使人们并不需要真正启动编辑器完整编写代码便可以在命令行进行简单的编程操作。但是由于我觉得这并不算很重要,所以排到最后来写。

2.交互式编程是直接利用Python的解释器在运行,从传统角度相当于一句句写入代码构造内存环境来运行,不需要额外创建.py脚本文件。

3.由于是直接在与解释器进行交互,所以一步步都要小心点,每一段使用的代码都会立即得到反馈,在这个模式下不太容易进行代码调试

4.而对于进入这个模式的方法,其实很简单,在设置好环境变量后,进入命令行shell(例如Windows下的cmd)直接键入python就能进入

5.即使在这样的模式下,也可以正常进行import等复杂操作

后记

1.关于这系列的文章,我大量查阅了菜鸟教程Python3的资料(http://www.runoob.com/python3/python3-tutorial.html),网站的内容很详细,值得一看。

2.在自学中,我还借助了codecademy平台Python课程(https://www.codecademy.com/learn/learn-python)的交互式自学,这系列的教程有很多的实操练习和骚操作介绍,只可惜太偏向于日常使用方向了,很多内容并没有系统地介绍,且教授的版本目测是2.7的Python,2与3的风格混杂。

3.关于位级运算的东西我完全没有提到呢,因为感觉没啥必要,而且写法其实和C系列是一样的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未竟东方白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档