普通网友 2016-03-23 13:01 采纳率: 100%
浏览 1212

关于python语法的一些问题

1.python生成器,以下是书上的一个例子:

 >>>def my_range(first=0,last=10,step=1):
 ...            number=first;
 ...            while number<last:
 ...                  yield number
 ...                  number+=step
 ...


调用这个函数:

 >>>range=my_range(1,5) 
 >>>for x in ranger:
  ...         print(x)
    ...
    1
    2
    3
    4

这里我就想问问yield number那里,这里应该是返回number的值,可是下面为什么还会有代码,python的函数的返回值可以不放在函数最后吗?另外看不明白my_range函数的意思,有没有大神能解释一下?

2.python命名空间和作用域的问题

>>>animal='fruitbat'
 >>>def change_and_print_global():
 ...            print('inside change_anf_print_global:',animal)
 ...            animal ='wombat'
 ...            print('after the change:',animal)
 ...
 >>>change_and_print_global()

执行上面这段代码会报错,local variable 'animal' referenced before assignment
然而,执行下面这段代码却不会报错

 >>>def change_local():
 ...            animal='wombat'
 ...            print('inside change_local:',animal,id(animal))
 ...
 >>>
 change_local()
 inside change_local: wombat  4330406160

以上这2段都是书上的代码,第一段代码会报错,可是第二段同样是在函数中使用了一个同名的变量,并给其附了值,第一段也是在函数内使用了同名变量,改变值。我看不出这2段代码有什么不同,可是为什么一段会报错,而另一段不会报错?求大神解析解析

  • 写回答

1条回答

  • oyljerry 2016-03-23 14:00
    关注

    这就是yield的特殊 它会返回数据 同时保存函数栈其它数据 下次调用的时候会直接从yield开始继续计算

    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?