...

Python基础必知必会答案

题目传送门

Python命令相关

使用python执行脚本

如何在命令行执行一个.py文件?

在命令行运行 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 -m

如何使用Python调用一个模块?

很多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 -c 代码,可以不进入Python交互环境执行一小段代码,如下图:

区分命令行和Python交互环境

如何区分命令行(cmd)环境和Python交互环境,执行.py文件和安装包在哪个环境?在Python交互环境如何验证一个包是否已安装?

命令行和Python交互环境的提示符不同,如下图

  • 命令行环境,使用python执行python脚本、pip安装包、pytest执行用例,或执行其他系统命令。
  • Python交互环境,用来调试运行Python代码,如import导入,声明变量,if判断,定义函数等等。

系统命令行
系统命令行

Python交互环境
Python交互环境
在交互环境中可以通过import 三方包名,看是否报错来验证这个包是否已安装,如:

>>> import selenium

不报错则说明selenium已安装

包安装相关

安装三方包

如何安装Python三方包?在命令行如何检查一个包是否已安装?

使用pip install 包名 在线安装一个包,也可以从https://pypi.org上搜索下载包的.whl离线包,使用pip install 离线包路径,来安装,(所依赖包仍需要在线安装)。
在命令行使用pip install 包名,如果显示Requirement already satisfied,则说明已安装,如下图:

也可以用pip list命令查看已安装的包,如下图

注:Windows的字符串搜索使用findstr,MacOS/Linux需要改为grep

环境变量PATH的作用

环境变量PATH的作用是什么?命令行报错pip不是可执行命令的原因是什么?如何处理?

环境变量PATH的作用是,在命令行任意一个路径下可以直接使用某个命令或工具,如pythonpippytestjavaadb等。在命令行输入python命令时会从环境变量PATH所配置的路径中逐个去找python.exe或python.cmd等可执行文件。
命令行报错pip不是可执行命令,是因为在当前PATH的所有路径中找不到pip.exe即,pip.exe所在的目录没有配置到环境变量中去。

可以使用python -m pip 来临时使用pip,或者包pip.exe所在目录python安装目录中是Scripts目录配置到环境变量PATH中去。

注:更新环境变量后需要重新打开cmd才能生效,PyCharm的命令行则需要重启才能生效(读取到最新的环境变量)。

安装包时报错处理

pip安装时如何使用豆瓣源安装,遇到以下报错,如何处理?

报错分为两个颜色,红色是出错,遇到出错时,我们先看最下一行
..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相关

PyCharm查看所使用环境和安装的包

PyCharm中如何确定使用的是虚拟环境还是本机环境?如何切换解释器?如何查看环境中安装了哪些包?

PyCharm默认新建项目时会新建虚拟环境(没有任何三方包的新环境),如下图:

你在命令行安装的包(安装到了本地环境),虚拟环境中是没有的,这时候你代码中去导入一个包会发现报错,如下图:

我可以打开终端,来查看是否使用了虚拟环境,如下图

前面有(venv)的就是虚拟环境(即没有任何包,需要重新安装)。
我们可以再PyCharm的终端使用pip list
或在设置中查看当前环境的包,点击Files->Settings如下图:

找到并点击 Project: 你的项目名下的Python Interpreter,如下图:

我们可以查看到当前环境中的包,可以通过上面的下拉框来切换解释器(即环境),也可以通过下面的加号安装所需要的包。

注:前期在新建项目时,可以点开Python解释器的折叠,直接选择本地环境来避免此问题。

PyCharm查看函数使用方法

PyCharm中如何查看所使用函数的方法定义,需要哪些参数,分别什么格式?

我们在调用一个函数(特别是别人写的)时,往往需要知道怎么使用,即需要几个、什么类型的参数,返回什么类型的结果。在PyCharm中一般我们可以鼠标移动到调用函数上可以看到函数的定义,如下图:

这个表示,calc模块的add函数,有两个参数,都需要int整数格式,返回值为int整数格式。
我们也可以按住Ctrl键,鼠标移动到函数名上,查看提示。
当需要查看函数的具体定义和处理过程时,我们可以按住Ctrl键,鼠标点击函数名,调整到该函数,来查看函数的源码,如下图:

PyCharm中错误提醒

PyCharm中有浅红色高亮和浅黄色高亮,分别是什么原因,如何查看异常的详细信息?

浅红色高亮及红色波浪线表示报错,常见的是标点、括号格式或语法错误。
浅黄色高亮一般是函数参数异常或对象无此属性或方法,如下图:

运行报错处理

代码报错,如何查看是什么异常?异常的原因说明以及报错的是哪一行?

代码报错别紧张,一般先看报错最下面一行,冒号前是异常类型,冒号后是具体原因说明,如下图:

报错的行可以从上面看到,是main.py这个文件的第3行driver = webdriver.Chrome()报的错。
稍微翻译一下这是一个selenium常规异常中的“会话不能创建异常”,会话即和浏览器的连接交互。翻译一下具体愿意为,

信息:会话不能创建:这个版本的ChromeDriver只支持86版本的Chrome,当前的浏览器版本为89.0.4389.82,使用的浏览器地址为…

从翻译的报错原因我们可以分析出是我们用的chromedriver版本太老,不支持当前的浏览器,解决方法就是重新下载对应版本的chromedriver即可。

Python数据类型相关

可变和不可变类型

Python中有哪些数据类型?哪些是可变的,哪些是不可变的?

Python中常见的数据类型有:字符串、数字(整型、浮点、布尔型)、列表、元祖、字典、集合。

  • 可变类型:列表、字典、普通集合是可变的
  • 不可变类型:字符串、数字、元祖、frozen set(不可变集合)

可变类型一般为混合容器型,如列表,字典,可以随意增加删除,可以容纳任何类型的元素。

注:不可变类型,如字符串,在修改时会创建新的变量。
为什么要区分可变和不可变呢,因为有一种东西叫Hash(即散列表),它是通过变量来计算得出存储地址的,这就要求变量不能修改,不然就找不到它的存储地址了。
因此不可变类型,字符串,数字,元祖等被称为可Hash的。Python中的字典和集合就是基于Hash类型的,字典的key只能是不可变类型。
哈希类型(字典、集合)因为是计算一下就知道存储地址,因此无论有多少数据,查询一个数据只需要一下操作,查询效率很高。

字符串是否数字判断

如何判断一个字符串是不是数字?

使用字符串的is_number()或is_digit()方法来判断字符串是否数字,如
‘123’.is_number()
返回为True则表示是数字

字符串格式化

将name = ‘LiLy‘ age=18 gender=’女’,将name、age、gender变量实际值填入字符“我是Kevin,年龄21,性别male”

这是一个字符串格式化操作,我们通常需要将一批变量的值填入一个字符串中,拼接是最low的方式,一般我们先在字符串中放入占位符,然后将变量依次填入,4中方法如下图:

字符串列表相互转换

将一个字符串“I am the whole world”按空格分隔,列表反转,重新按空格拼接成“world whole the am I”

字符串分隔成列表(split),列表按分隔符组装层字符串(join)是最常用的两种方式,答案如下图:

也可以一行代码实现,如下图:

注:这里使用了reversed(),这个全局函数返回一个反转后的新列表,而列表的reverse()方法,是对原列表进行反转,返回是None,我们使用join要求参数时一个列表,所以需要使用reversed()。

字典/列表遍历及组装

将一个字典{‘Kevin’: 21, ‘Lily’: 19, ‘John’: 20}改为列表[{‘name’: ‘Kevin’, ‘age’: 21}, {‘name’: ‘Lily, ‘age’: 19}, {‘name’: ‘John, ‘age’: 20}]形式

列表、字典的遍历及重新组装是非常常用的操作,代码如下图

也可以使用推导式快速得出结果,如下图:

注:遍历字典的key, value时,需要遍历字典的.items()方法而不是字典本身。

列表与集合

列表和集合的区别是什么?在大数据量查询时哪个更高效?

列表有点像数组,在内存中连续存储,使用索引查找非常方便,通过值查找则要从头开始逐个对比,因此列表约长,这个对比查找过程越慢。
集合基于Hash类型,元素存储的地址是计算出来的,无论数据量多大,查找一个元素始终只需要一步操作。因此在大数据量查找时集合效率更高。

posted @ 2021-07-14 08:13  韩志超  阅读(403)  评论(0编辑  收藏  举报