白月黑羽教python_其他 | 白月黑羽教Python

都说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的时候,显示如下

c:\>python first.py

'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的时候,显示如下

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

from PySide2.QtWidgets import QApplication, QMessageBox

ModuleNotFoundError: No module named 'PySide2'

那是因为你们用Pycharm创建项目的时候,使用的解释器环境是新建的venv环境。

而你们执行pip安装的库,安装到了基础解释器环境(非venv)下面。

两种解决方法:

第一种:修改Pycharm使用基础解释器环境

第二种:执行venv环境里面的pip,安装这个库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值