Python3 內置函數及excel操作


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')
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM