鱼C论坛

 找回密码
 立即注册
查看: 2235|回复: 0

[技术交流] 18 - 函数:我的地盘听我的(函数的可见性问题) - 景命

[复制链接]
发表于 2017-7-8 20:45:16 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 景命 于 2017-7-9 10:13 编辑

知识点:

函数和过程:
        函数(function):是有返回值的。
        过程(procedure):是简单的、特殊并且没有返回值的。

        很多编程语言会把函数和过程分开,但在Python中严格来说只有函数没有过程。
                例:
  1. def hello():                                #定义一个无返回值的函数
  2.         print("Hello World!")

  3.        
  4. >>> one = hello()                        #调用函数hello(),并且将返回值赋值给变量one
  5. Hello World!
  6. >>> print(one)                        #输出one
  7. None                                        #显示one为None(空)
  8. >>> type(one)                        #查看one的类型
  9. <class 'NoneType'>                #显示one为NoneType
复制代码

       
由此可以看出,就算再定义函数是不返回任何值,在调用函数后还是会返回None(空)对象的。

在Python中函数可以打包返回多个值:
        (1)利用列表来返回多个值
  1. def back():
  2.         return [1,3.14,"布布"]                #将要返回的值放入列表,实现返回多个值

  3. >>> back()
  4. [1, 3.14, '布布']
复制代码


        (2)利用元组来返回多个值
  1. def back():
  2.         return 1,3,14,"布布"                        #直接用逗号隔开的方式也可以实现返回多个值。

  3. >>> back()
  4. (1, 3, 14, '布布')                                #返回值类型默认为元组
复制代码




函数变量的作用域问题(也叫做变量的可见性)
        局部变量(local variable):
                在函数内部定义的变量、参数他们都称之为局部变量,出了函数这些变量都是无效的。
       
        全局变量(Global variable):
                在整个代码段中都是可以被访问的,可以在函数的内部去访问他,但是不要试图在函数内部去修改他。如果试图在函数内去修改全局变量的话,Python会自动创建一个新的局部变量代替,名字和全局变量一样。


小甲鱼建议不到万不得已不要使用全局变量,简洁的概括为(小甲鱼原话):
        1)代码可读性变差
        2)代码安全性降低
                以下关于全局变量的危言耸听是传来的,大家不妨也看下:
                       
  • a)它会造成不必要的常量频繁使用,特别当这个常量没有用宏定义“正名”时,代码阅读起来万分吃力。
  • b)它会导致软件分层不合理:全局变量相当于一条快速通道,他容易使程序员模糊了“设备层”和“应用层”之间的边界,写出来的底层程序容易自作多情地关注起上层的应用,这在软件系统的构建初期的确效率很高,功能调试进度一日千里,但到了后期往往bug一堆,处处“补丁”,雷区密布,说是度日如年举        步维艰也不为过。
  • c)由于软件的分层不合理,到了后期未尾,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺修改,涉及大多数模块,而原有的代码注释却忘了更改,这个时候,交给后来维护者的系统会越来越像一个“泥潭”,注释唯一的作用只是使泥潭上方在加一些迷烟瘴气。
  • d)全局变量大量的使用,少不了有些变量流连忘返与中断于主回圈程序之间,这个时候如果处理不当,系统的bug就是随机出现的,无规律的,这时候初步显示出病入膏肓的特征来了,没有大牛来力挽狂澜,注定慢性死亡
  • e)无需多言,如果你的系统中大量的使用全局变量,那么你已经成功得到一个畸形的系统,它处于一个神秘的稳定状态!你看着这台机器,机器也看着你,相对无言,心中发毛,你不确定他什么时候会崩溃,也不晓得下一次投诉什么时候到来。



评分

参与人数 2荣誉 +5 鱼币 +8 收起 理由
康小泡 + 3
小甲鱼 + 5 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 04:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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