zoukankan      html  css  js  c++  java
  • 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: 在局部...内层函数引入外层离他最近的那个变量.

  • 相关阅读:
    WampServer Mysql配置
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 前10名
  • 原文地址:https://www.cnblogs.com/robertx/p/10087439.html
Copyright © 2011-2022 走看看