exec是通过命令行执行,类似于print
exec和eval的区别:
1、eval有返回值,exce没有返回值
2、eval不可以执行复杂代码 会报错,但是exec可以执行复杂代码
python一些常用的内置函数及作用请见以下代码,值得一提的是eval和exec的区别,最大的一个区别是eval会返回代码运行的值,类似于函数自带了一个return功能,但是exec不会,它只管执行代码,等于是函数没有return值,默认返回了None;还有一个区别是exec可以执行复杂的代码,类似于命名函数,定义对象等,但eval不行。通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果
1 lis=[1,4,3,8,2,9,10,0] 2 print(all(lis))#判断可迭代对象里头是否存在不为真的元素,如果全为真,则显示True,如果存在不为真的元素则返回False 3 print(any(lis))#判断可迭代对象里头是否存在为真的元素,如果存在为真的元素则返回True,否则False 4 print(bin(10).replace('0b',''))#10进制转换为二进制,后面的replace是用空格取代二进制的前缀:ob 5 print(bool({}))#把一个对象转换成布尔类型(True,False),非空即真,非0即真 6 from hashlib import md5 7 m=md5() 8 print(dir(m))#dir列出m的方法 9 eval('print("haha")') 10 exec('print("haha")') 11 b=exec('[1,2,3]')#exec执行代码时,不返回值,不能赋值,这里b是none 12 c=eval('[1,2,3]')#eval执行代码时,返回值,多用于表达式,这里赋值成功 13 print(b)#会输出None 14 print(c)#会输出[1,2,3] 15 exec("def hs():print(123)")#可执行复杂代码,这里正常余兴 16 eval("def hs():print(123)")#不可以执行复杂代码,会报错 17 print(round(66.66666,3))#round(float,int)保留float小数的int位 18 print(sum([1,6,9]))#求和 19 print(min([1,6,9]))#取最小值 20 print(max([1,6,9]))#取最大值 21 print(hex(34523).replace('0x',''))#10进制转16进制 22 print(hash('asd'))#将一个字符串hash成数字 23 print(globals())#返回程序内所有的变量,返回的是一个字典 24 print(locals())#返回局部变量
通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果,>>>可以通过右击Pycharm,选择“Execute Line in Console”来调用
>>> a = 1 >>> exec("a = 2") >>> a
2
eval有返回值,不能赋值,不能像exec那样进行复杂的运算。
a=2 eval('a') 2
eval的用法:同exec一样,eval也可以使用命名空间:
>>> result = eval('2+3') >>> result 5 >>> scope={} >>> scope['a'] = 3 >>> scope['b'] = 4 >>> result = eval('a+b',scope) >>> result 7
接下来我们详细看下filter和map这两个内置函数,map这个函数会改变原来的list的元素,这里只的改变有:修改、删除,而filter这个函数只能删除、不能修改元素,还有一点需要注意,这两个函数执行后都是返回一个内存地址,需要用lsit强制转换才可以得到list数据:
lis=['123',456,{"age":18},0,[],(1,2,3),(),{},'False'] def my_char(var): return var res=filter(my_char,lis)#filter(fun,list),list只要是可迭代类型即可,循环list里的值,调用fun函数,当fun函数返回为真时,保留list的迭代值,否则,删掉 print(list(res))#res得到的是一个对象,需要list方法接收值 def maps(var): return str(var)+'值都变咯' res1=map(maps,lis)#map(fun,list),list只要是可迭代类型即可,循环list里的值,调用fun函数,fun函数返回值作为新值保存到rese1对象里 print(list(res1))
接下来mark一下excel的操作:
1 import xlrd,xlwt,xlutils,os 2 from xlutils.copy import copy 3 book=xlrd.open_workbook('stu.xls')#打开一个excel文件对象 4 sheet=book.sheet_by_name('Sheet1')#通过sheet 名称指定工作sheet 5 # sheet=book.sheet_by_index(0)#通过sheet 索引指定工作sheet 6 all_sheets=book.sheet_names()#获取所有sheet名称,返回一个list 7 print(all_sheets) 8 print(sheet.cell(0,0).value)#通过cell获取指定坐标的数据 9 print(sheet.nrows)#获取sheet页的行数 10 print(sheet.ncols)#获取sheet页的列数 11 print(sheet.row_values(0))#获取指定行数的数据 12 print(sheet.col_values(0))#获取指定列数的数据 13 14 workbook=xlwt.Workbook()#打开一个excel文件对象 15 wsheet=workbook.add_sheet('sheet1')#添加一个sheet 16 wsheet.write(0,0,'test')#写入数据 17 workbook.save('test.xls')#保存excel,后缀必须是.xls,否则报错 18 19 ubook=xlrd.open_workbook('stu.xls')#打开一个excel文件对象 20 mbook=copy(ubook)#复制读到的文件对象 21 msheet=mbook.get_sheet(0)#获取sheet页,注意这里只能用get_sheet(0)方法,指定下标 22 msheet.write(0,0,'new_data')#写入数据 23 mbook.save('new.xls')#保存数据 24 os.remove('stu.xls') 25 os.rename('new.xls','stu.xls')