其他
都说Python执行效率不高,为什么还要学习它?
就像你买了一辆汽车,有人却说, 汽车开的比飞机慢多了,买什么汽车啊。 然而,生活中大部分的场合,用汽车比用飞机方便的多。
同样的道理通常你开发的程序(自动化工具、网站后端等),Python的执行效率完全足够了。
如果一定要比执行效率,谁都比不过 二进制机器代码, 为什么程序员 不直接写 二进制机器代码 呢?
很多时候, 更重要的是看 开发效率
。
Python最大的优势是 开发效率 高 。
同样的系统,用Python 开发通常比用其他语言 所需的时间 少的多。 (这是在 对语言的熟练度相同 的情况下 的对比)
通常Python 开发一个项目 10天, 其他语言或许要 15 - 30天。
开发的速度快,这有多么重要,大家都能明白。
最后我们再来看 执行效率
-
Python 执行效率真的低吗?
要看写的代码做的什么事情。
就拿代码常见的字符串处理来说,Python官方解释器底层就是C语言开发的,本身就经过了大量地优化。
普通的 C程序员,水平有限,对字符串处理没有特别的优化,写出的程序 或许比 Python 效率更低。
Python很多的库,比如字符串处理、加解密、科学计算、人工智能,底层都是C语言开发的,执行效率并不低。
Python慢的地方在于 解释器对 语言逻辑代码的 解释执行速度 相对比较慢, 如果这些并不是你的程序中 最耗费时间的部分,Python语言就不会成为你程序的主要瓶颈。
-
你的程序真的需要那么高的执行效率的吗?
就拿开发网站服务来说 , 网站后端的性能瓶颈 通常在 数据库操作。
假设我们开发一个web服务
如果有一个请求的处理,假设java代码执行要0.01毫秒, python代码 要0.05毫秒, java比Python快5倍,对吧?
但是处理这个请求还要访问数据库, 这个操作和使用什么编程语言无关,java和Python花费的时间确是一样的,都要50毫秒。
这样 java的服务 50.01毫秒, 而Python是50.05毫秒,差别可以忽略不计了。
所以很多场景,即使语言本身执行性能再高,总体性能也高不起来。
白月黑羽 根据 前程无忧网站 的搜索结果, python在 国内的职位需求 仅次于 java、js 、c/c++ 位列第四,超过php、c#等明星语言。 而且成长势头来看,速度超过前面3位。
运行Python程序,提示找不到Python命令
如果你运行python的时候,显示如下
这是因为,你安装Python解释器的时候,没有勾选 add Python to path
所以,命令行程序找不到Python.exe 在什么地方。
怎么解决这个问题呢?
如果你是Windows 操作系统,不需要重装Python, 在Windows环境变量path里面加上 Python解释器所在路径即可。
点击这里,打开windows设置
然后,如下下图所示,输入 huanj,点击 编辑系统环境变量
然后,在弹出对话框中,点击 环境变量
然后,双击系统变量栏目下面的 path 这条
然后,按照下图操作
注意:
-
你要看看你的python解释器安装在什么目录,填写你的目录。
-
一定是python所在目录 ,不要在最后加上python.exe
-
把python目录中的scripts目录也加上,就是最后要多两条记录,如下所示
最后,很重要,
因为刚才对环境变量的修改,对已经打开的窗口不生效!!!
所以你必须 关闭
你已经打开的命令行窗口, 重新打开一个窗口 , 再次执行python程序。
好了,大功告成。
运行Python程序,提示找不到代码文件
如果你运行python的时候,显示如下
这是什么原因?
要运行一个Python脚本,通常我们需要打开命令行窗口,并 进入到该脚本所在的目录
。 这样Python解释器才能找到这个程序。
比如我们要运行的Python脚本的全路径 是 'd:\tmp\price.py'
那么我们通常需要进入到 'd:\tmp' 目录下面,然后再执行 命令 python price.py
当然,你也可以 在命令行中使用 脚本的全路径 , 像这样 python d:\tmp\price.py
。 就可以在任意目录下面执行成功了。
查看和修改当前工作目录
当前Python程序的工作目录,可以通过 os.getcwd
获得,如下
如果要修改当前工作目录,使用 os.chdir
,如下
查看导入的模块的路径
要知道导入的模块 对应的 代码文件的路径,可以使用模块的 __file__
属性。
如下所示
>>> import selenium
>>> selenium.__file__
'C:\\Python36\\lib\\site-packages\\selenium\\__init__.py'
>>>
查看当前正在执行的代码文件的路径
有时候,我们需要得到 当前执行的代码文件 的 全路径。
这时候,我们可以 使用 os.path.realpath(__file__)
如下所示
import os
# 当前代码文件路径
current_script_path = os.path.realpath( __file__ )
print(current_script_path)
# 代码文件所在目录路径
print(os.path.dirname(current_script_path))
查看当前运行的python解释器的路径
有时候,我们需要得到 当前运行的python解释器的路径。
比如,我们需要使用当前的python解释器再运行 另外一个脚本程序
这时候,我们可以 使用 sys.executable
得到当前运行的python解释器的路径。
如下所示
import os,sys
pid_or_handle1 = os.spawnl(
os.P_NOWAIT,
sys.executable,
sys.executable,
"otherscript.py",
'param1',
'param2')
判断一个对象是否可以执行
hasattr函数可以用来判断变量对应的对象是否是可执行的。
返回值为True就是可执行的。
如下所示
字符串IP地址转换为 整数IP地址
我们做性能测试时,有时需要让网卡绑定很多IP地址,这时候,需要 把字符串IP地址转换为 整数IP地址。
可以这样做
import socket,struct
strIP = "192.168.0.1"
intIP = socket.ntohl(struct.unpack("I",socket.inet_aton(strIP))[0])
print(intIP)
如果反过来,需要把 整数IP转换为字符串IP,可以这样
import socket,struct
intIP = 3232235521
strIP = socket.inet_ntoa(struct.pack('I',socket.htonl(intIP)))
print(strIP)
提示ModuleNotFoundError
有的朋友明明已经安装了某个库,在Pycharm中编辑代码,导入库时,却有红色波浪线,提示
运行也会报错,类似如下
c:\untitled\venv\Scripts\python.exe C:/untitled/venv/first.py
Traceback (most recent call last):
File "C:/untitled/venv/first.py", line 1, in <module>
from PySide2.QtWidgets import QApplication, QMessageBox
ModuleNotFoundError: No module named 'PySide2'
那是因为你们用Pycharm创建项目的时候,使用的解释器环境是新建的venv环境。
而你们执行pip安装的库,安装到了基础解释器环境(非venv)下面。
两种解决方法:
- 第一种:修改Pycharm使用基础解释器环境
- 第二种:执行venv环境里面的pip,安装这个库