python 函数进阶

形参角度:

  • 万能参数:

    • 动态接收位置参数:*args
    • ​ **动态接收关键字参数:**kwargs **
  • *的魔性用法:

    • 函数定义时 ,*代表聚合。他将所有的位置参数 聚合成一个元组,赋值给了args;
    • 函数定义时: **将所有的关键字参数聚合成一个字典中,将这个字典赋给了 kwargs;
    • *和 **在函数的调用时 *代表打散
  • 仅限关键字参数:

    # def func(a,b,*args,sex='男',c,**kwargs):
    #     print(a,b)
    # func(1,2,3,4,sex='女',c='仅限关键字参数')
    
  • 形参的最终顺序:

    • 所有形参的顺序为:**位置参数, *args, 默认参数,仅限关键字参数, ****kwargs。
  • 名称空间:

    ​ Python分为三个空间:

    ​ 内置名称空间、(builtings.py文件)

    ​ 全局名称空间、(当前py文件)

    ​ 局部名称空间 (函数执行时才开辟空间)

  • 全局名称空间 局部名称空间(临时命名空间)

  • 内置命名空间:Python 源码给提供的一些内置函数 print input

    全局名称空间:存放的是yp文件里(除去函数和类内部的)的变量,函数名与函 数的内存地址的关系

    局部名称空间:存放的是函数内部的变量与值的对应关系

  • 加载顺序,

    ​ 内置名称空间-------》全局名称空间-------》局部名称空间 (执行函数时)

    取值顺序:(就近原则) 单向不可逆 LEGB

    ​ (从局部找变量)局部名称空间 ----->全局名称空间----->内置名称空间

    局部作用域 不能 改变 全局作用域的 全局变量,当Python解释器读取到局部作用域时发现了对一个变量进行自改的操作,解释器会认为你在局部已经定义过这个局部变量了,他就从局部作用域找这个局部变量,报错了

  • 作用域:两个作用域:

    ​ 全局作用域:内置名称空间与全局名称空间,不能获取局部作用域中的变量

    ​ 局部作用域:局部名称空间 ,可以从全局作用域中获取变量,

LEGB ==就近原则
  • 函数的嵌套(高阶函数)

  • 内置函数:

	# glbals()   返回的是字典:字典里面的键值对:全局作用域的所有内容。
	# locals()   返回的是字典:字典里面的键值对:当前作用域的所有的内容。

总结:

1、参数 :万能参数 仅限关键字参数 *的魔性用法(聚合 打散),参数的顺序

2、名称空间 作用域 取值顺序 加载顺序

3、glbals() locals()

4、高阶函数

  • # 函数以功能(完成一件事)为导向,登录 注册,
    # 一个函数就是一个功能,一个函数只能写一个功能
    # 何时需要 何时调用,随调随用
    
    # ****函数的优点:
    # 1 减少代码的重复;
    # 2 增强代码可读性。
    
'''
结构:
def    关键字,定义函数
meet   函数名,与变量名设置相同,具有可描述性
函数体  函数体要缩进,函数中尽量不要出现print

# 函数什么时候执行?
# 当函数遇到 ****** 函数名()*****  函数才会执行
#  meet()遇到几次就执行几次
'''
'''
# return 总结:
1、在函数中 终止函数
2、return 可以给函数的执行者返回值:
    1、单个值    单个值
    2、多个值    元组(多个值,多个值) ('函数值', 123, [22, 22]) <class 'tuple'>
'''
'''
# 实参角度:
1、位置参数。:从左至右一一对应
2、关键字参数。:一一对应,不用从左至右
3、混合参数。:位置参数一定要在关键字参数前边
'''
# 形参角度:
# 1、位置参数。:从左至右一一对应
# 2、默认值参数。  设置的意义:普遍经常使用的
# 3、仅限关键字参数
# 4、万能参数
原文地址:https://www.cnblogs.com/an-wen/p/10878219.html