• PythonDay10


    第十章函数进阶

    今日内容

    • 函数的参数 动态参数

      • 动态接收位置参数

      • 动态接收关键字参数

    • 函数的注释

    • 名称空间

    • 函数的嵌套

    • global、nonlocal

      • global的宗旨

      • nonlocal宗旨

    1.函数的参数 动态参数

    动态接收位置参数:
    # 动态位置参数
    # def eat(*args): # 函数的定义阶段 *聚合(打包)
    #     print(args) # tuple
    #     print(*args) # 函数体中的*表示打散(解包)
    def eat(*args):
    pirnt('我想吃',args)

    eat('大米饭', '米饭', '饭')
    # 收到的结果是一个tuple元组
    动态接收参数的时候:动态参数必须在位置参数后面
    无论是否给*args值,它都是一个元组(),若不给值,就是()
    def eat(a, b,*args):
    print("我想吃",args,a,b)

    eat('大米饭','米饭','饭')
    # 我想吃 ('饭',) 大米饭 米饭
    # 默认参数放在最后边,通过关键字传参
    def eat(a,b,*args,c='白菜'):
      print('我想吃',a,b,args,c)
    eat('猪肉','粉条','豆腐','大葱')

    结果:
    我想吃 猪肉 粉条 ('豆腐', '大葱') 白菜

    注意: 形参的顺序: 位置参数 , 动态参数 , 默认参数

    动态接收关键字参数:
    def func(*args,**kwargs):
      print(args,kwargs)

    lst = [1,23,5]
    dic = {'k1':4, 'k2':5}
    func(*lst,**kwargs)
    func(1,23,5,k1=4,k2=5)

    最终顺序:

      位置参数 > *args(动态位置参数) > 默认值参数 > **kwargs(动态默认参数)

    总结
    # 总结:
      # *args(聚合位置参数)     大家伙都用的名字, 可以进行修改但是不建议修改
      # **kwargs(聚合关键字参数) 大家伙都用的名字, 可以进行修改但是不建议修改

      # 函数的定义阶段 * 和 ** 都是聚合
      # 函数体中 * 就是打散, *args将元组中的元组进行打散 *kwargs将字典的键获取

      # 实参和函数体:
      #     * 打散
      #     ** 实参时能够使用

    2.函数的注释

    def func(a, b):
      """
      计算两数相加
      :param a:
      :param b:
      :return: a + b
      """
    return a + b
    func(1, 10)

    # print(a.__doc__)
    # print(b.__doc__) # 查看函数的注释
    # print(a.__name__) # 查看函数的名字

    3.名称空间

    • 内置空间:Python解释器自带的空间

    • 全局空间:py文件中顶格写的就是全局空间

    • 局部空间:函数中就是局部空间

      取值顺序:

      # 1.局部空间
      # 2.全局空间
      # 3.内置空间

      加载顺序:

      # 1.内置空间
      # 2.全局空间
      # 3.局部空间
      

    4.函数的嵌套

    不管在什么位置,只要是函数名()就是在调用一个函数
    

    5.global、nonlocal

    global : 只修改全局,如果全局没有就创建一个全局变量

    nonlocal : 只修改局部,修改离nonlocal最近的一层,上一层没有继续向上上层查找.只限在局部

    a = 10
    def func():
        global a			# 声明之后,就可以对全局变量进行修改
        a += 1
        print(a)
    func()
    
    # nonlocal只能修改离nonlocal最近的一层,且不包括全局变量,如果没有就报错
    def run():
    	a = 19
    	def func():
    		print('123')
    		def fun():
    			nonlocal a
    			a = 10
    			print(a)
    		fun()
    run()
    
  • 相关阅读:
    最小路径和
    S2 深入.NET和C#编程 机试测试错题积累
    S2 深入.NET和C#编程 笔试测试错题积累
    影院项目的内容信息
    抽象类和抽象的方法注意事项
    六种设计原则
    体检套餐的笔记
    C#图解 类和继承
    深入类的方法
    S2 深入.NET和C#编程 三:使用集合组织相关数据
  • 原文地址:https://www.cnblogs.com/xuyuwei/p/11360039.html
Copyright © 2020-2023  润新知