其他

都说Python执行效率不高,为什么还要学习它?

就像你买了一辆汽车,有人却说, 汽车开的比飞机慢多了,买什么汽车啊。 然而,生活中大部分的场合,用汽车比用飞机方便的多。

同样的道理通常你开发的程序(自动化工具、网站后端等),Python的执行效率完全足够了。

如果一定要比执行效率,谁都比不过 二进制机器代码, 为什么程序员 不直接写 二进制机器代码 呢?

很多时候, 更重要的是看 开发效率

Python最大的优势是 开发效率 高 。

同样的系统,用Python 开发通常比用其他语言 所需的时间 少的多。 (这是在 对语言的熟练度相同 的情况下 的对比)

通常Python 开发一个项目 10天, 其他语言或许要 15 - 30天。

开发的速度快,这有多么重要,大家都能明白。


最后我们再来看 执行效率

白月黑羽 根据 前程无忧网站 的搜索结果, python在 国内的职位需求 仅次于 java、js 、c/c++ 位列第四,超过php、c#等明星语言。 而且成长势头来看,速度超过前面3位。

运行Python程序,提示找不到Python命令

如果你运行python的时候,显示如下

c:\>python first.py
'python' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

这是因为,你安装Python解释器的时候,没有勾选 add Python to path

所以,命令行程序找不到Python.exe 在什么地方。

怎么解决这个问题呢?

如果你是Windows 操作系统,不需要重装Python, 在Windows环境变量path里面加上 Python解释器所在路径即可。

点击这里,打开windows设置


然后,如下下图所示,输入 huanj,点击 编辑系统环境变量


然后,在弹出对话框中,点击 环境变量


然后,双击系统变量栏目下面的 path 这条


然后,按照下图操作


注意:


最后,很重要,

因为刚才对环境变量的修改,对已经打开的窗口不生效!!!

所以你必须 关闭 你已经打开的命令行窗口, 重新打开一个窗口 , 再次执行python程序。

好了,大功告成。


运行Python程序,提示找不到代码文件

如果你运行python的时候,显示如下

c:\>python first.py
python: can't open file 'first.py': [Errno 2] No such file or directory

这是什么原因?

要运行一个Python脚本,通常我们需要打开命令行窗口,并 进入到该脚本所在的目录 。 这样Python解释器才能找到这个程序。

比如我们要运行的Python脚本的全路径 是 'd:\tmp\price.py'

那么我们通常需要进入到 'd:\tmp' 目录下面,然后再执行 命令 python price.py

当然,你也可以 在命令行中使用 脚本的全路径 , 像这样 python d:\tmp\price.py 。 就可以在任意目录下面执行成功了。


查看和修改当前工作目录

当前Python程序的工作目录,可以通过 os.getcwd 获得,如下

import os
curDir = os.getcwd()

如果要修改当前工作目录,使用 os.chdir,如下

import os
os.chcwd('d:\\home')

查看导入的模块的路径

要知道导入的模块 对应的 代码文件的路径,可以使用模块的 __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就是可执行的。

如下所示

def obj1():
    pass

obj2 = 'ok'

hasattr(obj1,'__call__') # 返回 True
hasattr(obj2,'__call__') # 返回 False


字符串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中编辑代码,导入库时,却有红色波浪线,提示

Unresolved reference '某个库名' 

运行也会报错,类似如下

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)下面。

两种解决方法:

参考这里