1.r=compile(s,"<string>","exec")

  compile()将字符串编译成python代码

2.exec(r)  执行python代码

3.eval("8*6") eval("")里面只能执行表达式,执行eval()会有返回值,exec执行完无返回值.

4.filter和map

 filter(函数,可迭代对象),返回一个符合条件的元素集合.对可迭代对象进行筛选.

 map(函数,可迭代对象)相当于for循环,对每个元素进行处理并返回新的处理结果.

5.with open('config','r') as f:

   for line in f: 这样是一行一行加载操作比f.readlines()一下把所有文件全部加载到内存效率高


6.值为false的数据

  0 ,None, " ", [], {}, ()

7.all() 和 any()

 这两个函数接收一个可以被迭代的对象,all()要求对象中所有的数据为true才返回true,any()要求

 对象中至少有一个返回true的数据才返回true

8.bin() 接收10进制转换成二进制

 oct() 十进制》八进制

 hex() 十进制》十六进制

9.utf-8编码一个汉字是3个字节,GBK编码一个汉字是2个字节.一个字节是8位

 n = bytes("汉字",encoding="utf-8")

 把汉字转换成字节类型,n的结果跟encoding设置的不同而不同

 str1 = str(n,encoding="utf-8")

10.chr()  把ASCII码表中的数字转成对应字符

  ord()  把字符转换成对应数字

11.file.open()的时候获取里面的内容都是字符串类型

12.python p1.py 执行流程

 1.file.open读取文件内容为string加载到内存

 2.python编译器把字符串编译成特殊代码

 3.执行代码


13.s="print(123)"

  r = compile(s,"<string>","exec")          python编译字符串成python代码

  exec(r) exec()也可以接收执行字符串,无返回值   python执行编译后的代码字符串

  s="8*7"

  ret=eval(s)                python运算表达式并且返回结果赋值给ret


14.eval的局限性和exec的局限性

 str ="a,b=10,20\nprint(random.randrange(a,b))"

 r = compile(str,"<string>","exec")

 eval(str) 或者  exec(str) or exec(r)  

如果在eval中执行多条python语句,这样会出现异常.因为eval只能执行一个python表达式并且
会返回这个表达式的值,所以多条语句的情况下不适合用eval。
exec(str)或者exec(r)都可以一次正确的执行多条python语句,但是exec无返回值.