Python input+Pyc

交互

  • Python3.x
    • input() 函数接受一个标准输入数据,返回为 string 类型。
    • python3raw_input()input() 进行了整合,去除了 raw_input( ),仅保留了input( )函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。
  • Python2.x
    • input() 相等于 eval(raw_input(prompt)) ,用来获取控制台的输入。
    • raw_input() 将所有输入作为字符串看待,返回字符串类型。而 input() 在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型( int, float )。
    • input()raw_input() 这两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError 。

pyc/pyo

pyc文件

文件差异

  • *.py:源码文件,由Python程序解释。
  • *.pyc:源码经编译后生成的二进制字节码(Bytecode)文件。它们通常在导入文件时生成。
  • *.pyo:优化编译后的程序,也是二进制字节码文件。
  • .pyo文件也是优化编译后的程序(相比于.pyc文件更小),也可以提高加载速度。对于嵌入式系统,它可将所需模块编译成.pyo文件以减少容量。
  • 注意:不同版本编译后的pyc文件是不同的,比如3.4编译的pyc文件在3.3版本的python是无法执行的。

python解释器运行步骤:

  1. 源码转换成字节码(二进制)
  2. 字节码转换成机器码

计算机怎么运行py脚本

  • 首先,将源代码翻译为PyCodeObject对象(这就是字节码),并将其写入内存当中(方便CPU读取,起到加速程序运行的作用);
  • 然后,从上述内存空间中读取指令并执行;
  • 最后,程序结束后,根据命令行调用情况(即运行程序的方式)决定是否将PyCodeObject写回硬盘当中(也就是直接复制到.pyc或.pyo文件中);
  • ,再次执行该脚本,则先检查本地是否有上述字节码文件。有则执行,否则重复上述步骤。

总结:模块在每次导入前总会检查其字节码文件的修改时间是否与自身的一致。若是则直接从该字节码文件读取内容,否则源模块重新导入,并在最后生成同名文件覆盖当前已有的字节码,从而完成内容的更新(详见import.py)。这样,就避免了修改源代码后与本地字节码文件产生冲突。

生成pyc/pyo

单个生成pyc文件

  • 命令行方式:
    python -m py_compile test.py #pyc
    python -O -m py_compile test.py #pyc+pyo
    python -OO -m py_compile test.py #pyc+pyo:会进一步移除-O文档字符串
    # or 
    python -m compileall test.py #pyc
    python -O -m compileall test.py #pyc+pyo
    python -OO -m compileall test.py #pyc+pyo:会进一步移除-O文档字符串
    
  • 脚本方式:
    import py_compile
    if __name__=='__main__':
    py_compile.compile('test.py')  #pyc
    
    • 其下的py_compile.compile(file[, cfile[, dfile[, doraise]]])可将.py文件编译生成.pyc文件(默认)。

批量生成pyc文件

  • 命令行方式
    python -m py_compile ./
    # or
    python -m compileall ./
    
  • 脚本生成
    import compileall
    if __name__=='__main__':
            compileall.compile_dir('./')
    

反编译

克隆反编译工具:

  • git clone https://github.com/rocky/python-uncompyle6.git
    运行
  • uncompyle6 -o . ~/*.pyc
  • 说明:uncompyle6 在文件python-uncompyle6/bin 目录下

即在当前目录下生成原始文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值