9.函数参数 与 名称空间

【一】函数作为参数

1)分类

1.形参

  • 函数定义时,括号内声明的值;用来接收外部传来的值

2.实参

  • 函数调用时,括号内传入的得值;常是常量,变量,表达式或三者组合

2)位置参数

  • 参数数量不对会报错
  • 必须按照顺序传入,否则顺序会乱

3)关键字参数

  • 需指定定义时的名字,可不按位置传入

4)默认参数

  • 函数定义时,就给一个参数赋了值
  • 如果给了新值就会覆盖原来的值

5)可变长度参数

​ 函数调用时,实参个数可以不固定

1.可变长位置参数(*args)

def eg(a, b, *args):
    print(a, b)  # 1 2
    print(args)  # (3, 4, 5)
eg(1, 2, 3, 4, 5)

2.可变长关键字参数(**kwargs)

def eg(a, b, **kwargs):
    print(a, b)  # 1 2
    print(kwargs)  # {'c': 3, 'd': 4}
eg(a=1, b=2, c=3, d=4)

3.*解包

使用 *+可迭代类型 就能将每一个元素单独解包出来

print([1, 2, 3])  # [1, 2, 3]
print(*[1, 2, 3])  # 1 2 3
print(*{'name': 'diva'})  # name

6)命名关键字参数

定义形参时,用*隔开

  • *前:
    • 参数支持位置和关键字传参
    • 位置参数在前,关键字参数在后
  • *后:
    • 参数必须按照关键字传参
    • 默认参数允许在位置参数后

7)组合使用

  • 位置参数、默认参数、*args 、**kwargs
  • 位置参数必须在关键字在前;不能重复赋值

【二】类型特殊语法参数Optional

1)注释概念

定义函数的位置参数时可以指定参数类型

2)基本类型注释

1.不可变数据类型

  • 数字,字符串,布尔

    def 函数名(参数:指定类型)-> 返回值类型:
    	代码块
    	return 返回值
    

2.可变数据类型

  • 字典,列表,元组,集合

  • Dict,List,Tuple,Set

    #导入类型模块,以支持类型注解
    from typing import 类型
    def 函数名(参数:指定类型[不可变类型]) -> 返回值类型:
        代码块
        return 返回值
    # 字典的{键:值}都要约束
    

3.Union类型

  • 允许参数接受多种不同类型的数据

    from typing import Union
    def 函数名(参数:Union[类型1,类型2]) -> Union[类型1,类型2]:
        代码块
        return 返回值
    

4.Optional 类型

  • 参数可以指定类型或None

    from typing import Optional 
    def 函数名(参数:Optional[类型1]) -> Optional[None]:
        代码块
        return 返回值
    

【三】名称空间

1)内建名称空间

  • Python解释器自带的名称空间
  • 第一个加载的名称空间

2)全局名称空间

  • 随着内建名称空间加载完成
  • 用户创建的,如变量名、函数名、类名

3)局部名称空间

  • 函数内部定义的变量
  • 随着函数而存在

4)加载顺序

  • 加载顺序

    • 内建名称空间->全局名称空间->局部名称空间,
  • 查找顺序

    • 局部名称空间->全局名称空间->内置名称空间。

【四】作用域

1)变量作用域

1.Local(局部变量)

  • 用于暂时存放,作用于当前整个函数体

2.Enclosed(嵌套)

  • 用于函数中嵌套函数内,作用于闭包函数

3.Global(全局)

  • 用于模块文件顶层声明的变量,用于当前模块

4.Built-in(内置)

  • 随着python启动而加载

2)LEGB规则

按照L - E - G - B的顺序查找变量

3)变量的修改

  • global修改全局变量
    • 将第一层函数内的变量修改到函数外层
  • nonlocal修改外层函数变量
    • 将第二层函数内的变量修改到第一层函数内
posted on 2024-04-15 19:04  晓雾-Mist  阅读(17)  评论(0)    收藏  举报