鱼C论坛

 找回密码
 立即注册
查看: 888|回复: 8

[已解决]关于十九课函数的

[复制链接]
发表于 2018-10-16 17:47:26 | 显示全部楼层 |阅读模式

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

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

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())


这道题为什么是打印 baby i love you 而不是小甲鱼
fub2 不是引用fun3 把var改成小甲鱼了么。。。看不懂这里
最佳答案
2018-10-16 20:01:12
本帖最后由 13572044595 于 2018-10-16 20:04 编辑

声明:
以下程序梳理过程是在别的帖子看到的,我自己保存的,我也懒得去找这个贴子的链接了,你可以自己去贴吧搜索~


虽然我看了还是不太懂,但是先保存,以后再看~
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())


'''梳理一下程序的执行次序:
主程序:
var赋值为'Hi'
print(fun1()):调用fun1,将返回值打印出来。

fun1:
将var设置为全局变量,并修改为' Baby '
调用fun2,并将fun2的返回值作为它的返回值

fun2:
这里的var是局部变量,通过形参传入使var为' Baby ',再通过自加变为'Baby I love you'
调用fun3,但fun3没有return,返回None,即使有返回值,也没有变量接收它,等于做无用功。
再返回var:Baby I love you,并通过fun1返回给主程序。'''



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-16 17:49:33 | 显示全部楼层
fun3的var和fun2的不是一个,只是同名而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 17:55:29 | 显示全部楼层
塔利班 发表于 2018-10-16 17:49
fun3的var和fun2的不是一个,只是同名而已

那为什么 fun1和fun2是同一个呢。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 18:17:14 | 显示全部楼层
fun2的var是fun1传进去的,且没有修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 18:18:39 | 显示全部楼层
Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的
def fun3(var):
        var.append('小甲鱼')
var=[‘我爱你’]
fun3(var)
结果:
var=['小甲鱼']
___________
def fun3(var):
    var = ' 小甲鱼 '
var='Hi'
fun3(var)
结果:
var='Hi'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 19:53:59 | 显示全部楼层
因为首先 函数里的变量是有作用域的 而fun3没任何输出 除了默认的None 所以fun3里面var值一样也是只在fun3里起作用,因此,并没改变fun2里Var的值.

fun1是把var的值 Baby 传给了fun2 然后fun2()返回的结果是 var +'I love you'

所以print(fun1()) 结果就是Baby I love you

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 20:01:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 13572044595 于 2018-10-16 20:04 编辑

声明:
以下程序梳理过程是在别的帖子看到的,我自己保存的,我也懒得去找这个贴子的链接了,你可以自己去贴吧搜索~


虽然我看了还是不太懂,但是先保存,以后再看~
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())


'''梳理一下程序的执行次序:
主程序:
var赋值为'Hi'
print(fun1()):调用fun1,将返回值打印出来。

fun1:
将var设置为全局变量,并修改为' Baby '
调用fun2,并将fun2的返回值作为它的返回值

fun2:
这里的var是局部变量,通过形参传入使var为' Baby ',再通过自加变为'Baby I love you'
调用fun3,但fun3没有return,返回None,即使有返回值,也没有变量接收它,等于做无用功。
再返回var:Baby I love you,并通过fun1返回给主程序。'''



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 20:28:40 | 显示全部楼层
首先感谢大家的积极回答,谢谢!!
貌似就是因为作用域。但是作为一个小白还是不甚理解,慢慢来吧

从别人的帖子里找了一个答案:第四回合:global可以在任何地方修饰变量,而且被global修饰的变量直接被标识为全局变量,对该变量修改会影响全局变量的值,但不影响函数中未被global修饰的同名变量(依然是局部变量),nonlocal只能在嵌套函数(可能还有其他的地方,我还没有检查)中使用,用于标识嵌套函数中的变量是包含该嵌套函数的函数中的同名变量,在嵌套函数中修改变量会影响函数中的变量。如果在函数中使用global修饰了变量,那么在嵌套函数中用nonlocal修饰同名变量会发生报错,因为nonlocal表示该变量在函数中已经定义,但检查时因为同名变量被global修饰为全局变量,所以不存在同名的局部变量,从而导致错误。

这是地址:https://blog.csdn.net/xcyansun/article/details/79672634
不知道合不合规矩,不合规矩管理员就删了吧。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 20:45:47 | 显示全部楼层
既然已经明白了,就随便找个合适的鱼油,给个最佳答案,不然你的问题一直在求助中...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 23:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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