在命令行运行 python 文件路径/文件名,如
如果文件就在当前路径下,就可以直接python hello.py
注:MacOS的同学由于系统中默认为python2,终端中请使用python3 路径/脚本名
注:命令行使用python命令实际上是从环境变量PATH所配置的目录中逐个选择python.exe(MacOS/Linux为python)来解释执行路径指定的脚本,在某些情况如使用Jenkins/crontab执行时有可能没有权限读取环境变量PATH的值,导致找不到python,可以使用python.exe的绝对路径执行,如
C:\Users\Secoo\AppData\Local\Programs\Python\Python37-32\python.exe D:\hello.py
很多python的三方模块在安装时会在python安装路径的Scripts目录下生产可执行文件,如pytest、pip、HttpRunner的hrun等。一般来说,Scripts目录也需要配置到环境变量PATH中去,这样就可以直接在命令行中使用pytest、pip等命令。
当命令行提升pytest、pip等不是可执行命令时(即Scripts没有配置环境变量),我们也可以使用python -m 调用指定模块,如
python -m pytest 用例路径 python -m pip install 要安装的三方包
注:同样实用与MacOS,只是路径不是Scripts,pip显示不是可执行命令时,可以临时使用python3 -m pip 来安装包
使用python -c 代码可以不进入Python交互环境执行一小段代码,如下图:
命令行和Python交互环境的提示符不同,如下图
命令行环境,使用python执行python脚本、pip安装包、pytest执行用例,或执行其他系统命令。
Python交互环境,用来调试运行Python代码,如import导入,声明变量,if判断,定义函数等等,在交互环境中可以通过import 三方包名,看是否报错来验证这个包是否已安装,如
>>> import selenium
不报错则说明selenium已安装
使用pip install 包名 在线安装一个包,也可以从https://pypi.org上搜索下载包的.whl离线包,使用pip install 离线包路径来安装,(所依赖包仍需要在线安装)。
在命令行使用pip install 包名,如果显示Requirement already satisfied,则说明已安装,如下图
也可以用pip list命令查看已安装的包,如下图
注:Windows的字符串搜索使用findstr,MacOS/Linux需要改为grep
环境变量PATH的作用是,在命令行任意一个路径下可以直接使用某个命令或工具,如python、pip、pytest、java、adb等。在命令行输入python命令时会从环境变量PATH所配置的路径中逐个去找python.exe或python.cmd等可执行文件。
命令行报错pip不是可执行命令,是因为在当前PATH的所有路径中找不到pip.exe即,pip.exe所在的目录没有配置到环境变量中去。
可以使用python -m pip
来临时使用pip,或者包pip.exe所在目录python安装目录中是Scripts目录配置到环境变量PATH中去。
注:更新环境变量后需要重新打开cmd才能生效,PyCharm的命令行则需要重启才能生效(读取到最新的环境变量)。
报错分为两个颜色,红色是出错,遇到出错时,我们先看最下一行
..ReadTimeoutError: HTTPSconnectionPool(….)
冒号前是异常类型,冒号后是具体说明,稍微翻译一下可以知道,这个是一个“读取超时错误”,原因是HTTP连接池连接服务器files.pythonhosted.org,读取超时。由于在线安装时,三方包是从国外网站上下载的,当三方包较大及网络不好时很容易发生这种情况。
解决方法是,重试或者使用国内源来安装(源就是一个镜像网站,里面也有各种包)。
Pip安装时使用-i指定使用的源,如使用豆瓣源安装就会快很多。
pip install selenium -i https://pypi.douban.com/simple/
黄色的为警告,提示当前pip不是最新版本,可以忽略,也可以使用提示的python -m pip install –upgrade pip
命令进行升级。
PyCharm默认新建项目时会新建虚拟环境(没有任何三方包的新环境),如下图
你再命令行安装的包(安装到了本地环境),虚拟环境中是没有的,这时候你代码中去导入一个包会发现报错,如下图
我可以打开终端,来查看是否使用了虚拟环境,如下图
前面有(venv)的就是虚拟环境(即没有任何包,需要重新安装)。
我们可以再PyCharm的终端使用pip list或在设置中查看当前环境的包,点击Files->Settings如下图
找到并点击 Project: 你的项目名下的Python Interpreter,如下图
我们可以查看到当前环境中的包,可以通过上面的下拉框来切换解释器(即环境),也可以通过下面的加号安装所需要的包。
注:前期在新建项目时,可以点开Python解释器的折叠,直接选择本地环境来避免此问题。
我们在调用一个函数(特别是别人写的)时,往往需要知道怎么使用,即需要几个、什么类型的参数,返回什么类型的结果。在PyCharm中一般我们可以鼠标移动到调用函数上可以看到函数的定义,如下图:
这个表示,calc模块的add函数,有两个参数,都需要int整数格式,返回值为int整数格式。
我们也可以按住Ctrl键,鼠标移动到函数名上,查看提示。
当需要查看函数的具体定义和处理过程时,我们可以按住Ctrl键,鼠标点击函数名,调整到该函数,来查看函数的源码,如下图
浅红色高亮及红色波浪线表示报错,常见的是标点、括号格式或语法错误。
浅黄色高亮一般是函数参数异常或对象无此属性或方法,如下图。
代码报错别紧张,一般先看报错最下面一行,冒号前是异常类型,冒号后是具体原因说明。
报错的行可以从上面看到,是main.py这个文件的第3行driver = webdriver.Chrome()报的错。
稍微翻译一下这是一个selenium常规异常中的“会话不能创建异常”,会话即和浏览器的连接交互。翻译一下具体愿意为,
信息:会话不能创建:这个版本的ChromeDriver只支持86版本的Chrome,当前的浏览器版本为89.0.4389.82,使用的浏览器地址为…
从翻译的报错原因我们可以分析出是我们用的chromedriver版本太老,不支持当前的浏览器,解决方法就是重新下载对应版本的chromedriver即可。
如何判断一个字符串是不是数字?
Python中常见的数据类型有:字符串、数字(整型、浮点、布尔型)、列表、元祖、字典、集合。
可变类型:列表、字典、普通集合是可变的
不可变类型:字符串、数字、元祖、frozen set(不可变集合)
可变类型一般为混合容器型,如列表,字典,可以随意增加删除,可以容纳任何类型的元素。
使用字符串的is_number()或is_digit()方法来判断字符串是否数字,如
‘123’.is_number()
返回为True则表示是数字
注:不可变类型,如字符串,在修改时会创建新的变量。
为什么要区分可变和不可变呢,因为有一种东西叫Hash(即散列表),它是通过变量来计算得出存储地址的,这就要求变量不能修改,不然就找不到它的存储地址了。
因此不可变类型,字符串,数字,元祖等被称为可Hash的。Python中的字典和集合就是基于Hash类型的,字典的key只能是不可变类型。
哈希类型(字典、集合)因为是计算一下就知道存储地址,因此无论有多少数据,查询一个数据只需要一下操作,查询效率很高。
这是一个字符串格式化操作,我们通常需要将一批变量的值填入一个字符串中,拼接是最low的方式,一般我们先在字符串中放入占位符,然后将变量依次填入,4中方法如下图
字符串分隔成列表(split),列表按分隔符组装层字符串(join)是最常用的两种方式,答案如下图。
也可以一行代码实现
注:这里使用了reversed(),这个全局函数返回一个反转后的新列表,而列表的reverse()方法,是对原列表进行反转,返回是None,我们使用join要求参数时一个列表,所以需要使用reversed()。
列表、字典的遍历及重新组装是非常常用的操作,代码如下图
也可以使用推导式快速得出结果
注:遍历字典的key, value时,需要遍历字典的.items()方法而不是字典本身。
列表有点像数组,在内存中连续存储,使用索引查找非常方便,通过值查找则要从头开始逐个对比,因此列表约长,这个对比查找过程越慢。
集合基于Hash类型,元素存储的地址是计算出来的,无论数据量多大,查找一个元素始终只需要一步操作。因此在大数据量查找时集合效率更高。
Python中的列表和字典是容器类型,当一个列表中存入了一个子列表或字典时,这时实际存的是该子列表的引用(即地址)。
浅拷贝(copy)只拷贝第一层,其中的子列表等集合类型,只拷贝引用,即还是同一个子列表对象。
深拷贝(deepcopy)则会对所有层的子容器类型的值进行同步拷贝,生成新的对象,如下图