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]

二、名称空间

  1. 全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间

  2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间

  3. 内置命名空间--> 存放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
"""

猜你喜欢

转载自www.cnblogs.com/west-yang/p/12590616.html