普通网友 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 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题