Skip to content

Latest commit

 

History

History
222 lines (144 loc) · 4.87 KB

204-532714-跨模块调用函数.sy.md

File metadata and controls

222 lines (144 loc) · 4.87 KB
show version enable_checker
step
1.0
true

跨模块调用函数

回忆

  • 上次我们研究了跨模块引用变量
    • 在一个py文件里面定义的变量
    • 变量一定不能是函数内部的局部变量
    • 然后我们就可以在python中引入这个变量了
  • 但是这个变量来自于什么呢?
    • 有的来自于c编译好的内建模块
    • 还有的来自于py文件
    • 这些py文件有一些来自于同一个地方
  • 我们去这个地方看看么?

图片描述

找到位置

  • 先进入/usr/lib/python3.8
    • 然后ls观察

图片描述

  • 找到很多熟悉的模块
    • this.py
    • opcode.py
    • pickle.py
    • random.py
    • os.py

os.py

vi os.py
  • 先看看os.py
    • os.py 是只读的

图片描述

  • 上来之后
  • 首先有个模块说明文档
  • 然后引入了一些其他的模块
  • 函数怎么定义的呢?

makedirs

图片描述

  • 首先用三引号描述了函数
  • 然后定义一些操作
  • 那然后我就能用了么?

试试

图片描述

  • 这是一个列表
  • 能找到makedirs函数么?

尝试运行

  • 导入os模块
    • 尝试添加文件夹

图片描述

  • 出现了 PermissionError 权限错误
    • 刚才 os.py 也只有 读取权限

查找

  • 注意最好在用户文件夹(~)运行python3
cd ~
python3
  • 否则可能没有建立文件夹的权限

图片描述

  • 好像确实有
  • 确实也能建立一个文件夹
  • 那我可以去看看么?

查看

  • 确实可以的

图片描述

  • os里面包括很多函数
    • makedirs
    • listdir
  • 那我们的print、str之类的函数在那个模块里面呢?

builtins

图片描述

  • 这些函数太熟悉了
  • 就在builtins里面
  • 天生就有
  • 除非你del他
  • 否则就一直在
  • 那builtins到底是怎么定义的呢?

追根溯源

  • builtins是在c语言层面的

图片描述

  • 已经用c编译成可执行文件

图片描述

  • 直接就加载了
  • 突发奇想
    • random到底是怎么随机的

random.py

  • 上来之后是模块简介

图片描述

  • 查找randint

randint

图片描述

  • 好像是通过调用randrange完成的

randrange

图片描述

  • 把开始结束步长错误排除后

图片描述

  • 通过调用_randbelow函数完成的

randbelow

图片描述

  • _randbelow是一个变量
  • 是一个函数类型的变量
  • 指向_randbelow_with_getrandbits这个方法

图片描述

生成

图片描述

  • 这个是从_urandom函数来的

图片描述

  • _urandom是从os来的...

图片描述

回到os查找

图片描述

  • 找不到urandom
  • 只能去c语言源码里面找...

搜索

图片描述

  • 查到说这里面有urandom

图片描述

  • 确认了当前系统是linux之后
  • 通过访问/dev/urandom来完成的

访问

图片描述

  • 这个文件怎么来的
  • 我们这次不研究了
  • 总之python用的是
  • /dev/urandom
  • 用就完了

总结

  • 我们这次研究了跨文件模块调用函数
  • 使用了两个模块
    • os
    • random
  • 其中random还调用了os
  • os有两部分组成
    • os.py
    • 还有一些系统调用的部分
    • 是系统相关的
    • 写在c的源码中
  • 我可以自己定义一些
    • 模块
    • 变量
    • 函数么?🤔
  • 我们下次再说👋