孤妓与酒 发表于 2021-3-10 15:27:11

第19讲第4题的瞎想

以下两个代码的区别是什么??为什么一个结果是None一个是Baby??

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

var = 'Baby'
fun3(var)
print(fun3(var))

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

var = 'Baby'
fun3(var)
print(var)

至于为什么说是瞎想,是因为还是不太懂为什么 fun3(var)没用,查询了一大堆相关的,结果越搞越乱
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())

Daniel_Zhang 发表于 2021-3-10 15:36:08

本帖最后由 Daniel_Zhang 于 2021-3-10 15:40 编辑

# -*- coding: utf-8 -*-

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

var = 'Baby'
fun3(var)
print(fun3(var))


print 出来的是 None 是因为 fun3 函数没有返回值

先定义了 var 为 Baby,var 传入 fun3 进行修改

但是 fun3(var) 运行之后,print 的是 fun3(var) 而不是 var


--------------------------------

但是第二个代码,

# -*- coding: utf-8 -*-

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

var = 'Baby'
fun3(var)
print(var)


之所以是 Baby,因为 fun3 调用的时候,存在一个变量的作用域的问题

即,即使在 fun3 中对 var 进行了修改,也只是在 fun3 内部,var 才是 '小甲鱼'

如果需要使 fun3 中修改的 var 值 在后面的print 里面 打印出 '小甲鱼',可以如下修改:

# -*- coding: utf-8 -*-

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

var = 'Baby'
var = fun3(var)
print(var)


或者

# -*- coding: utf-8 -*-

def fun3():
    global var# 引用 全局变量 var 并修改这个全局变量
    var = ' 小甲鱼 '

var = 'Baby'
fun3()
print(var)

孤妓与酒 发表于 2021-3-10 15:44:38

Daniel_Zhang 发表于 2021-3-10 15:36
print 出来的是 None 是因为 fun3 函数没有返回值

先定义了 var 为 Baby,var 传入 fun3 进行修改


那我如果想把print(fun3(var))运行出一个结果要怎么改?、
# -*- coding: utf-8 -*-

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

var = 'Baby'
fun3(var)
print(fun3(var))

Daniel_Zhang 发表于 2021-3-10 15:48:06

孤妓与酒 发表于 2021-3-10 15:44
那我如果想把print(fun3(var))运行出一个结果要怎么改?、

加上一个 return 不就好了?打印 fun3 的返回值

# -*- coding: utf-8 -*-

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

var = 'Baby'
print(fun3(var))

孤妓与酒 发表于 2021-3-10 15:50:07

Daniel_Zhang 发表于 2021-3-10 15:48
加上一个 return 不就好了?打印 fun3 的返回值

哭,搞来搞去还是return搞不懂{:10_269:}

Daniel_Zhang 发表于 2021-3-10 15:53:42

孤妓与酒 发表于 2021-3-10 15:50
哭,搞来搞去还是return搞不懂

哈哈哈,很正常

return 怎么说呢,个人感觉

就有点类似于,你调用了这个函数,如果你需要它当中生成的某一个结果,就 return 那个结果

用一个变量进行接收 return 的东西,或者直接 print 打印

具体的看你自己的需求

TC_DHL 发表于 2021-3-10 16:01:03

孤妓与酒 发表于 2021-3-10 15:50
哭,搞来搞去还是return搞不懂

def fun3(var):
    var = ' 小甲鱼 '#在函数fun3中定义了参数var,值为'小甲鱼'
    return var#使用return把定义的值返回给函数fun3中的var参数,所以这一步def fun3(var) 等于def fun3(var='小甲鱼')
    #fun3(var)中的var是形参, var = ' 小甲鱼 ' 这个var是实参,因为定义了值'小甲鱼'
var = 'Baby'#这个是在外部定义的var参数
print(fun3(var))#调用函数fun3,并打印参数var的值
#不知说的准不准确, 有误的话请大佬指正{:5_94:}

jackz007 发表于 2021-3-10 16:07:06

本帖最后由 jackz007 于 2021-3-10 16:10 编辑

孤妓与酒 发表于 2021-3-10 15:50
哭,搞来搞去还是return搞不懂

      return 的作用主要有两个,其一,是结束函数调用,其二,是把函数的运算结果传递给函数调用者。
      高中应该学过三角函数 sin(30) = 1/2,tan(30) = sqrt(3) / 3,显然,在这里,sin() 、tan() 就是函数,那么,1/2、sqrt(3) / 3 就是函数值,这些函数就是通过 return 1/2,return sqrt(3) / 3 来传递函数值的。

孤妓与酒 发表于 2021-3-10 16:09:59

TC_DHL 发表于 2021-3-10 16:01
#不知说的准不准确, 有误的话请大佬指正

我不是大佬,你问上面的老哥,那才是真正的大佬
页: [1]
查看完整版本: 第19讲第4题的瞎想