• python中的函数


    1.函数参数---动态传参

     形参的第三种:

      动态参数的接收方式

      1.动态接收位置参数,动态接收参数的时候要注意:动态参数必须在位置参数后面

    def func(*food):
        print('>>>',food)
    
    func('桃子','苹果')  
    #  >>> ('桃子', '苹果')   这样传参的结果是得到一个元组

      2.动态接收关键字参数

        在python中可以动态的位置参数,但是 * 这种情况只能接收位置参数无法接收关键字参数

        在python中使用**来接受动态关键自参数,这个时候接收的是一个dict

     # python中使用**kwargs来接收动态关键字参数
    def func(**kwargs):  
        print('>>>',kwargs)
    
    func(a = '桃子', b = '苹果')
    #>>> {'a': '桃子', 'b': '苹果'}

        所以最终的顺序是

            位置参数 > *args > 默认值参数 >**kwargs

        这四种参数可以任意的进行使用

    def func(*args, **kwargs):
        print(args, kwargs)
    func("麻花藤","⻢晕",wtf="胡辣汤")
    这个样子就可以接收所有的参数了

      动态传参的另一种方式:

        1. 在实参位置上给一个序列,列表,可迭代对象前⾯加个*表示把这个序列按顺序打散.    

    def fun(*args):
        print(args)
    
    lst
    = [1, 4, 7] fun(lst[0], lst[1], lst[2])
    fun(
    *lst) # 可以使用*⼀一个列表按顺序打散 s = "臣妾做不到" fun(*s) # 字符串也可以打散, (可迭代对象)

        2. 在形参的位置上的* 表示把接收到的参数组合成一个元组,如果是一个字典,也可以打散.不过需要用两个*

    def func(**kwargs):
        print('>>>',kwargs)
    
    dic = {'a ':'桃子', 'b ':'苹果'}
    func(**dic)
    
    #>>> {'a ': '桃子', 'b ': '苹果'}

    2. 作用域和名称空间  

      名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的

      1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
      2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
      3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)

      名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

    a = 10
    def func():
        a = 20
        print(a)
    func() # 20

      加载顺序:
        1. 内置命名空间
        2. 全局命名空间
        3. 局部命名空间(函数被执⾏行行的时候)


      取值顺序:
        1. 局部命名空间
        2. 全局命名空间
        3. 内置命名空间

      作用域:
        1. 全局作用域: 内置+全局
        2. 局部作用域: 局部

      globals() 查看全局作用域
      locals() 查看当前作用域

        我们可以通过globals()函数来查看全局作用域中的内容, 也可以通过locals()来查看局部作用域中的变量和函数信息

    3. 函数的嵌套

    在函数中声明函数
    在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

    # 函数的嵌套
    def fun2():
        print(222)
        def fun3():
            print(666)
        print(444)
        fun3()
        print(888)
    print(33)
    fun2()
    print(555)    

    4. nonlocal和global关键字

      global: 在局部引入全局变量
      nonlocal: 在局部...内层函数引入外层离他最近的那个变量.

  • 相关阅读:
    我的游戏开发工作生涯要开始了
    关于碰撞检测和物理引擎
    关于havok
    认识多渲染目标(Multiple Render Targets)技术
    无限分级的tree
    运用ThreadLocal解决jdbc事务管理
    盒子模型 计算
    监听域对象
    爱恨原则 就近原则 (LVHA)
    java database connection
  • 原文地址:https://www.cnblogs.com/robertx/p/10087439.html
Copyright © 2020-2023  润新知