在 python 官网下载 Gzipped source tar ball, 解压缩后, 会发现 Lib/os.py 文件这行代码
创新互联公司专注于长安企业网站建设,响应式网站,商城网站建设。长安网站建设公司,为长安等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
from posix import *
可是没有文件叫 posix.py 啊, 到底在那 ? 其实 posix module 是 builtin 的其中一分子,如下示范:
import sys
print sys.builtin_module_names
(*__builtin__*, *__main__*, *_ast*, *_codecs*, *_sre*, *_symtable*, *_warnings*, *_weakref*, *errno*, *exceptions*, *gc*, *imp*, *marshal*, *posix*, *pwd*, *signal*, *sys*, *thread*, *zipimport*)
所以要去 Modules 目录查找 c 代码, 你会看见 posixmodule.c, 打开它看见这行代码:
{"listdir", posix_listdir, METH_VARARGS, posix_listdir__doc__},
再寻找上面所得到的 posix_listdir method, 可以找到 listdir 源代码:
static PyObject *
posix_listdir(PyObject *self, PyObject *args)
{
/* XXX Should redo this putting the (now four) versions of opendir
in separate files instead of having them all here... */
#if defined(MS_WINDOWS) !defined(HAVE_OPENDIR)
PyObject *d, *v;
HANDLE hFindFile;
BOOL result;
它是内置函数。build-in,应该是C语言的。用的应该是 c的library
在python2.73.源码中
有这样一句。pymath.h:extern double round(double);
在pymath.c中定义如下:
#ifndef HAVE_ROUND
double
round(double x)
{
double absx, y;
absx = fabs(x);
y = floor(absx);
if (absx - y = 0.5)
y += 1.0;
return copysign(y, x);
}
众所周知,Python内建了许多函数模块,并且我们可能还会安装许多第三方模块等等。
下面以getpass为例查看其源代码。
1.help(getpass)
输入该命令找到file路径,并且可以查看其其提供的功能。
2.利用getpass.__file__查看位置
最后找到该文件,用记事本或其他编辑器打开即可。
3.PyCharm编辑器
在该类或方法上按住“ctr+鼠标左键”可以快速查看源代码。
4.dir(对象名)
该方法可以快速查看有哪些方法。
想要查看每个功能的解释,用help(type(对象名))
python学习网,大量的免费python视频教程,欢迎在线学习!
pip install ipython
ipython
一般来说这样就能看到源代码了,不过numpy好像比较特殊,可以参考如下方法:
安装pipenv,
用pipenv打开numpy源码
$ pipenv --three
$ python3.6 -c "from pathlib import Path;fn='Pipfile';Path(fn).write_text(Path(fn).read_text().replace('pypi.org', 'mirrors.aliyun.com/pypi'))"
$ pipenv shell
$ pipenv install numpy
$ pipenv open numpy
python 所有版本的源代码可以在这里下载到:
python没有像matlab那样的函数可以直接查看某个函数的源代码,只有去下载整个源代码查看了,不过找起来应该也不难,另外你也可以写一个小程序来查看对应函数的源代码。
Python的函数调用方式是通过import来调用的对应的py文件。
库函数有内建函数build_in(会写python的时候已经可以不用看了,不会写的时候看也看不懂),和通过pip直接下载或者github上下载再安装的函数。本质上都是py文件。后者有时候由于环境的不同需要自行修改(这种情况较少),一般在安装路径下"\Lib\site-packages"文件夹中存在。
学习库函数最好的方法是看网上官方的帮助文档,此外还可以通过python自带的dir()方法查看所有的属性和方法,或者用help()方法查看帮助文档(部分别人造的轮子不一定有)。
另外推荐使用ipython,Python创始人之一的成员编写的交互式系统。
代码:
defnot_empty(s):
returnsandlen(s。strip())0
#returnsands。strip()
#如果直接单写s。strip()那么s如果是None,会报错,因为None没有strip方法。
#如果s是None,那么Noneand任何值都是False,直接返回false
#如果s非None,那么判定s。trip()是否为空。
这样子filter能过滤到None,"",""这样的值。
分成两部分看。第一部分是对长度进行序列。相当于就是range(5)他的结果就是。01234。第二部分就是具体的排序规则。
排序规则是用nums的值进行排序,reverse没申明就是默认升序。就是用nums(0到4)的值进行排序,根据这个结果返回的一个range(5)的数组。
PEP的规定:
必须使用4个空格来表示每级缩进。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings)。
用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出函数的使用帮助。