鱼C论坛

 找回密码
 立即注册
查看: 1365|回复: 5

[已解决]作业第19讲 第四题有疑惑

[复制链接]
发表于 2018-5-8 16:49:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var

def fun3(var):
    var = ' 小甲鱼 '

print(fun1())

两个函数的还可以看懂,三个函数的就有些困难了,求解答一下,思维过程是怎样的?
最佳答案
2018-5-8 16:53:15
函数作用域的问题
理解一下:在函数内部直接赋值的的变量就是局部变量,只有在函数内部有效

fun1中被声明为global,全局
fun2中并没有对var直接赋值,所以是直接操作全局的bar
fun3中直接对var赋值,该var为局部变量,所以在fun2中调用没什么用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-5-8 16:53:15 | 显示全部楼层    本楼为最佳答案   
函数作用域的问题
理解一下:在函数内部直接赋值的的变量就是局部变量,只有在函数内部有效

fun1中被声明为global,全局
fun2中并没有对var直接赋值,所以是直接操作全局的bar
fun3中直接对var赋值,该var为局部变量,所以在fun2中调用没什么用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 2

使用道具 举报

发表于 2018-5-8 17:10:55 | 显示全部楼层
改下变量名就什么都好懂了。
用一样的变量名就是为了看了是不是能理解的了。
  1. var = ' Hi '

  2. def fun1():
  3.     global var
  4.     var = ' Baby '
  5.     return fun2(var)

  6. def fun2(a):
  7.     a += 'I love you'
  8.     fun3(a)
  9.     return a

  10. def fun3(b):
  11.     b = ' 小甲鱼 '

  12. print(fun1())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-8 17:27:16 | 显示全部楼层
➜  desktop nl pp.py
     1        var = ' Hi '
             
     2        def fun1():
     3            global var
     4            var = 'Baby '
     5            return fun2(var)
             
     6        def fun2(var):
     7            var += 'I love you'
     8            fun3(var)
     9            return var
             
    10        def fun3(var):
    11            var = '小甲鱼'%
                                                   
➜  desktop python3
Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pp import fun1,fun2,fun3
>>> from dis import dis
>>> dis(fun1)
  5           0 LOAD_CONST               1 ('Baby ')
              2 STORE_GLOBAL             0 (var)

  6           4 LOAD_GLOBAL              1 (fun2)
              6 LOAD_GLOBAL              0 (var)
              8 CALL_FUNCTION            1
             10 RETURN_VALUE
>>> dis(fun2)
  9           0 LOAD_FAST                0 (var)
              2 LOAD_CONST               1 ('I love you')
              4 INPLACE_ADD
              6 STORE_FAST               0 (var)

10           8 LOAD_GLOBAL              0 (fun3)
             10 LOAD_FAST                0 (var)
             12 CALL_FUNCTION            1
             14 POP_TOP

11          16 LOAD_FAST                0 (var)
             18 RETURN_VALUE
>>> dis(fun3)
14           0 LOAD_CONST               1 ('小甲鱼')
              2 STORE_FAST               0 (var)
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE

不要看nl的行号了,它是把空行合并了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-5-8 19:51:07 | 显示全部楼层
这就是考察全部变量和局部变量的问题,多看一下基础知识,就明白了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2018-5-10 10:08:04 | 显示全部楼层
ABC23 发表于 2018-5-8 17:27
➜  desktop nl pp.py
     1        var = ' Hi '
             

学习了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-11 08:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表