鱼C论坛

 找回密码
 立即注册
查看: 2481|回复: 20

[已解决]零基础入门学习Python第20讲中global关键字的示例是否有误

[复制链接]
发表于 2017-4-8 10:55:42 | 显示全部楼层 |阅读模式

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

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

x
各位,

在视频中,小甲鱼用一下代码来表现使用global关键字来使得全局变量能够在函数中被修改。

count = 5

def myfun():
        count = 10
        print(10)

但,无论myfun中的count被赋值为多少,这个函数一定会打印10.

所以这个示例似乎无法说明global的用法。

具体请看截图。

求问各位,是否以上说法是否有误。
最佳答案
2017-4-8 11:29:56
本帖最后由 文质彬彬胡汉三 于 2017-4-8 11:31 编辑

朋友你好,我明白了你的意思。我來說一下global的相關,先看代碼如下:
  1. number = 10
  2. def my_number():
  3.         global number
  4.         print(number)
复制代码

在這段代碼中,使用global強調了number是全局變量,該函數的功能是屏幕打印number的值,因此在調用該函數的時候,屏幕打印 10
再來看這段代碼:
  1. number = 10
  2. def my_number_1():
  3.         global number
  4.         qw = number + 3
  5.         print(qw)
复制代码

這個函數中,同樣聲明了全局變量number,該函數實現的功能是打印qw的值,在調用函數時,qw = number + 3,因爲聲明了全局變量number,函數直接使用了number的最初定義值。
在你的圖片中,my_fun()這個函數中最後一句,print(10)這就説明該函數的功能是屏幕打印10,因此無論怎樣定義變量,打印都會是10.
再看下邊的代碼:
  1. number = 10
  2. def my_number_2():
  3.         global number
  4.         number = 2 + 4
  5.         gg = number +3
  6.         print(gg)
复制代码

這段代碼中,同樣聲明全局變量number,但是下一句number = 2 + 4修改了全局變量number的最初值,使得numer = 6,但是該函數的打印是gg = number + 3,調用該函數時,屏幕打印 9,儅你直接print(number),則屏幕打印 6
這樣說不知你能否理解

视频截图

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

使用道具 举报

发表于 2017-4-8 11:00:11 | 显示全部楼层
大兄弟,先不说别的
你的代码第四行
直接print(10),那么打印结果肯定是10啊
怎么说要print(count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 11:08:23 | 显示全部楼层
新手·ing 发表于 2017-4-8 11:00
大兄弟,先不说别的
你的代码第四行
直接print(10),那么打印结果肯定是10啊

这代码代码就是小甲鱼视频教程里的代码,具体请看截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:08:48 | 显示全部楼层
你给的代码,如果print(count)
结果就是5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:10:31 | 显示全部楼层
russellzhu 发表于 2017-4-8 11:08
这代码代码就是小甲鱼视频教程里的代码,具体请看截图

对呀,我知道
你到底是哪里不懂
你给的例子的确不能体现global
具体请见你的截图的第二段代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 11:13:23 | 显示全部楼层
新手·ing 发表于 2017-4-8 11:08
你给的代码,如果print(count)
结果就是5

同意,但在小甲鱼视频中
小甲鱼用,

def Myfun():
    global count
    count = 10
    print(10)

这个函数的结果,如果能打印出10 来说明global关键字能够修改全局变量。

请一定看下帖子中的截图,这个截图就是小甲鱼视频的截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 11:14:40 | 显示全部楼层
新手·ing 发表于 2017-4-8 11:10
对呀,我知道
你到底是哪里不懂
你给的例子的确不能体现global

我懂 global关键字的意思,我的疑惑是小甲鱼的教学视频中是否讲错了。我的截图是网易公开课中小甲鱼的视频截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:20:31 | 显示全部楼层
你觉得那讲错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:21:28 | 显示全部楼层
没有讲错的地方,哪里不懂我给你讲一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:29:56 | 显示全部楼层    本楼为最佳答案   
本帖最后由 文质彬彬胡汉三 于 2017-4-8 11:31 编辑

朋友你好,我明白了你的意思。我來說一下global的相關,先看代碼如下:
  1. number = 10
  2. def my_number():
  3.         global number
  4.         print(number)
复制代码

在這段代碼中,使用global強調了number是全局變量,該函數的功能是屏幕打印number的值,因此在調用該函數的時候,屏幕打印 10
再來看這段代碼:
  1. number = 10
  2. def my_number_1():
  3.         global number
  4.         qw = number + 3
  5.         print(qw)
复制代码

這個函數中,同樣聲明了全局變量number,該函數實現的功能是打印qw的值,在調用函數時,qw = number + 3,因爲聲明了全局變量number,函數直接使用了number的最初定義值。
在你的圖片中,my_fun()這個函數中最後一句,print(10)這就説明該函數的功能是屏幕打印10,因此無論怎樣定義變量,打印都會是10.
再看下邊的代碼:
  1. number = 10
  2. def my_number_2():
  3.         global number
  4.         number = 2 + 4
  5.         gg = number +3
  6.         print(gg)
复制代码

這段代碼中,同樣聲明全局變量number,但是下一句number = 2 + 4修改了全局變量number的最初值,使得numer = 6,但是該函數的打印是gg = number + 3,調用該函數時,屏幕打印 9,儅你直接print(number),則屏幕打印 6
這樣說不知你能否理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 11:34:25 | 显示全部楼层
新手·ing 发表于 2017-4-8 11:21
没有讲错的地方,哪里不懂我给你讲一下


>>> count = 5 #将全局变量count赋值为5
>>> def MyFun():#定义函数MyFun
        count = 10#将局部变量count赋值为10
        print(10)#打印10

       
>>> MyFun()#调用函数MyFun,根据函数定义,结果将打印10
10
>>> print(count)#打印全局变量count,根据全局变量和局部变量的关系,此处一定会打印5。根据视频中小甲鱼所述,此处他想通过以上两个不同说明局部变量和全局变量的不同。进而引出下文的global关键字的作用。但正如你所说的,前面定义的MyFun()中结果一定是print(10).这个于变量是否为10或5无关。进而推出此处无法说明局部变量和全局变量的屏蔽关系
5

如果方便的话,请看一下视频:http://study.163.com/course/cour ... amp;courseId=378003
在第1:39-第2:41

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

使用道具 举报

 楼主| 发表于 2017-4-8 11:37:42 | 显示全部楼层
本帖最后由 russellzhu 于 2017-4-8 11:40 编辑
文质彬彬胡汉三 发表于 2017-4-8 11:29
朋友你好,我明白了你的意思。我來說一下global的相關,先看代碼如下:

在這段代碼中,使用global強調了 ...


我完全理解我图片中函数的意思。这图片中的函数,正是我在网易云课堂(上面的回复都讲错了,在此更正)的零基础入门学习Python第20讲的视频截图。所以,才有此疑惑。

多谢指点,现在我已确认是视频中的示例无法说明局部变量和全局变量的关系。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:41:42 | 显示全部楼层
russellzhu 发表于 2017-4-8 11:34
>>> count = 5 #将全局变量count赋值为5
>>> def MyFun():#定义函数MyFun
        count = 10#将局部变量cou ...

哦,你想说明局部变量和全局变量(通过这个代码)
  1. count = 5 #将全局变量count赋值为5
  2. def MyFun():#定义函数MyFun
  3.       count = 10#将局部变量count赋值为10
  4.       print(10)#打印10
复制代码

如果print(count)
结果为5
而不是函数中定义的count = 10
这证明了全局变量
  1. count = 5 #将全局变量count赋值为5
  2. def MyFun():#定义函数MyFun
  3.       global count
  4.       count = 10#将全局变量count赋值为10
  5.       print(10)#打印10
复制代码

这样,打印count,还是10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 11:44:02 | 显示全部楼层
新手·ing 发表于 2017-4-8 11:41
哦,你想说明局部变量和全局变量(通过这个代码)

如果print(count)

多谢,麻烦版主告知视频团队,在下次修正时,修正这一错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:44:42 | 显示全部楼层
russellzhu 发表于 2017-4-8 11:44
多谢,麻烦版主告知视频团队,在下次修正时,修正这一错误

原谅我的愚蠢,视频到底哪错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:46:52 | 显示全部楼层
russellzhu 发表于 2017-4-8 11:37
我完全理解我图片中函数的意思。这图片中的函数,正是我在网易云课堂(上面的回复都讲错了,在此更正) ...

严格来说,是没错的
只是写法有些不够严谨,让入门者疑惑而已~

此例的关键在  global 的用法。
理解就好了~
不要钻牛角尖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:48:37 | 显示全部楼层
russellzhu 发表于 2017-4-8 11:37
我完全理解我图片中函数的意思。这图片中的函数,正是我在网易云课堂(上面的回复都讲错了,在此更正) ...

是的,在視頻中,對這個my_fun()函數的定義沒有體現出侷部變量和全局變量的關係,我理解錯你的意思啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 11:49:09 | 显示全部楼层
SixPy 发表于 2017-4-8 11:46
严格来说,是没错的
只是写法有些不够严谨,让入门者疑惑而已~

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

使用道具 举报

 楼主| 发表于 2017-4-8 11:50:41 | 显示全部楼层
新手·ing 发表于 2017-4-8 11:44
原谅我的愚蠢,视频到底哪错了

并没有讲错 局部变量和全局变量的关系。是代码的示例,并没有办法说明局部变量和全局变量的关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 11:52:33 | 显示全部楼层
russellzhu 发表于 2017-4-8 11:50
并没有讲错 局部变量和全局变量的关系。是代码的示例,并没有办法说明局部变量和全局变量的关系

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 06:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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