前言
本文为菜作者自学过程中总结的笔记,以简明便于查阅为主,包含了一些知识点以及作者走过的一些坑。如有错误,随时提出指正。
函数的变量作用域
函数的legb查找顺序
python中函数的查找是按照一定的顺序进行的,这个顺序就是LEGB原则。
L(local):函数内变量
E(enclosing function locals):外部嵌套函数
G(global):函数所在的模块或者程序文件的变量名称
B(builtin):内置模块
全找不到相应变量名,则会报错。
实例如下:
同样的num变量名,在函数中与在全局中输出不是一个数字。
global关键字定义全局变量
global关键字可以实现,引用全局变量。
用了global之后,num=2不再是定义一个新变量,而是直接把num进行了新的赋值。
防重名定义变量名形式
编程序时,容易出现重复的变量名称,可以使用以下的方式防止出现重复
local_num定义局部
function_num定义参数
GLOBAL_num定义全局
(有这方法可以防止重名,但是我没实战用这个方法过,这里摆出来以后万一用到了,好查询吧)
闭包结构
闭包结构描述
闭包结构是一种,自定义函数内嵌套自定义函数的形式。
也就是def里面套def
如下:
总结一些作者在闭包结构淋过的雨
实例中a=num(1)的理解
我当初看这里时,这个a=num(1)类似的东西看半天愣是看不懂啥玩意。后面跟上了注释,有的小伙伴应该是能看懂了。
这个的意思就是,我设置了a这个变量,a=num(1)这个函数,相当于我设定了num(1):
但是呢,我里面还嵌套着一个local_num()自定义函数,需要我赋值。
那么我在num(1)这个函数的条件下,再给local_num这个函数赋予一个2的参数,那么也就是实例中
a=num(1)
print(a(2))
的意思了。
当初这种类似的玩意,给我的cpu干烧了。。。。。
return返回函数报错
当初打这种闭包结构时,总是报错,大概是类似于这种情况
我输入选中的那个括号就是我当年犯错的元凶。
我当年常常想返回内部函数的结果时,写个return 函数()
这样写,pycharm也没提示我犯错了,但就是报错。
大概我自己后来理解是这样的错因
我要输出local_num的结果,那我应该写return 函数名
我加括号的错因可能是,我输出了这个内部函数,这个内部函数应该设置一个参数
我这样写,就变成了我输出local_num在等于某个数时返回的结果
如果我想从下面赋值而不是在函数本身中赋值的话
我应该去掉那个括号
这个直接把我cpu干炸了.......
lambda表达式
这是一个关键字,是一个匿名函数具体语法是:
函数对象=lambda 参数,参数.........:执行的程序
实例如下:
这个也算一个函数,只不过这个用法简单,用不着return,很方便
主函数
主函数的形式
if __name__=="__main__":
注意事项与解释和作用
注意事项:下划线是两个,后面那个__main__要加引号
解释:这个主函数意思就是程序的开端,这个是标准化的程序格式。python中没有强制性要求你去用这个开端,所以也可以不用,但是从标准化来讲,在程序的开始需要加上一个这个
作用:这个__name__在这个文件作为脚本运行时等于"__main__",作为模块时是文件名字,所以一下的内容只能在作为脚本运行时才可以实现。
我是看到这篇博客明白的,他解释的很详细,如果想进一步了解可以去看一看。
https://blog.csdn.net/u012288582/article/details/131060681
我跟主函数的爱恨交织
这个玩意我这个没编程基础的是真没搞懂他是想干嘛。为什么好端端的非要搞一个if。
而且是可有可无的东西。当初学的时候,我看他可有可无直接给他甩了,懒得去了解他。
后来在写这篇博客时我又看到了这部分内容,本着闲着没事再看一眼的想法突然明白了这时怎么回事。具体理解如下
主函数的理解
你可以理解为,这个主函数是一个形式。
在if __name__=="__main__":之前,我们把我们需要用的模块或者函数该定义好定义好,该引入引入,然后在if __name__=="__main__":之后,我们再进行我们的程序处理。所以我们说这个是一个程序的开始。
证据:
通过咱csdn的c知道的回答,肯定了我这个想法,所以这个没搞懂得东西,在我写博客时顺带搞懂了。
编写程序过程中遇到的其他现象,以及解决方法
编写时经常出现print()执行后的结果后面总带个none
这种情况一般是print里面包了print造成的
遇到这种情况,可以去检查一下print的问题
菜作者的错误更正区
1.if __name__=="__main__":要加引号,当时输入忘记加上了。