zoukankan      html  css  js  c++  java
  • Day 10 函数的进阶

    1. 函数的动态参数
        1. *args 位置参数动态传参
      2. **kwargs 关键字参数动态传参
      顺序:位置参数, *args, 默认值, **kwargs

    # by luffycity.com
    # def chi(good_food, no_good_food, drink, xx, xxx,ice_cream):
    #     print(good_food, no_good_food, no_good_food, drink, ice_cream)
    #
    # chi("盖浇饭","馒头","腊肠", "橙汁","哈根达斯")
    #  顺序: 位置参数=>*args(arguments) => 默认值参数
    # * 在这里表示接收位置参数的动态传参, 接收到的是元组
    # def chi(name,*food, location="北京"): # 参数名是food  *表示动态传参
    #     print(location)
    #     print(name+"要吃", food)
    #
    # chi("刘旺鑫","狗不理","大麻花","天津")
    # # chi("刘旺鑫","大米饭","小米饭")
    # # chi("刘旺鑫","馒头")

    def func(*args, **kwargs):
      pass

      形参的位置*,**: 聚合
      实参的位置*,**: 打散

    顺序
      位置参数, *args, 默认值参数, **kwargs
      随以上参数可以意搭配使用

     1. 实参:
       位置参数
       关键字参数
       混合参数(位置, 关键字)
     2. 形参:
       位置参数
       默认值参数
     动态传参:
      *args: 位置参数动态传参
      **kwargs: 关键字参数动态传参
    顺序: 位置, *args, 默认值, **kwargs
      def fun(a, *args, c="哈哈", **kwargs):
        print(a, args, c, kwargs)

      fun(1, 2, 3, 4,5, 6)

    # 单行注释
      '''多行注释'''
      函数注释
    def func(a, b):
      """
    x这个函数是用来计算a和b的和
      :param a: 第一个数据
      :param b: 第二个数据
      :return: 返回的是两个数的和
      """
      return a + b

       print(func.__doc__) # document文档x

    # 接收所有参数
    # def func(*args, **kwargs):# 无敌 *args相当于一个聚合的作用
    print(args, kwargs)
    #
    # func(1,2,3,4,5,a=6,b=7,c=9)

    # 形参: 聚合
    # def func(*food): # 聚合, 位置参数
    # print(food)
    # lst = ["鸡蛋","煎饼果子","猪蹄","滋滋冒油"]
    # # 实参: 打散
    # func(*lst) # 打散. 把list, tuple, set, str 进行迭代打散

    # 聚合成关键字参数
    # def func(**kwargs):
    # print(kwargs)
    #
    # dic = {"name":'alex', 'age':'18'}
    # func(**dic) # 打散成关键字参数

    # a = 10 # 全局名称空间中的内容
    #
    # def fn(): # fn也在全局名称空间
    #     b = 20 # 局部名称空间
    #     print(a)
    # def gn():
    #     print(a)
    # fn()
    # gn()
    # 1. 内置, 2. 全局 , 3. 局部(函数调用)
    # a = 110 # 全局
    # def fn(): #
    #     b = 20 # 局部
    #     def gn(): # 局部
    #         print(globals())  # 可以查看全局作用域中的内容
    #         print(locals())  # 查看当前作用域中的内容
    #     gn()
    # fn()
    # def outer():
    #     print("哈哈")
    #     def inner_1():
    #         print("呵呵")
    #         def inner_1_1():
    #             print("嘻嘻")
    #         inner_1_1()
    #         print("吼吼")
    #     def inner_2():
    #         print("嘿嘿")
    #     inner_2()
    #     inner_1()
    # outer()

    ----------------------------------------------------------------------------------------------------------------------------------------------------

    2. 命名空间
      1. 内置名称空间
      2. 全局名称空间
      3. 局部名称空间

    # a = 10 # 全局变量本身就是不安全的, 不能随意修改, 闭包
    # def func():
    #     global a  # 1. 可以把全局中的内容引入到函数内部 , 2. 在全局创建一个变量
    #     # a = 20
    #     a += 10 # a = a+10
    #     print(a)

    作用域:
     1. 全局作用域: 内置+全局
     2. 局部作用域: 局部(函数被调用)
      globals() 查看全局中的内容
      locals() 查看当前作用域中的内容
    3. 函数嵌套
      函数可以互相的嵌套
    4. global和nonlocal关键
      global: 在局部访问全局中的内容
      nonlocal: 在局部寻找外层函数中离他最近的那个变量

    # func()
    # print(a)
    # a = 10
    # def outer():
    #
    #     def inner(): # 在inner中改变a的值
    #         nonlocal a # 寻找外层函数中离他最近的那个变量
    #         a = 20
    #     inner()
    #
    # outer()
    a = 1
    def fun_1():
        a = 2
        def fun_2():
            global a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
  • 相关阅读:
    Kettle进行数据迁移(ETL)
    Visual Studio常用快捷键
    RESTful API 设计指南
    理解RESTful架构
    LINQ for XML简单示例
    .NET导入导出Excel方法总结
    AJAX + WebService 实现文件上传
    GitHub使用教程
    .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
    ASP.NET 操作Excel中的DCOM配置方式
  • 原文地址:https://www.cnblogs.com/songhuasheng/p/9449280.html
Copyright © 2011-2022 走看看