【python】标准库(第二讲)

简介: 在 Python 被安装的时候,就有不少模块也随着安装到本地的计算机上了。这些东西就如同“能源”、“电力”一样,让 Python 拥有了无限生机,能够非常轻而易举地免费使用很多模块。所以,称之为“自带电池”。它们被称为“标准库”。...

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

1. sys

1.1 sys.argv

1.2 sys.arg 在 Python 中的作用

1.3 sys.exit()

1.4 sys.path

1.5 sys.stdin, sys.stdout, sys.stderr

2. copy

👑👑👑结束语👑👑👑


Python 标准库内容非常多,有人专门为此写过一本书。在我写的这几篇文章中,我不会将标准库进行完整的详细介绍,但是,我根据自己的理解和喜好,选几个呈现出来,一来显示标准库之强大功能,二来演示如何理解和使用标准库。

1. sys

这是一个跟 Python 解释器关系密切的标准库,上一节中我们使用过 sys.path.append() 。上篇文章链接在此:【python】标准库(第一讲)

>>> import sys
>>> print sys.__doc__

显示了 sys 的基本文档,看第一句话,概括了本模块的基本特点。

This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.

在诸多 sys 函数和变量中,选择常用的(应该说是我觉得常用的)来说明。

1.1 sys.argv

sys.argv 是变量,专门用来向 Python 解释器传递参数,所以名曰“命令行参数”。

先解释什么是命令行参数。

$ Python --version
Python 2.7.6

image.gif

这里的 --version 就是命令行参数。如果你使用 Python --help 可以看到更多:

$ Python --help
usage: Python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser; also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
-h : print this help message and exit (also --help)
-i : inspect interactively after running script; forces a prompt even
    if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-m mod : run library module as a script (terminates option list)
-O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO : remove doc-strings in addition to the -O optimizations
-R : use a pseudo-random salt to make hash() values of various types be
    unpredictable between separate invocations of the interpreter, as
    a defense against denial-of-service attacks

image.gif

只选择了部分内容摆在这里。所看到的如 -B, -h 之流,都是参数,比如 Python -h ,其功能同上。那么 -h也是命令行参数。

1.2 sys.arg 在 Python 中的作用

通过它可以向解释器传递命令行参数。比如:

#!/usr/bin/env Python
# coding=utf-8
import sys
print "The file name: ", sys.argv[0]
print "The number of argument", len(sys.argv)
print "The argument is: ", str(sys.argv)

将上述代码保存,文件名是 22101.py(这名称取的,多么数字化)。然后如此做:

$ python 22101.py
The file name: 22101.py
The number of argument 1
The argument is: ['22101.py']

将结果和前面的代码做个对照。

$ Python 22101.py 中,“22101.py”是要运行的文件名,同时也是命令行参数,是前面的 Python 这个指令的参数。其地位与 Python -h 中的参数 -h 是等同的。

sys.argv[0] 是第一个参数,就是上面提到的 22101.py ,即文件名。

如果我们这样来试试,看看结果:

$ python 22101.py beginner master www.itdiffer.com
The file name: 22101.py
The number of argument 4
The argument is: ['22101.py', 'beginner', 'master', 'www.itdiffer.com']

如果在这里,用 sys.arg[1] 得到的就是 beginner ,依次类推。

1.3 sys.exit()

这是一个方法,意思是退出当前的程序。

Help on built-in function exit in module sys:
exit(...)
    exit([status])
    Exit the interpreter by raising SystemExit(status).
    If the status is omitted or None, it defaults to zero (i.e., success).
    If the status is an integer, it will be used as the system exit status.
    If it is another kind of object, it will be printed and the system
    exit status will be one (i.e., failure)

从文档信息中可知,如果用 sys.exit() 退出程序,会返回 SystemExit 异常。这里先告知大家,还有另外一退出方式,是 os._exit() ,这两个有所区别。后者会在后面介绍。

#!/usr/bin/env Python
# coding=utf-8
import sys
for i in range(10):
    if i == 5:
        sys.exit()
    else:
        print i

这段程序的运行结果就是:

$ python 22102.py
0
1
2
3
4

image.gif

需要提醒大家注意的是,在函数中,用到 return,这个的含义是终止当前的函数,并返回相应值(如果有,如果没有就是 None)。但是 sys.exit() 的含义是退出当前程序,并发起 SystemExit 异常。这就是两者的区别了。

如果使用 sys.exit(0) 表示正常退出。如果你们要测试,需要在某个地方退出的时候有一个有意义的提示,可以用 sys.exit("I wet out at here.") ,那么字符串信息就被打印出来。

1.4 sys.path

sys.path 已经不陌生了,前面用过。它可以查找模块所在的目录,以列表的形式显示出来。如果用 append() 方法,就能够向这个列表增加新的模块目录。如前所演示。不在赘述。不理解的兄弟们可以往前复习。我前面的文章中已经写过啦。

1.5 sys.stdin, sys.stdout, sys.stderr

这三个放到一起,因为他们的变量都是类文件流对象,分别表示标准 UNIX 概念中的标准输入、标准输出和标准错误。与 Python 功能对照,sys.stdin 获得输入(用 raw_input() 输入的通过它获得,Python3.x 中是 impu t()),sys.stdout 负责输出了。

流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。程序在任何时候都可以使用它们。一般来讲,stdin(输入)并不一定来自键盘,stdout(输出)也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。

还记得 print() 吧,在这个学习过程中,用的很多。它的本质就是 sys.stdout.write(object + '\n')

>>> for i in range(3):
... print i
...
0
1
2
>>> import sys
>>> for i in range(3):
... sys.stdout.write(str(i))
...
012>>>

造成上面输出结果在表象上如此差异,原因就是那个 '\n' 的有无。

>>> for i in range(3):
... sys.stdout.write(str(i) + '\n')
...
0
1
2

从这看出,两者是完全等效的。如果仅仅止于此,意义不大。关键是通过 sys.stdout 能够做到将输出内容从“控 制台”转到“文件”,称之为重定向。这样也许控制台看不到(很多时候这个不重要),但是文件中已经有了输出内容。比如:

>>> f = open("stdout.md", "w")
>>> sys.stdout = f
>>> print "Learn Python: From Beginner to Master"
>>> f.close()

sys.stdout = f 之后,就意味着将输出目的地转到了打开(建立)的文件中,如果使用 print(),即将内容输出到这个文件中,在控制台并无显现。

打开文件看看便知:

$ cat stdout.md
Learn Python: From Beginner to Master

image.gif

这是标准输出。另外两个,输入和错误,也类似。大家可以自行测试。

关于对文件的操作,虽然前面这这里都涉及到一些。但是,远远不足,后面我会专门讲授对某些特殊但常用的文件读写操作。兄弟们 别急哈,订阅我的专栏是最保险的嘿嘿嘿。

2. copy

>>> import copy
>>> copy.__all__
['Error', 'copy', 'deepcopy']

这个模块中常用的就是 copy 和 deepcopy。

为了具体说明,看这样一个例子:

#!/usr/bin/env Python
# coding=utf-8
import copy
class MyCopy(object):
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return str(self.value)
foo = MyCopy(7)
a = ["foo", foo]
b = a[:]
c = list(a)
d = copy.copy(a)
e = copy.deepcopy(a)
a.append("abc")
foo.value = 17
print "original: %r\n slice: %r\n list(): %r\n copy(): %r\n deepcopy(): %r\n" % (a,b,c,d,e)

保存并运行:

$ python 22103.py
original: ['foo', 17, 'abc']
slice: ['foo', 17]
list(): ['foo', 17]
copy(): ['foo', 17]
deepcopy(): ['foo', 7]

大家可以对照结果和程序,就能理解各种拷贝的实现方法和含义了。

👑👑👑结束语👑👑👑

image.gif

目录
相关文章
|
3天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
6天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
23 0
|
5天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
24 7
|
21天前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
5天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
16 3
|
8天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
27 5
|
7天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
19 1
|
16天前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
30 3
|
5天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
25 0
|
30天前
|
Shell Python
Python 的 os 库的应用实例
Python 的 os 库的应用实例