# 迭代器和生成器 # 迭代器 # 可迭代協議 —— 含有iter方法的都是可迭代的 # 迭代器協議 —— 含有next和iter的都是迭代器 # 特色 # 節省內存空間 # 方便逐個取值,一個迭代器只能取一次。 # 生成器 —— 迭代器 # 生成器函數 # 含有yield關鍵字的函數都是生成器函數 # 生成器函數的特色 #調用以後函數內的代碼不執行,返回生成器 #每從生成器中取一個值就會執行一段代碼,碰見yield就中止。 #如何從生成器中取值: # for :若是沒有break會一直取直到取完 # next :每次只取一個 # send :不能用在第一個,取下一個值的時候給上個位置傳一個新的值 # 數據類型強制轉換 :會一次性把全部數據都讀到內存裏 # 生成器表達式 # (條件成立想放在生成器中的值 for i in 可迭代的 if 條件)
# 3.處理文件,用戶指定要查找的文件和內容,將文件中包含要查找內容的每一行都輸出到屏幕 def check_file(filename,aim): with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操做符,文件句柄 for i in f: if aim in i: yield i g = check_file('1.複習.py','生成器') for i in g: print(i.strip()) <<< # 迭代器和生成器 # 生成器 —— 迭代器 # 生成器函數 # 含有yield關鍵字的函數都是生成器函數 # 生成器函數的特色 #調用以後函數內的代碼不執行,返回生成器 #每從生成器中取一個值就會執行一段代碼,碰見yield就中止。 #如何從生成器中取值: # 生成器表達式 # (條件成立想放在生成器中的值 for i in 可迭代的 if 條件)
def check_file(filename): with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操做符,文件句柄 for i in f: if '迭代器' in i: yield '***'+i for i in check_file('1.複習.py'): print(i.strip()) <<< ***# 迭代器和生成器 ***# 迭代器 *** # 迭代器協議 —— 含有next和iter的都是迭代器 *** # 方便逐個取值,一個迭代器只能取一次。 ***# 生成器 —— 迭代器
def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) g2=(i for i in g1) print(list(g)) print(list(g1)) print(list(g2)) <<< [0, 1, 2, 3] [] []
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() for n in [1,10,5]: g=(add(n,i) for i in g) # n = 1 # g=(add(n,i) for i in test()) #g=(1,2,3,4) # n = 10 # g=(add(n,i) for i in (add(n,i) for i in test())) # g=(11, 12,13 ,14) # n = 5 # g=(15,16,17,18) print(list(g)) <<< [15, 16, 17, 18]
# print() # input() # len() # type() # open() # tuple() # list() # int() # bool() # set() # dir() # id() # str() # print(locals()) #返回本地做用域中的全部名字 # print(globals()) #返回全局做用域中的全部名字 # global 變量 # nonlocal 變量 #迭代器.__next__() # next(迭代器) # def next(迭代器): # 迭代器.__next__() # 迭代器 = iter(可迭代的) # 迭代器 = 可迭代的.__iter__()
rangepython
range(10) range(1,11) print('__next__' in dir(range(1,11,2))) <<< False
dir面試
# dir 查看一個變量擁有的方法 print(dir([])) print(dir(1)) <<< ['__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'] ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
help
app
help(str)
<<<
class str(object)
| str(object='') -> str
| str(bytes_or_buffer[, encoding[, errors]]) -> strssh
| Create a new string object from the given object. If encoding or | errors is specified, then the object must expose a data buffer | that will be decoded using the given encoding and error handler. | Otherwise, returns the result of object.__str__() (if defined) | or repr(object). | encoding defaults to sys.getdefaultencoding(). | errors defaults to 'strict'. | | Methods defined here: | | __add__(self, value, /) | Return self+value. | | __contains__(self, key, /) | Return key in self.| | __format__(...) | S.__format__(format_spec) -> str | | Return a formatted version of S as described by format_spec.
| __hash__(self, /) | Return hash(self). | | __iter__(self, /) | Implement iter(self).| | __len__(self, /) | Return len(self).
#callable 可調用的 檢測是否是一個函數 # 變量 print(callable(print)) a = 1 print(callable(a)) print(callable(globals)) def func():pass print(callable(func)) <<< True False True True
time函數
import time #( t = __import__('time')) print(time.time()) <<< 1545206579.6000051 #1970年到如今經歷的秒數
writablespa
# 某個方法屬於某個數據類型的變量,就用.調用 list.__len__() # 若是某個方法不依賴於任何數據類型,就直接調用 —— 內置函數 和 自定義函數 f = open('1.複習.py') print(f.writable()) print(f.readable()) <<< False True
printcode
#輸入輸出 # ret = input('提示 : ') # print(ret)
def print(self, *args, sep=' ', end='\n', file=None):
print('咱們的祖國是花園',end='') #指定輸出的結束符
print('咱們的祖國是花園 ',end='') print(1,2,3,4,5,sep='|') #指定輸出多個值之間的分隔符
f = open('file','w')
print('aaaa',file=f) f.close() <<< 咱們的祖國是花園咱們的祖國是花園 1|2|3|4|5
#內存相關 #id #hash - 對於相同可hash數據的hash值在一次程序的執行過程當中老是不變的ab # - 字典的尋址方式 print(hash(12345)) print(hash('hsgda不想你走,nklgkds')) print(hash('hsgda不想你走,nklgkds')) print(hash(('1','aaa'))) <<< 12345 -2573559241142890582 -2573559241142890582 4497054594156916011 print(hash([])) 會報錯 不可哈西
#打印進度條 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) #progress Bar <<< 100% : **************************************************
exec('print(123)') eval('print(123)') print(eval('1+2+3+4')) # 有返回值 print(exec('1+2+3+4')) #沒有返回值 # exec和eval均可以執行 字符串類型的代碼 # eval有返回值 —— 有結果的簡單計算 # exec沒有返回值 —— 簡單流程控制 # eval只能用在你明確知道你要執行的代碼是什麼 123 123 10 None
code = '''for i in range(1,5): print(i*'*') ''' exec(code) * ** *** ****
code1 = 'for i in range(0,3): print (i)' #流程類 compile1 = compile(code1,'','exec') exec(compile1) code2 = '1 + 2 + 3 + 4' compile2 = compile(code2,'','eval') #計算類 print(eval(compile2)) code3 = 'name = input("please input your name:")' compile3 = compile(code3,'','single') #交互式 exec(compile3) #執行時顯示交互命令,提示輸入 print(name) # name #執行後name變量有值 <<< 0 1 2 10 please input your name:hhh hhh
complexorm
# 複數 —— complex #real+img j 實部和虛部都是浮點數 複數不能比較大小 # 5 + 12j === 複合的數 === 複數 aa=123-12j print aa.real # output 實數部分 123.0 print aa.imag # output虛數部分 -12.0
浮點數blog
# 浮點數(有限循環小數,無限循環小數) != 小數 :有限循環小數,無限循環小數,無限不循環小數 # 浮點數 #354.123 = 3.54123*10**2 = 35.4123 * 10 f = 1.781326913750135970 print(f)
<<<
1.781326913750136ip
print(bin(10)) print(oct(10)) print(hex(10)) <<< 0b1010 0o12 0xa
print(abs(5)) #絕對值 print(divmod(7,2)) # div除法 mod取餘 print(divmod(9,5)) # 除餘 <<< 5 (3, 1) (1, 4)
print(round(3.14159,3)) print(pow(2,3)) #pow冪運算 == 2**3 print(pow(2,3,3)) #冪運算以後再取餘 print(pow(3,2,1)) <<< 3.142 8 2 0
sum
ret = sum([1,2,3,4,5,6]) print(ret) ret = sum([1,2,3,4,5,6,10],) print(ret) <<< 21 31
print(min([1,2,3,4])) print(min(1,2,3,-4)) print(min(1,2,3,-4,key = abs)) print(max([1,2,3,4])) print(max(1,2,3,-4)) print(max(1,2,3,-4,key = abs)) <<< 1 -4 1 4 3 -4
print("對應的ASCII 碼爲", ord('a')) print(" 對應的字符爲", chr(65)) <<< 對應的ASCII 碼爲 97 對應的字符爲 A
#元祖不能比較大小 字母能夠 #while:True 永生語句 # print(2**10) 1024
#若k爲整形,下列while循環執行的次數爲: k=1000 i=0 while k>1: i=i+1 print (i,k) #python2 中爲9? 2**10=1024 k=k/2 <<< 1 1000 2 500.0 3 250.0 4 125.0 5 62.5 6 31.25 7 15.625 8 7.8125 9 3.90625 10 1.953125
def qqxing(k,l={}): # l.append(1) l[k]='v' print(l) qqxing(1) qqxing(2) qqxing(3) qqxing(4,{}) <<< {1: 'v'} {1: 'v', 2: 'v'} {1: 'v', 2: 'v', 3: 'v'} {4: 'v'}
刪除重複元素
# 寫一段python代碼實現刪除一個list裏面重複元素 list=[1,1,2,2,3] new_list=[] for i in list: if i not in new_list: new_list.append(i) #比set好一點 set無序 print(new_list) <<< [1, 2, 3]