day15生成器面試題和內置函數

1複習

# 迭代器和生成器
# 迭代器
    # 可迭代協議 —— 含有iter方法的都是可迭代的
    # 迭代器協議 —— 含有next和iter的都是迭代器
    # 特色
        # 節省內存空間
        # 方便逐個取值,一個迭代器只能取一次。
# 生成器 —— 迭代器
    # 生成器函數
        # 含有yield關鍵字的函數都是生成器函數
        # 生成器函數的特色
            #調用以後函數內的代碼不執行,返回生成器
            #每從生成器中取一個值就會執行一段代碼,碰見yield就中止。
            #如何從生成器中取值:
                # for :若是沒有break會一直取直到取完
                # next :每次只取一個
                # send :不能用在第一個,取下一個值的時候給上個位置傳一個新的值
                # 數據類型強制轉換 :會一次性把全部數據都讀到內存裏
    # 生成器表達式
        # (條件成立想放在生成器中的值 for i in 可迭代的 if 條件)

2做業

# 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的都是迭代器
***        # 方便逐個取值,一個迭代器只能取一次。
***# 生成器 —— 迭代器

3面試題

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]

4內置函數

# 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).

collable

#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

 

 

hash 

#內存相關
#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和eval

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)
*
**
***
****

compile

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

divmod

print(abs(5)) #絕對值

print(divmod(7,2))   # div除法  mod取餘
print(divmod(9,5))   # 除餘
<<<
5
(3, 1)
(1, 4)

round和pow

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

min和max

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

ord chr

print("對應的ASCII 碼爲", ord('a'))
print(" 對應的字符爲", chr(65))
<<<
對應的ASCII 碼爲 97
 對應的字符爲 A

 

5試題講解

#元祖不能比較大小 字母能夠
#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]
相關文章
相關標籤/搜索