Python 的运行机制
怎么运行写好的 Python 脚本呢?
一般都是用 IDE 来执行写好的代码, 那 IDE 是用什么来执行 Python 代码呢?
IDE 是用 Python 来运行代码。什么?用 Python 来运行 Python?这背后又是怎么运行的呢?
其实在安装 python 的过程中,还会安装一个解释器,实际上是这个解释器在运行代码,刚好这个解释器也叫Python,按理说,这个应该叫 Python 解析器,但很多时候都没有对这两者有什么区分,因此也就习惯了。
所以,Python 实际上是用 Python 解释器运行 Python 代码。
如果使用过 Java 语言,可能会想问,Python 解析器是不是就像是 Java VM?
是,也不是。说它是,是因为解释器会运行代码,说它不是则是因为运行的方式不同。在 Python 中,没有将原地啊吗编译为“可自行代码”的概念。与 Java VM 不同,解释器并不运行 .class 文件,它会直接运行你的代码。
那是怎么完成编辑的呢?
Python 的解释器不会把编译过程展示出来。所有的细节都由它负责,不需要程序员操心。我们看到的只有代码在运行,因为 IDE 会完成所有的具体工作,代表你与解释器交互。
Python 的标准库
Python 提供了非常丰富的标准库模块,几乎能满足绝大多数的编程场景。那怎么知道有哪些标准库呢,这些标准库又有哪些功能呢,python 文档有完整的介绍,地址在这里 https://docs.python.org/3/library/index.html
当然,除了丰富的标准库,Python 社区还提供了非常丰富的第三方库,地址在这里 https://pypi.org/
Python 的缩进
Python 一条语句的结束不是用大括号{}来结束的,而是一行就是一条语句(当然多行也可以是一条一句,但需要由特定的规则包围),也就是说,Python 的执行是一行接着一行执行的。
而缩进,则是标示着这是代码块,每一个缩进都代表着一个代码块。通俗说,Python 用缩进来确认几行是“一起的”,是在一个 {} 内的,冒号: 引入一个缩进的代码组
for i in range(5):
if i/2 == 0: # 这是一个代码组
print("这是偶数") # 这也是一个代码块
else: # 和if是同一个代码组
pirnt("这是奇数") # 这是又是一个代码块
Python 的缩进是非常严格的,一般情况下 IDE 会帮助代码自动缩进,因此运行时基本不会有缩进的语法错误。但 Python 的缩进并不严格等于 1个 Tab 或者4个空格,虽然多数情况下用1个 Tab 或者4个空格,IDE 并不会提示语法错误,而多数情况下代码运行也不会报错,但可能在特别的运行环境下,就有可能带来这种缩进语法错误。
>>>IndentationError: unexpected indent
Python 的导入机制
当编写代码需要使用该文件外的模块或者库模块(标准库和第三方库,暂时这么叫吧)时,就需要使用 Python 的导入机制来完成了。
Python 的导入机制有另种形式:
- import time
- from time import sleep
等等?Python 有两种带入机制?
其实不是,Python 只有一种导入机制,因为只有一个 import 语句,不过,这个 import 语句有两种用法。那这两种用法有什么区别呢?
第一种用法,也就是(import time),采用这种方式导入时,必须使用点记法语法来访问模块的功能,比如 time.sleep()。
而第二种用法,也就是(from time import sleep),采用这种方式导入时,会把一个指定的函数导入到程序的命名空间,这允许我们在必要时直接调用这个函数。(命名空间的概念在 Python 中很重要,因为它定义了运行代码的上下文)
有没有使用 import 的正确方法呢?
用法因人而异,全凭个人喜好,使用哪种用法都是正确的,在使用时时情况而定就好,不会影响程序的运行。但特殊情况下,可能需要使用合适的用法,比如:同时有两个不同的模块,定义的方法名是相同的,如果同时都使用 from x import y 导入,那程序怎么区分调用 y() 是那个 x 的呢,此时使用 import x1、import x2 导入,调用时可以使用 x1.y()、x2.y() 来区分不同的 y() 方法。
Python 解释器的使用小技巧
有时候,如果想快速知道一个库里面有什么模块方法可以提供使用时,该怎么办呢?
- 查官方文档或者其他网上文档
- 使用 Python shell
使用 Python shell 可以更加快速的得知一个库有什么模块方法,以及该模块方法的具体用法,那怎么使用呢?
首先,需要进入 Python shell 环境,在 cmd 输入 Python 或者 Python3 分别进入 Python2 和 Python3 的 Python shell,导入对应的库,则可以使用不同的方法获取相关信息了:
>>>import time
>>>dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'time_ns', 'timezone', 'tzname', 'tzset']
>>>help(time.sleep)
Help on built-in function sleep in module time:
sleep(...)
sleep(seconds)
Delay execution for a given number of seconds. The argument may be
a floating point number for subsecond precision.
(END)
dir 会显示 Python 中某一个库相关的所有属性,包含的模块;help 会展示某一个函数的文档,按 q 退出。
学习内容来自《Head First Python》
浙公网安备 33010602011771号