python标准库sys_Python 标准库之 sys & copy

u=1008511612,534206447&fm=173&app=25&f=JPEG?w=640&h=360&s=328CB044CCA19B261110E443030030DA

本文字数:3091 字

阅读本文大概需要:8 分钟

写在之前

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

sys

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

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

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

1.sys.argv

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

$ python3 --versionPython 3.6.5

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

python --helpusage: 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 evenif 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, asa defense against denial-of-service attacks

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

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

import sysprint('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.pythe file name: test.pythe number of argument 1the 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 sysfor i in range(10):if i == 5:sys.exit()else:print(i)

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

01234

在大多数函数中会用到 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 copyclass Mycopy:def __init__(self,value):self.value = valuedef __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 = 17print("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。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值