前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 标准库之 sys & copy

Python 标准库之 sys & copy

作者头像
编程文青李狗蛋
发布2019-11-07 15:45:53
3490
发布2019-11-07 15:45:53
举报
本文字数:3091 字 阅读本文大概需要:8 分钟

写在之前

在前天的文章(标准库的自我介绍)中我们学习了什么是标准库,但是标准库的内容非常多,有人专门为标准库写过一本书,在接下来的几天我会根据我自己的理解,选几个给大家学一下,一来是为了显示一下标准库的强大,二来演示如何理解和使用标准库。

sys

sys 是常用的标准库,相信已经不陌生了,这是一个跟 Python 解释器关系密切的标准库,前面已经使用过:sys.path.append()。

>>> import sys
>>> print(sys.__doc__)
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.

Dynamic objects:

上面显示了 sys 的基本文档,第一句话概括了本模块的基本特点。在诸多的 sys 函数和属性中,我选几个常用的来说明:

1.sys.argv

sys.argv 是专门用来向 Python 解释器传递参数的,所以称之为「命令行参数」,下面先解释一下什么是命令行参数:

$ python3 --version

Python 3.6.5

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

python --help

usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...

Options and arguments (and corresponding environment variables):

-b     : issue warnings about comparing bytearray with unicode

         (-bb: issue errors)

-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

上面只是显示了一部分内容,你所看到的 -B,-h 都是参数,比如 python -h,其功能同上,所以 -h 也是命令行参数。

sys.arg 的作用就是通过它向解释器传递命令行参数,比如下面这个例子:

import sys

print('the file name:',sys.argv[0])
print('the number of argument',len(sys.argv))
print('the augument is:',str(sys.argv))

将上述代码保存,文件名是 test.py,然后做下述操作:

$ python sys_file.py
the file name: test.py
the number of argument 1
the augument is: ['test.py']

将结果与前面的代码做个对比,在 $python sys_file.py 中,sys_file.py 是要运行的文件名,同时也是命令行参数,是前面的 Python 这个指令的参数,其地位与 Python -h 中的参数 -h 是等同的。再者就是,sys.argv[0] 是第一个参数,就是上面提到的 sys_file.py,即文件名。

2.sys.exit()

这个方法的作用是退出当前程序,我们下面来看一个例子:

import sys

for i in range(10):
    if i == 5:
        sys.exit()
    else:
        print(i)

上面这段程序的运行结果如下:

0
1
2
3
4

在大多数函数中会用到 return,其含义是中止当前的函数,并向调用函数的位置返回相应值(如果没有就返回 None)。但是 sys.exit() 的含义是退出当前程序(不仅仅是退出当前函数),并发起 SystemExit 异常,这就是两者的区别。

如果使用 sys.exit(0) 表示正常退出,则需要在退出的时候有一个对人友好的提示,可以用 sys.exit(“I wet out at here.”),那么字符串信息就会被打印出来。

3.sys.path

sys.path 已经不陌生了,它可以查找模块所在的目录,以列表的形式表示出来。如果用 append() 方法,就能够向这个列表增加新的模块目录,就像前面所演示的那样,在这就不再赘述了。

copy

我们在很久以前对浅拷贝和深拷贝做了研究,这里再次提出,做到温故而知新。

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

这个模块中常用的就是 copy 和 deepcopy。为了具体说明,请看下面这个例子,这个例子和以前讨论浅拷贝和深拷贝时略有不同,请大家认真推敲结果,并且对照代码:

import copy

class Mycopy:
    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("oriangle:{0}\n  slice:{1}\n  list():{2}\n  copy():{3}\n  deepcopy():{4}\n".format(a,b,c,d,e))

把上述结果保存并且运行得到下面得结果:

oriangle:['foo', 17, 'abc']
  slice:['foo', 17]
  list():['foo', 17]
  copy():['foo', 17]
  deepcopy():['foo', 7]

仔细看上面得结果,一切尽在不言中,请大家仔细对照上面显示得结果,体会深拷贝和浅拷贝得实现方法和含义。

写在之后

我本来以为昨天的文章写出来以后会掉一波粉,我已经准备好肉疼的准备,刚刚看了一下,昨天只掉了 3 个粉,看来大多数人都还是 good boy,就喜欢和你们这些有文化的人交流,哈哈。。

如果你觉得这篇文章对你有所帮助的话,欢迎点赞支持。

The end。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档