python 如何定义像 len 一样的语言级的全局函数呢?
我说的是,定义完之后不用 import 也能直接使用的函数。
那么,先来看看 len 函数是定义在哪里的。
呃……我也忘记我是怎么知道 len 函数是在 __builtins__ 里的了,反正我就是知道了嘛。
好的,既然知道全局函数是定义在 __builtins__ 里的,那我们试着往里面塞一个自定义
函数看看行不行,马上就要成功了,想想就激动,这时候需要冷静。。。
居然白高兴一场。。。-_-||| 提示__builtins__不能赋值新的元素。
但是,程序员的坚毅品质告诉我不能放弃。于是,经过N久的努力,我发现确实还是不行。
好了,不扯淡了,领导来了,要工作了,我得赶快结束这篇文章。方法还是有的。
删除python安装目录lib下所有的pyc和pyo文件,双击python.exe启动命令行,啥都别做,
关闭它,把lib下此时生成的pyc文件列举出来,稍微调试下会发现site模块是最后生成
pyc文件的,也就是说,python启动初始化时,site模块是最后被调用的。
让我们在python启动完毕前做点什么吧。
是的,也许你已经想到了,在site.py文件最后加上一些自己的代码,或者做得干净点,
在site.py文件末尾import一个自定义模块,在这个自定义模块里写咱的全局函数吧。
在Python启动完毕前__builtins__是可以被赋值的,别问我是怎么知道的,我就是知道。
好的,整理一下思路,在python启动完毕前,会自动import自定义的myglobalmodule模块,
在myglobalmodule模块中定义全局函数,然后在项目的其它模块中无需再导入myglobalmodule
即可直接使用自定义的全局函数了,当然,全局常量、全局变量都是可以的。
这样定义的全局函数和python内置的全局函数(如len函数)在使用上没有区别。
以上用到的思路是很有用的,稍微扩展就可以做很多事情,
例如,双击 python.exe 自动执行项目代码,无需命令行手动启动。
我说的是,定义完之后不用 import 也能直接使用的函数。
那么,先来看看 len 函数是定义在哪里的。
呃……我也忘记我是怎么知道 len 函数是在 __builtins__ 里的了,反正我就是知道了嘛。
好的,既然知道全局函数是定义在 __builtins__ 里的,那我们试着往里面塞一个自定义
函数看看行不行,马上就要成功了,想想就激动,这时候需要冷静。。。
居然白高兴一场。。。-_-||| 提示__builtins__不能赋值新的元素。
但是,程序员的坚毅品质告诉我不能放弃。于是,经过N久的努力,我发现确实还是不行。
好了,不扯淡了,领导来了,要工作了,我得赶快结束这篇文章。方法还是有的。
删除python安装目录lib下所有的pyc和pyo文件,双击python.exe启动命令行,啥都别做,
关闭它,把lib下此时生成的pyc文件列举出来,稍微调试下会发现site模块是最后生成
pyc文件的,也就是说,python启动初始化时,site模块是最后被调用的。
让我们在python启动完毕前做点什么吧。
是的,也许你已经想到了,在site.py文件最后加上一些自己的代码,或者做得干净点,
在site.py文件末尾import一个自定义模块,在这个自定义模块里写咱的全局函数吧。
在Python启动完毕前__builtins__是可以被赋值的,别问我是怎么知道的,我就是知道。
好的,整理一下思路,在python启动完毕前,会自动import自定义的myglobalmodule模块,
在myglobalmodule模块中定义全局函数,然后在项目的其它模块中无需再导入myglobalmodule
即可直接使用自定义的全局函数了,当然,全局常量、全局变量都是可以的。
这样定义的全局函数和python内置的全局函数(如len函数)在使用上没有区别。
以上用到的思路是很有用的,稍微扩展就可以做很多事情,
例如,双击 python.exe 自动执行项目代码,无需命令行手动启动。
就到这里吧,不写了,我要去搬砖了,工头又催了……
.