• 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__()

    range

    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

    
    
    help(str)
    <<<

    class str(object)
    | str(object='') -> str
    | str(bytes_or_buffer[, encoding[, errors]]) -> str

    
     |  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年到现在经历的秒数

    writable

    # 某个方法属于某个数据类型的变量,就用.调用 list.__len__()
    # 如果某个方法不依赖于任何数据类型,就直接调用  —— 内置函数 和 自定义函数
    
    f = open('1.复习.py')
    print(f.writable())
    print(f.readable())
    <<<
    False
    True
    
    

     print

    #输入输出
    # ret = input('提示 : ')
    # print(ret)
    def print(self, *args, sep=' ', end='
    ', 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 = '
    %s%% : %s
    ' % (i, '*' * char_num) 
             if i == 100 else '
    %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

    complex

    # 复数 —— complex
    #real+img j     实部和虚部都是浮点数 复数不能比较大小
    # 5 + 12j  === 复合的数 === 复数
    aa=123-12j
    print aa.real  # output 实数部分 123.0  
    print aa.imag  # output虚数部分 -12.0

    浮点数

    # 浮点数(有限循环小数,无限循环小数)  != 小数 :有限循环小数,无限循环小数,无限不循环小数
    # 浮点数
        #354.123 = 3.54123*10**2 = 35.4123 * 10
    f = 1.781326913750135970
    print(f)
    <<<

    1.781326913750136

    二 、八 、十六进制

    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]
  • 相关阅读:
    4_5.springboot2.x之Web开发RestfulCRUD操作
    4_4.springboot之Web开发登录和拦截器
    4_3.springboot2.x之默认访问首页和国际化
    4_2.springboot2.x配置之springmvc自动配置
    4_1.springboot2.xWeb开发使用thymeleaf
    03_springboot2.x日志处理
    08_springboot2.x自定义starter
    JavaScript-----对象属性赋值及获取属性值的方式
    Spring探究-----AOP配置详解
    Spring探究-----自动装配Bean详解
  • 原文地址:https://www.cnblogs.com/hi-python/p/10144379.html
Copyright © 2020-2023  润新知