设为首页 收藏本站
查看: 1494|回复: 0

[经验分享] Python15 作用域、局部与全局变量

[复制链接]

尚未签到

发表于 2018-8-13 09:42:44 | 显示全部楼层 |阅读模式
1.
  

def test(name):  

  print ('before',name)
  

  name = '22'             #该name变量属于局部变量,只在该函数中生效;该局部就相当于一个作用域
  

  print ('after',name)    #name引用的是局部变量的name
  

  
name = 11        #全局变量:函数外面的变量就是全局变量;全局变量在整个程序中都生效。
  

  
test(name)        #赋值给test函数的name参数,这个值引用的是全局变量的name
  

  
print (name)     #引用的是全局变量
  

DSC0000.png

DSC0001.png

DSC0002.png

  可以看到函数中的局部变量不会影响 全局的变量。
DSC0003.png

DSC0004.png

  可以通过global的方式在函数中把变量变成全局变量(不是引用全局变量),然后就可以对全局变量进行修改了。
DSC0005.png

DSC0006.png

  可以看到全局没有变量,在函数中使用global也是可以的;
  不过在实际编程中不建议使用global,不要在函数中修改全局变量,因为编程时一个函数可能会被多次调用,当一个程序写的比较复杂时,且函数被调用多次,会很难找到一个变量到底在哪里被修改,会造成非常混乱的情况。  这样情况出错很难调试。

2.
DSC0007.png

DSC0008.png

  函数中的局部变量不能修改全局变量,也只限于简单的字符串和整数
DSC0009.png

DSC00010.png

  稍微复杂点形式的变量,比如列表,是可以被修改的。 列表、字典、集合、类等都可以被修改,元组本身就是不可变的,所以不能修改。

3.递归
  函数可以调用其他的函数,函数调用自身就叫做递归。
DSC00011.png

DSC00012.png

  最多可以调用999次(999层),这是python的保护几次,防止无限调用下去,导致机器卡死。
  但是自身循环999次没有任何意义,所以必须要有一个明确的结束条件
DSC00013.png

  设立结束条件 n/2 >0,递归不断的除以2
DSC00014.png

  小数点也大于0,所以会一直除以2
  2.3891548633682403e-298   最后会计算成这样的数字,这数字e后面的多少是十的负几次幂,也属于小数点。
DSC00015.png

DSC00016.png

  int将数字变成整数就不会出现小数点了,然后就可以整除了。
DSC00017.png

  效果与使用int一样,不能有小数点,必须是整数来整除
  递归特性:


  •   必须有一个明确的结束条件

  •   每次进入更深一层递归时,问题规模相比上次递归都应有所减少 (比如第一层列表是10个,下一次,也就是下一次调用自身列表中的元素就要比10要少)

  • 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
4.函数式编程
  此函数非非彼函数,之前学的函数是函数中编写一些代码,而这里要将的函数是指数学中的函数运算。
  函数式编程,只要输入是确定的,输出就是确定的。
  对于计算机来说越抽象,计算效率就越低,python就属于这种,所以python语言不适合做函数式编程。
  适合函数式编程的语言有lisp、hashshell、erlang

5.高阶函数
  变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
  

def add(a,b,f):  return f(a)+f(b)
  

  
res = add(3,-6,abs)
  

  #abs是python自带的一个函数,将数字变成绝对值,也就是会将负数6变成正数6,这里就相当于3+6=9
  
print (res)
  

DSC00018.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551001-1-1.html 上篇帖子: Python10 三级菜单 下篇帖子: python持久化模块-shelve模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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