python基础内置模块相关

版权声明:===========版权所有,可随意转载,欢迎互相交流=========== https://blog.csdn.net/weixin_42446330/article/details/81322421

python内置函数:compile()

描述

compile() 函数将一个字符串编译为字节代码。

语法

以下是 compile() 方法的语法:

compile(source, filename, mode[, flags[, dont_inherit]])

参数

  • source -- 字符串或者AST(Abstract Syntax Trees)对象。。
  • filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
  • mode -- 指定编译代码的种类。可以指定为 exec, eval, single。
  • flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。
  • flags和dont_inherit是用来控制编译源码时的标志

返回值

返回表达式执行结果。


source_code = \
'''
base_string = 'julyedu.com'
def test1(a,b):
    return a+b
    
def test2(c):
    x = 7
    print(c**2+x)
'''

co = compile(source_code,'test_compile.py','exec')
exec(co)
test1(2,6),test2(7)
co.co_code
co.__dir__()
test1.__code__.co_argcount
test2.__code__.co_varnames
test2.__code__.co_nlocals

输出:

['__repr__',
 '__sizeof__',
 '__eq__',
 '__subclasshook__',
 'co_cellvars',
 '__class__',
 'co_firstlineno',
 'co_consts',
 '__ge__',
 '__reduce__',
 '__reduce_ex__',
 'co_flags',
 '__getattribute__',
 'co_filename',
 'co_stacksize',
 'co_nlocals',
 '__new__',
 '__dir__',
 '__hash__',
 '__init__',
 '__format__',
 '__delattr__',
 '__doc__',
 '__ne__',
 'co_names',
 'co_freevars',
 '__str__',
 'co_lnotab',
 'co_kwonlyargcount',
 'co_name',
 'co_code',
 'co_varnames',
 '__setattr__',
 '__lt__',
 '__le__',
 '__gt__',
 'co_argcount']

内置模块二:dis模块主要是用来分析字节码的一个内置模块,经常会用到的方法是dis.dis([bytesource]),参数为一个代码块,可以得到这个代码块对应的字节码指令序列。

具体可以看这个文档: https://docs.python.org/3/library/dis.html

import dis
dis.dis(co)#反汇编module test_compile
# dis.dis(test1),dis.dis(test2)#反汇编module test_compile下的函数

输出结果:

Disassembler格式及解读

  • 第一列表示以下几个指令在py文件中的行号;
  • 第二列是该指令在指令序列co_code里的偏移量;
  • 第三列是指令opcode的名称,分为有操作数和无操作数两种,opcode在指令序列中是一个字节的整数;
  • 第四列是操作数oparg,在指令序列中占两个字节,基本都是co_consts或者co_names的下标;
  • 第五列带括号的是操作数说明。

记录几个jupyter notebook常用的指令:

前面加!表示调用系统本身命令,%表示调用jupyter内部魔法命令

%lsmagic  可以看到所有的魔法命令

%quickref  表示所有魔法命令的解释文档

%config ZMQInteractiveShell.ast_node_interactivity='all'   表示一个可以修改内核选项 ast_note_interactivity,使得 Jupyter 对独占一行的所有变量或者语句都自动显示,这样你就可以马上看到多个语句的运行结果了。

%%writefile 直接写入文件

%run 直接脚本运行py文件

更多jupyter notebook的使用,我还收藏了:https://blog.csdn.net/m0_37870649/article/details/79453005

这位仁兄写的比较全,可以看看。

帮助的使用
#dir,help,?,??,shift+tab,tab,相关Python的小抄

还有可以将shift+tab 光标在函数上就可以显示。

在写一个可以观察运行中内存占用的代码:

lesson = ['2018','2019','2020']
import sys
sys.getrefcount(lesson)
import psutil
def rss():
    m = psutil.Process().memory_info()
    print(m.rss>>20,'MB')     #>>表示输出小数位
    
rss()
x = list(range(20000000))
rss()
del x
rss()

输出结果如下:

垃圾回收的内置函数:gc

import gc
gc.get_count()#看看当前的垃圾的计数

gc.get_threshold()#查看针对每代自动执行垃圾回收的阈值,可以使用gc.set_threshold重新设置阈值
# 当没有回收的0代对象个数超过700,即开始0级垃圾回收,
# 当0代垃圾回收超过10次即开始1级垃圾回收,1级垃圾回收清除包括0级垃圾,
# 当1代垃圾回收超过10次,即开始2级垃圾回收,2级垃圾回收清除包括0级,1级垃圾


#垃圾回收机制python默认开启的,gc.disabled可关闭垃圾回收机制
#而使用gc.collect([generation])显式手动进行垃圾回收
gc.collect(2)#回收2级垃圾,也可以指定0,1

输出结果;

格式化访问的两种形势:

格式化访问一:
str3='http://{}.com'
companyName='julyedu'
str3.format(companyName)
格式化访问二:
_='Python 3'
str4=f"fstring is new feature of {_}"
str4

第二种是python3的新特性。

输出结果:

猜你喜欢

转载自blog.csdn.net/weixin_42446330/article/details/81322421