• 疑问


    模式描述
    r 打开一个文件为只读。文件指针置于该文件的开头。这是默认模式。
    rb 打开一个文件只能以二进制格式读取。文件指针置于该文件的开头。这是默认模式。
    r+ 打开用于读取和写入文件。文件指针将会在文件的开头。
    rb+ 打开用于读取和写入二进制格式的文件。文件指针将会在文件的开头。
    w 打开一个文件只写。覆盖该文件,如果该文件存在。如果该文件不存在,则创建用于写入一个新的文件。
    wb 打开一个文件只能以二进制格式写入。覆盖该文件,如果该文件存在。如果该文件不存在,则创建用于写入一个新的文件。
    w+ 打开用于写入和读取的文件。覆盖现有的文件,如果文件存在。如果该文件不存在,则创建读取和写入新的文件。
    wb+ 打开用于写入和读取的二进制格式的文件。覆盖现有的文件,如果文件存在。如果该文件不存在,则创建读取和写入新的文件。
    a 将打开追加文件。文件指针是在文件的结尾。也就是说,该文件是在附加模式。如果该文件不存在,它创造了写入一个新的文件。
    ab 将打开追加的二进制格式的文件。文件指针在该文件的结束。也就是说,该文件为追加模式。如果该文件不存在,它创建并写入一个新的文件。
    a+ 打开为追加和读取文件。文件指针在该文件的结束。该文件将为追加模式。如果该文件不存在,它创建并读取和写入的新文件。
    ab+

    打开两个追加和读取的二进制格式的文件。文件指针在该文件的结束。该文件将在追加模式。如果该文件不存在,它创建并读取和写入的新文件。

    1.ab+说打开2个文件,这里是写错还是一次性打开2个文件?

    2.模块,验证密码登录的装饰器函数,返回值执行顺序是从内到外,还是从外到内?

    3.为什么把生成器赋值一个变量,就会执行下去?(range(10)如果说是调用函数,变成变量重复调用,也就是说range(10)被放在一个内存地址重复调用?)

    def range1(x):
    n = 0
    while n < x:
    # print(n)
    n += 1
    yield n


    new_range = range1(10)

    print(next(range1(10)))
    print(next(range1(10))) # 为什么这里会重复开始,而换成新变量却会继续执行下去
    print(next(new_range))
    print(next(new_range))



    结果


    1
    1
    2

    查看每个生成器的id地址

    print(id(range(10)))

    print(next(range1(10)))
    print(id(next(range1(10))))

    print(next(range1(10))) # 为什么这里会重复开始,而换成新变量却会继续执行下去
    print(id(next(range1(10))))

    print(next(new_range))
    print(id(next(new_range)))

    print(next(new_range))
    print(id(next(new_range)))


    结果

    39438544   # 这个是range(10)的内存地址,每次执行都会改变
    1
    8791508898848
    1
    8791508898848  # 这个是next(range(10)的地址,执行不会改变,但是执行了2次next,内存地址都没变,意思是2次执行了同一个命令?(相当于每次range(0,10),重新生成一个生成器)        

    1          range(10)是生成器,next(生成器)为什么没起作用?也就是说next(n),n不是指生成器?
    8791508898880
    3          # 这里为什么返回的是3,按照顺序应该是2才对,发现是
    print(id(next(new_range)))这里占了一位


    8791508898944  # 但是把range(10)赋值给new_range后能正确执行,而new_range也是生成器类型,new_range,range(10)都是生成器,差别在哪里?(用变量把一个生成器指定下来)---range(10)是生成器对象,a = range(10)是生成器,next(生成器对象)不会循环,生成器会,为什么?a = range(10)就变成生成器了?

    4.pycharm里需要输入变量的代码怎么debug?debug怎么只看print的结果,不看中间的变量变化?

    5.pycharm 断点是怎么用的?

    6.def func1(): # 生成器函数
    while True:
    print('ok1')
    x = 10 # 函数内局部变量x赋值为10
    print(x)
    x = yield 1 # 这里就是send函数的关键
    # 之前我们创建的生成器,yield左边都是没有值(我现在不是很确定这里是不是应该叫做返回值,那就先用值代替)。
    # 现在我们的x会接收到一个值,这个值是什么,从哪里来的?我们继续看下去
    print('is that: ',x)
    yield x # 这里试第二个断点


    f1 = func1() # 获取生成器对象
    ret1 = next(f1) # 运行到第一个yield
    # ret1 = f1.send(None) #(这一句语句需要全部看完回头再看)当第一次执行生成器的时候,他并没有执行到yield这个位置,所以你一点传值,就会出现问题
    # 谁去接收?没有对象接收就会报错,所以第一次如果一定要用send去调用,那就传一个None
    print(ret1) # 打印第一个yield返回的值
    #########################################
    # 关键点来了
    # 我们现在有两个问题,x = yield 1,这个x的值是什么,从哪里来
    # 当下面这条语句运行后,他会将x的值赋值为send方法的参数,并且继续执行到下一个yield
    ret2 = f1.send('eee')
    print(ret2)

    结果

    ok1
    10
    1
    is that:  eee
    eee

    如果一个函数有多个yield,每遇到一个yield就停止,返回值?

    7.递归函数怎么立即停止,不再执行?

     

  • 相关阅读:
    [LeetCode82]Remove Duplicates from Sorted List II
    IOS开发常见BUG和一些小技巧(PS:耐心看完,很实用)
    IOS-一步一步教你自定义评分星级条RatingBar
    iOS手机淘宝加入购物车动画分析
    iOS mac终端下的SQL语句
    iOS SQLite 数据库迁移
    iOS 判断两个日期之间的间隔
    iOS应用架构谈 本地持久化方案及动态部署
    用 SQLite 和 FMDB 替代 Core Data
    ios 消除 字符串 首尾空格
  • 原文地址:https://www.cnblogs.com/jackfree/p/9635763.html
Copyright © 2020-2023  润新知