python基础 day10 函数式编程、名称空间、作用域、高阶函数
一、函数的参数
3.万能参数
*args
函数定义时,*代表聚合,它将所有的位置参数聚合成一个元组,赋值给了args
def fun_name(*args):
print('%s, %s, %s, %s' % args)
fun_name('jason', 'carly', 'dog', 'cat')
练习:写一个函数,计算出传入函数的所有数字的乘积
def func(*args):
result = 1
for i in args:
result = i * result
return result
print(func(1, 2, 3, 4))
**kwargse
函数定义时,**代表聚合,它将所有的关键字参数聚合成一个字典,赋值给了kwargs
def info(**kwargs):
print(kwargs)
info(name='jason', age=24, sex='man')
# 万能参数
def info(*args, **kwargs):
print(args)
print(kwargs)
形参的顺序:
def func(位置参数,*args,默认参数,仅限关键字参数,**kwargs):
# 默认参数和仅限关键字参数顺序可互换
在函数调用时,*代表打散
- 打散的只能时可迭代对象
- 实际效果相当于for循环每一个传入的可迭代对象,在将循环得到的结果传给*args
def func(*args):
print(args)
func(*'1234', *'5678') #结果为('1', '2', '3', '4', '5', '6', '7', '8')
def func(*args):
print(args)
func(*[1, 2, 3, 4], *[5, 6, 7, 8]) # 结果为(1, 2, 3, 4, 5, 6, 7, 8)
def func(*args):
print(args)
func(*{'k1': 'v1', 'k2': 'v2'}, *{'k3': 'v3', 'k4': 'v4'})
# 结果为('k1', 'k2', 'k3', 'k4')
用**只能打散字典
- 实际效果相当于for循环传入的每一个字典,而kwargs就是循环得到的所有键值对构成的一个字典
def func(**kwargs):
print(kwargs)
func(**{'k1': 'v1', 'k2': 'v2'}, **{'k3': 'v3', 'k4': 'v4'})
# 结果为{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}
*的其他用法
# 首先看下分别赋值
a, b = (1, 2)
print(a, b) # 1 2
# 其实还可以这么用:
a, *b = (1, 2, 3, 4,)
print(a, b) # 1 [2, 3, 4]
*rest, a, b = range(5)
print(rest, a, b) # [0, 1, 2] 3 4
print([1, 2, *[3, 4, 5]]) # [1, 2, 3, 4, 5]
二、名称空间
-
全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间
-
局部命名空间--> 在函数中声明的变量会放在局部命名空间
-
内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间
加载顺序:内置命名空间-->局部命名空间-->全局命名空间
取值顺序:全局命名空间-->局部命名空间-->内置命名空间
三、作用域
1.全局作用域:内置名称空间、全局名称空间
2.局部作用域:局部名称空间
- 局部作用域可以引用全局作用域的变量
- 全局作用域不可引用局部作用域的变量
- 局部作用域不可改变全局作用域的变量
globals() locals()
a = 1
b = 2
def func():
c = 3
d = 4
print(globals())
print(locals())
func()
四、高阶函数
def func1():
print(1)
def fun2():
print(2)
print(3)
fun2()
print(4)
func1()
"""结果为:
1
2
3
4
"""
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单