【python笔记】函数的进阶知识点以及遇到的坑,包含变量作用域,闭包结构,lambda表达式以及主函数

前言

本文为菜作者自学过程中总结的笔记,以简明便于查阅为主,包含了一些知识点以及作者走过的一些坑。如有错误,随时提出指正。

函数的变量作用域

函数的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__":要加引号,当时输入忘记加上了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北岭敲键盘的荒漠猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值