eight
1、range():
下面這兩種用法的結果是一致的
print(range(100).__iter__()) print(iter(range(100))) # <range_iterator object at 0x000001C62FCB8EF0> # <range_iterator object at 0x000001C62FCB8EF0>
2、eval()和exec()
由下例可以看出來eval和exec都可以將引號去掉,但是eval是有返回值的,exec沒有返回值,只會輸出None
print(eval(‘1,2,3,4‘)) # (1,2,3,4) print(eval(‘1+2-3+4‘)) # 4 print(exec(‘1+2-3+4‘)) # None exec("print(‘1+2-3+4‘)") # 1+2-3+4 eval("print(‘1+2-3+4‘)") # 1+2-3+4
3、compile 將字符串類型的代碼編譯。代碼對象能夠通過exec語句來執行或者eval()進行求值
參數說明:
1. 參數source:字符串或者AST(Abstract Syntax Trees)對象。即需要動態執行的代碼段。
2. 參數 filename:代碼文件名稱,如果不是從文件讀取代碼則傳遞一些可辨認的值。當傳入了source參數時,filename參數傳入空字符即可。
3. 參數model:指定編譯代碼的種類,可以指定為 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定為‘exec’;當source中只包含一個簡單的求值表達式,model應指定為‘eval’;當source中包含了交互式命令語句,model應指定為‘single‘。
codel=‘for i in range(0,10):print(i)‘ compilel=compile(codel,‘‘,‘exec‘) exec(compilel) # 0 # 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9
#簡單求值表達式用eval code1=‘1+2+3+4‘ compile=compile(code1,‘‘,‘eval‘) print(eval(compile)) # 10
#交互語句用single code=‘name=input("please input your name:")‘ compile=compile(code,‘‘,‘single‘) name # 運行結果 # Traceback (most recent call last): # File "C:/Pythonbc/課堂/內置函數.py", line 177, in <module> # name # NameError: name ‘name‘ is not defined
code=‘name=input("please input your name:")‘ compile=compile(code,‘‘,‘single‘) exec(compile) name # please input your name:alex
4、iterator():下面代碼中的兩個print的效果是一樣的,都是調用生成器,並從其中取值。
iterator=iter(range(100)) print(iterator.__next__()) # 0 print(next(iterator)) # 1
5、dir():判斷某個數據類型中有什麽用法。
print(dir([])) # [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘,
‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__init_subclass__‘,
‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘,
‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘extend‘, ‘index‘,
‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]
查看某數據類型的用法有3種:
1、ctrl +鼠標左鍵單擊:這是pycharm提供的方法
2、help:會查看到所有的方法以及它的使用方法,但是不知道用法
3、dir:查看到的只是方法名,這個方法適用於查看某方法是否在這個數據類型中
6、callcble():
def func():pass a=1 print(callable(a)) # False 不可以調用 print(callable(print)) # True 可以調用 print(callable(func)) # True 可以調用
7、import():
用法:import+模塊名
import time # 時間
import time for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印多少個‘*‘ per_str = ‘\r%s%% : %s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%% : %s‘%(i,‘*‘*char_num) print(per_str,end=‘‘, flush=True) #100% : ************************************************** #這是一個進度條的代碼,調用time模塊來調節代碼運行的速度
import os # 操作系統
8、文件操作方法:open()
f=open(‘文件名‘,‘w‘,encoding=‘utf-8‘)
打開模式:r、w、a、rb、wb、ab
編碼:utf-8/gbk
9、buffering(緩存)
10、hash(哈希)
print(id(1)) # 1779414080 print(id(2)) # 1779414080 print(hash(‘hdhshd‘)) # 7061084334364224280 print(hash(123445)) # 123445 print(hash((1,2,3,4))) # 485696759010151909
相同的內容的哈希結果是相同的
可用於:1、數據的存儲和查找;2、模塊:hashlib
判斷一個數據類型是否可以hash,在一個程序執行過程中,對同一個值的hash的結果總是不變的;多次執行,對同一個值的hash結果可能改變。
11、 print():
def print(self,*args,sep=‘ ’,end=‘\n‘,file=None)
print(1,2,3,4,sep=‘/‘) # 1/2/3/4 print(1,2,3,4,sep=‘*‘) # 1*2*3*4 print(1,2,sep=‘,‘) # 1,2
其中sep在print中默認為以空格來分隔,且在結尾的時候是有一個end的默認參數,傳的是\n(換行符)
print(‘abc\n‘) print(2) # abc # # 2
在print中file的默認值是None,可以自己設定一個文件,如下所示,文件中存入了abc
f=open(‘a‘,‘w‘) print(‘abc\n‘,file=f) # abc被寫入了文件中 print(2) # 2
進度條:其中\r:不論運行了多少,都要將光標移到最前面,相當於seek(0)。
import time for i in range(0,101,2): time.sleep(0.1) char_num=i//2 per_str = ‘\r%s%%:%s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%%:%s‘ % (i, ‘*‘ * char_num) print(per_str,end=‘‘,flush=True) # 100%:**************************************************
12、 bool:只有True和False兩個值;可以與int、str之間之間相互轉換
print(bool(‘‘)) # False print(bool(0)) # False print(bool(‘a‘)) # True print(bool(1)) # True
13、int:整型,可以與bool、str之間相互轉換
print(int(False)) # 0 print(int(True)) # 1
14、float:浮點型(可以理解為帶小數點的數據)
15、abs:計算絕對值
print(abs(-24)) # 24
16、divmod:計算,並且返回除數和余數
print(divmod(35,4)) # (8,3)
17、round:保留小數點的位數,可自定義 round(number,ndigits)
print(round(3.1415926,3)) # 3.142
18、pow:冪運算
print(pow(2,2)) # 4 print(pow(2,2,2)) # 0 print(pow(2,2,3)) # 1
19、sum:計算數據的和
print(sum([1,2,3,4,5,6])) # 21
20、min:比較數據的大小,返回最小值min(iterable,key,default)
t=(-25,31,6,8) print(min(t)) # -25 print(min(t,key=abs)) # 6 print(min((),default=0)) # 0
21、max:比較數據的大小,返回最大值max(iterable,key,default)
t=(-25,31,6,8) print(max(t)) # 31 print(max(t,key=abs)) # 31 print(max((),default=0)) # 0
22、list:列表,以[‘列表中的內容‘]的形式表現出來,可以對列表內的元素進行增刪改查,是可叠代對象,可強制轉換成元組tuple(list)
23、tuple:元組,以(‘元組中的內容‘)的形式表現出來,是可叠代對象,但元組內的元素不可變,可強制轉換成列表list(tuple)
24、reversed:返回的是叠代器,不改變原來的列表,在內存中額外開辟一個新的空間來存儲新的序列叠代器,這樣比較占內存,但是並不是在原來的列表上進行修改,這樣保留了原來的列表中的內容。
25、reverse:返回的值是None,是在原列表的基礎上對列表進行修改的,雖然節省了內存空間,但是改變了原列表中的內容。
26、bytes:
print(bytes(‘ab‘,encoding=‘utf-8‘)) # b‘ab‘
26、ascii:只要是ascii碼中的內容就打印出來,如果不是就轉換成\u
print(ascii(2)) # 2 print(ascii(‘a‘)) # ‘a‘ print(ascii(‘哇哈哈‘)) # ‘\u54c7\u54c8\u54c8‘
27、repr:用於%r格式化輸出
print(repr(2)) # 2 print(repr(‘wahaha‘)) # ‘wahaha‘ print(repr(2+4)) # 6 print(repr(‘q‘+‘a‘)) # ‘qa‘
28、locals:局部變量,作用域根據locals的使用地方來確定其使用範圍。
29、globals:全局變量,可在函數中使用globals來改變函數的使用範圍,但最好不要用,在使用globals改變變量的值的同時,全局變量中的變量值也會同時發生改變。
30、next:叠代器包含有用法。
31、iter:可叠代對象同時擁有next和iter用法。
32、callable:判斷是否為可叠代對象
def func():pass a=1 print(callable(a)) # False print(callable(print)) # True print(callable(func)) # True
33、id:可以很快的找到某數據的存儲地址
print(id(1)) # 1888793664 print(id(2)) # 1888793696
eight