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=2eval('a')2
eval的用法:同exec一样,eval也可以使用命名空间:
>>> result = eval('2+3')>>>result5
>>> scope={}>>> scope['a'] = 3
>>> scope['b'] = 4
>>> result = eval('a+b',scope)>>>result7
接下来我们详细看下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')