自认为是一个很爱学习的人,学的东西乱而杂,大多只懂一个皮毛就不想深入了。自学的东西很多又杂,缺乏专注,时间投入太少,导致思维混乱,非常的迫切需要一个系统、专业的梳理。因此想尝试写下博客,让自己在短时间内专注一门知识,养成总结的和思考的习惯。
上个月买的《“笨方法”学python3 》已经看了一半,从软件安装到现在的条件语法的学习,这一部分内容比较简单。后面的部分需要多多总结和实践,因此学记博客就显得尤为重要了。
另加,PyCharm之python书写规范--消去提示波浪线 https://www.cnblogs.com/jyfootprint/p/9409927.html
pycham代码过长换行,只需在最后添加“\”换行即可。
-
return的作用
1、函数结束的标志
如:
def f():
print("Hello")
return f
print("world")
“world”将无法打印,因为函数在return时已结束。
2、将值返回给对象。
注意点:如果不写return,则默认返回none;如果有多个对象,python将帮我们将多个对象封装为元祖,并返回。
-
函数的作用域(LEGB)
我算是疯了,在网上找了下legb的信息,所有的博客内容都介绍的齐全无比好像都是培训资料的样子,来龙去脉无比清楚。不知道博客怎么写,我还是简单的写下自己的理解吧。
所谓的LEGB呢,就是Local (局部变量)-> Enclosed(闭包作用域) -> Global(全局变量) -> Built-in(内建函数),其中的箭头方向表示的是搜索顺序。具体点表达就是:
-
Local 可能是在一个函数或者类方法内部。
-
Enclosed 可能是嵌套函数内,比如说 一个函数包裹在另一个函数内部。
-
Global 代表的是执行脚本自身的最高层次。
-
Built-in 是Python为自身保留的特殊名称。
局部变量无权修改全局变量
#代码1
#说明局部变量无法修改全局变量
counter = 10
def outer():
print(counter)
counter = 5
outer()
#此时报错UnboundLocalError: local variable 'counter' referenced before assignment(局部变量counter在使用前未定义)#垃圾翻译0.0#
# python在程序运行前会将函数加载至缓存,在def 部分print(counter)时,会在局部作用域内检索counter变量,而后发现counter变量存在,但定义位置却在使用之后,因此报错UnboundLocalError。
#代码2
#如何在局部作用域内对全局变量进行操作?
counter = 10
def outer():
global counter
print(counter)
counter = 5
print(counter) #再次打印counter
outer()
#输出结果为:
10
5
#嵌套函数
def outer():
counter = 10
def inner():
nonlocal counter #使用nonlocal 提升权限
counter = 20
print(counter)
inner()
print(counter)
outer()
小结
(1)变量查找顺序:LEGB,就是Local (局部变量)-> Enclosed(闭包作用域) -> Global(全局变量) -> Built-in(内建函数),其中的箭头方向表示的是搜索顺序。
(2)只有模块、类及函数才能引入新作用域
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量。
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是python 3 新增的关键字,有了这个关键字,就能完美的实现闭包了。
-
Ubuntu学习
1、重置Ubuntu密码
重启Ubuntu,按住shift键,-->输入e-->修改“ro........”为“rw init=/bin/bash”,回车-->输入命令“passwd”开始修改密码-->
退出重进即可。
2、Ubuntu删除guest session
(该图摘自网络)
打开终端,输入命令
sudo sh -c 'printf "[SeatDefaults]\nallow-guest=false\n" > /etc/lightdm/lightdm.conf.d/50-no-guest.conf'
退出保存即可