python函数和函数式编程

——以下所有内容均来自于蓝鲸运维SaaS开发实战公开课的ppt,我对其进行了整理做了笔记,便于以后查看学习。

函数

声明函数:

def hello():
	print("hello function")

调用函数:
使用()进行调用hello(),函数也是对象
在这里插入图片描述
可以把函数名赋值给变量。

在这里插入图片描述
参数:

  1. 必备参数
    定义:
def func(p):
	print("p is {}".format(p))
func(1)
func(p=1)
#结果:
p is 1
p is 1
  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
  1. 可变参数(覆盖所有参数调用)
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}
  1. 可变参数调用
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 关键字类似。可以把局部变量变成不是局部变量。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值