——以下所有内容均来自于蓝鲸运维SaaS开发实战公开课的ppt,我对其进行了整理做了笔记,便于以后查看学习。
函数
声明函数:
def hello():
print("hello function")
调用函数:
使用()进行调用hello()
,函数也是对象。
可以把函数名赋值给变量。
参数:
- 必备参数
定义:
def func(p):
print("p is {}".format(p))
func(1)
func(p=1)
#结果:
p is 1
p is 1
- 默认参数
def func(a,b=1,c=2):
print("a={},b={},c={}".format(a,b,c))
func(1,1,1)
func(1,c=1)
func(1)
#结果:
a=1,b=1,c=1
a=1,b=1,c=1
a=1,b=1,c=2
- 可变参数(覆盖所有参数调用)
def func(a,*args,**kwargs):
print("a={},args={},kwarges={}".format(a,args,kwargs))
func(1)
func(1,c=1)
func(1,1,1)
func(1,2,3,x=8)
#结果
a=1,args=(),kwargs={}
a=1,args=(),kwargs={'c':1}
a=1,args=(1,1),kwargs={}
a=1,args=(2,3),kwargs={'x':8}
- 可变参数调用
from datetime import datetime
datetime(year=1997,month=7,day=1)
#结果:
datetime.datetime(1997,7,1,0,0)
args=(0,10,2)
list(range(*args))
#结果:
[0,2,4,6,8]
kwargs={"year":1997,"month":7,"day":1}
datetime(**kwargs)
#结果:
datetime.datetime(1997,7,1,0,0)
Built-in函数
作用域:
-
LEGB解析顺序:Local,Enclosing,Global,Built-in
-
global关键字
explain_scope.py
global关键字会把我们想要变成全局变量的变量变成全局变量。
当使用global关键字后:
-
全局变量大写首字母,局部变量全小写
-
不要使用Built-in和关键字作变量/函数名
函数式编程
函数式编程:
拉曼达表达式:
可以参考一下我写的另一篇博客:
https://blog.csdn.net/weixin_43614026/article/details/108422983
内嵌函数/内部函数:
首先举一个函数嵌套最简单易懂的例子:
使用时需要注意,只有在fun1作用域中才能调用fun2,出来fun1作用域就不能再调用fun2. 使用闭包时也需注意该问题。
闭包:
对于闭包,举一个简单例子,funy位于funx的作用域内,并且funy使用了funx的参数x,funx返回的返回值是funy这个函数对象。(python中一切皆对象)
然后对funx进行调用,传入参数5,现在实际上 i = 5 * y ,此时i是一个函数对象,再调用i函数其参数为6,可得到计算结果是5*6=30。
用如下方式也可以进行调用。
接下来,举一个错误的例子,和解决办法:
报错信息是局部变量x没有被定义,x在fun1被赋值为5,但是在fun2内成为了fun2作用域的局部变量而且没有赋值,所以报错。
变量一般会存储在栈内,像元组列表等容器类型会存储在堆内,不会产生这样的错误。(这里我也有些不清楚,大家可以查查网上的资料)
解决方法一:
解决方法二: 使用 nonlocal 关键字,作用与 global 关键字类似。可以把局部变量变成不是局部变量。
最后
以上就是和谐水杯最近收集整理的关于python函数和函数式编程的全部内容,更多相关python函数和函数式编程内容请搜索靠谱客的其他文章。
发表评论 取消回复