zoukankan      html  css  js  c++  java
  • python第十三课

    #函数 --2天
    #函数的定义和调用
    #def 函数名(形参)
    #函数体
    #return返回值
    #调用 函数名(实参)
    #站在形参的角度上:位置参数,*args,默认参数(陷阱),**kwargs
    #站在实参的角度上:按位置传,按照关键字传
    #返回值:没有返回值 返回一个值 返回多个值
    #接收返回值:没有返回值不接收,返回一个值作一个变量接收,返回多个值用一个变量或者对应数目变量接收
    #闭包函数 --在内部函数引用外部函数的变量
    #装饰器函数 --装饰器一定是闭包函数
    #装饰器的作用 --在不改变原来函数的调用方式的情况下,在这个函数前后添加新的功能
    #完美的符合了一个开发原则:开放封闭原则
    #对扩展是开发的
    #对修改是封闭的
    #基础的装饰器
    # from functools import wraps
    # def wrapper(func):
    # @wraps(func)
    # def inner(*args,**kwargs):
    # '''在函数被调用之前添加的代码'''
    # ret=func(*args,**kwargs) #func是被装饰的函数,在这里被调用
    # return ret
    # return inner
    # 使用---@wrapper
    # def func(): #inner
    # pass
    #func name
    # 带参数的装饰器
    def outer(形参):
    def wrapper(func):
    def inner(*args,**kwargs):
    '''在函数被调用之前添加的代码'''
    ret=func(*args,**kwargs) #func是被装饰的函数,在这里被调用
    # '''在函数被调用之前添加的代码'''
    return ret
    return inner
    return wrapper
    @outer(True)
    def func():
    pass

    #迭代器和生成器--两天
    #迭代器
    l=[1,2,3]
    #索引
    #循环 for
    #for i in l:
    # i
    #
    # for k in dic:
    # pass

    #enumerate
    # print(dir([]))#告诉我列表拥有的所有方法
    # print(dir({}))#告诉我列表拥有的所有方法
    # print(dir(''))#告诉我列表拥有的所有方法
    # print(dir(range(10)))#告诉我列表拥有的所有方法
    # ret=set(dir([]))&set(dir({}))&set(dir(''))&set(dir(range(10)))
    # print(ret)#iterable
    # print('__iter__'in dir(int))
    # print('__iter__'in dir(bool))
    # print('__iter__'in dir(list))
    # print('__iter__'in dir(dict))
    # print('__iter__'in dir(set))
    # print('__iter__'in dir(tuple))
    # print('__iter__'in dir(enumerate([])))
    # print('__iter__'in dir(range(1)))
    #只要能被for循环的数据类型 就一定拥有__iter__方法
    # print([].__iter__())
    #一个列表执行了__iter__()之后的返回值就是一个迭代器
    # print(dir([]))
    # print(dir([].__iter__()))
    # print(set(dir([].__iter__()))-set(dir([])))
    # print([l,'a','bbb'].__iter__().__length_hint__()) # 元素个数
    # l=[1,2,3]
    # iterator=l.__iter__()
    # print(iterator.__next__())
    # print(iterator.__next__())
    # print(iterator.__next__())
    # print(iterator.__next__())
    #lterable 可迭代的--->_iter_ #只要含有__iter__的方法都是可迭代的
    #[].__iter__()迭代器 -->__next__#通过next就可以从迭代器中一个一个的取值
    #只要含有__iter__方法的都是可迭代的---可迭代协议
    #迭代器协议--内部含有__next__和__iter__方法的就是迭代器
    # print('__iter__'in dir([].__iter__()))
    # print('__next_'in dir([].__iter__()))
    #迭代器的概念
    #迭代器协议---内含有__next__和__iter__方法的就是迭代器
    #迭代器协议和可迭代协议
    #可以被for循环的都是可迭代的
    #可迭代的内部都有__iter__方法
    #只要是迭代器一定可迭代
    #可迭代的.__iter__()方法就可以得到一个迭代器
    #迭代器中的__next__()方法可以一个一个的获取值
    #for循环其实就是在使用迭代器
    #iterator
    #可迭代对象
    # print([].__iter__())
    # print(range(20))
    #for
    #只有是可迭代对象的时侯才能用for
    #当我们遇到一个新的变量,不确定不能for循环的时侯,就判断它是否可迭代

    #迭代器的好处
    #从容器类型中一个一个的取值,会把所的的值都取到
    #节省内存空间
    #迭代器并不会有内存中再占用一大块内存
    #而是随着循环每次生成一个
    #每次next每次给我一个
    #rnge
    #f
    # l=[1,2,3,45]
    # iterator=l.__iter__()
    # while True:
    # print(iterator.__next__())
    # print(range(100000000000))
    # print(list(range(100000000)))

    #生成器
    # 生成器函数
    # def generator():
    # print(1)
    # return 'a'
    #
    # ret=generator()
    # print(ret)
    #只要含有yield关键字的函数都是生成器函数
    #yield不能和return共用并且需要写在函数内
    # def generator():
    # print(1)
    # yield 'a'
    #生成器函数:执行之后得到一个生成器作为返回值
    # ret=generator()
    # print(ret)
    # print(ret.__next__())
    def generator():
    print(1)
    yield 'a'
    print(2)
    yield 'b'
    yield 'c'
    g=generator()
    for i in g:
    print(i)
    # ret=g.__next__()
    # print(ret)
    # ret=g.__next__()
    # print(ret)
    # ret=g.__next__()
    # print(ret)

    #姓哈哈%i
    def wahaha():
    for i in range(200):
    yield '姓哈哈%s'%i
    g=wahaha()
    count=0
    for i in g:
    print(i)
    if count > 50:
    print(i)
    if count > 50:
    break
    print('*******',g.__next__())
    for i in g:
    count+=1
    print(i)
    if count > 50:
    print(i)
    if count > 50:
    break


  • 相关阅读:
    struct
    enum
    switch
    csc.exe命令,用来将一个 类文件 cs文件编译为DLL文件
    csc.exe编译C#文件
    Select,Add,Update,Delete
    dataTable
    textBox
    DataGridView1
    回车的动作
  • 原文地址:https://www.cnblogs.com/huangjianfeng/p/11335804.html
Copyright © 2011-2022 走看看