python基础(*args,**kwargs、聚合与打散、函数注释与嵌套、名称空间与global,nonlocal使用)

一、参数的高级方法:

  1.1 参数的定义:

    1.1.1 用途:

      在不明确接收参数数量时使用*args和**kwargs

    1.1.2 特点:

      args和 kwargs 是可以更换的,但是程序员(约定俗成)都用它

      形参: 位置 > 动态位置 > 默认参数 > 动态默认参数

      实参: 位置 > 关键字参数

    1.1.3 动态参数:

      位置参数 > 动态的位置参数

  
# 动态参数示例:


# 位置参数 > 动态的位置参数
def func(a,b,c,*args):  # 在形参位置*叫做聚合
    print(a,b,c)
    print(args)   # 元组形式

func(1,2,3,4,5,9,6,7,8)
View Code

    1.1.4 动态默认参数:

      默认参数 > 动态默认参数

  
# 动态默认参数:


# 默认参数 > 动态默认参数
def func(**kwargs): # 形参的时候**聚合
    print(kwargs)  # 字典

func(a=1,b=2,c=3) # 关键字的形式传参
View Code

    1.1.5 综合示例:

  
# 综合示例

# 示例1:
# 动态参数与动态默认参数
def func(*args, **kwargs):
    print(args, kwargs)  # args = () kwargs = {}

func(1, 2, 3, a=4, b=5)

# 示例2:
def func(a, b, c, *args, x=1, y=1, z=1, **kwargs):
    print(a, b, c)  # 位置参数
    print(args, kwargs)  # 动态位置参数(元组)和动态默认参数(字典)
    print(x, y, z)  # 默认参数
    # 1 2 3
    # (1,2,3,4,5)
    # 1 1 1
    # {'a': 1, 'b': 1, 'c': 1}

func(1, 2, 3, 4, 5, e=1, f=2, g=3)
View Code

二、聚合与打散:

  2.1 聚合的定义:

    2.1.1 形参:

      在形参处出现*就是在聚合成一个元组

      在形参处出现**就是将关键字参数聚合成一个字典

    2.1.2 实参:

      在实参调用的时候 *将可迭代的对象(字符串,列表,元组,字典,结合)打散
      在实参调用的时候 **将可迭代的对象(字典)打散,字典是将键取出 关键字参数(键=值)

    2.1.3 聚合与打散的方法:

  
# 聚合:
li = [1, 2, 3, 5, 4]
def func(*args):  # 聚合 (1,2,3,5,4)
    print(args)
    print(*args)  # 打散 1,2,3,5,4

func(*li)  # 1,2,3,5,4


# 打散
def func(*args, **kwargs):  # * 聚合
    print(*args)  # *args = 1 2 3 *打散
    print(*kwargs)  # *kwargs = a b *打散 字典的键


func(1, 2, 3, a=4, b=5)
View Code

    2.1.4 综合示例:

  
# 字典的聚合与打散:
dic = {'a': 1, 'b': 2}
def func(*args, **kwargs):  # 聚合 {'a': 1, 'b': 2}
    print(args, *kwargs)  # print('a','b')


func(**dic)  # 字典打散后:a=1,b=2以关键字参数传入



# 列表的聚合与打散:
def func(*args, **kwargs):  # 聚合 (1,2,3,5,4)
    print(*args, *kwargs)  # print(1 2 3 4)

func(*[1, 2, 3, 4])
View Code

三、 函数的注释:

  3.1 定义:   

    """ """ 官方推荐
    查看注释: func名.__doc__
    查看函数名: func名.__name__

  3.2 应用:

    对程序注释作用,方便程序的查阅理解

  3.3 注释示例:

  
# 示例


def func(user, pwd):
    """
    登录函数
    :param user: 用户名
    :param pwd: 密码
    :return: 校验后的账号和密码
    """
    print(666)
print(func.__doc__)  # 查看注释
print(func.__name__)   # 查看函数名
View Code

四、 名称空间:

  4.1 定义:

    内置空间中所有代码 -- 内置空间
    自己写的py文件 -- 全局空间
    函数中的代码 -- 局部空间

  4.2 加载顺序:

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

  4.3 取值顺序:  

    1.局部空间
    2.全局空间
    3.内置空间
    4.找不到就报错

  4.4 作用域:
    1.全局作用域 内置+全局 = 全局作用域
    2.局部作用域 函数内的就是局部作用域

  4.5 关键字(global,nonlocal)用法:

    4.5.1 定义:
      global :

         在局部修改全部变量,如果没有就创建一个新的
      nonlocal :

        在局部空间内,修改离自己最近的变量,如果上一层没有就继续向上找,
        直到找到局部变量的顶层,局部空间内没有可以修改的变量,就报错

    4.5.2 global关键字的用法:

  
# 类型示例1
a = 10
def func():
    global a  # (声明)我要修改a 找到要a
    a+=1      # 修改
func()
print(a)



# 类型示例2
def func():
    global a  #(声明我要修改a,找不到a的时候在全局创建一个 a=0)
    a = 1  # a = 1
func()
print(a)
View Code

    4.5.3 nonlocal关键字的用法:

  
# nonlocal关键字的用法:

# 在一个局部空间内,nonlocal会修改离他最近的那个变量,如果上一层
# 没有就继续向上找,直到走到局部空间头部

# 类型示例1
def func1():
    def func2():
        a = 1
        def func3():
            nonlocal a
            a = 8
            print(a)
        func3()
    print(func2())
func1()

# 打印:8 None



# 类型示例2
def func():
    a = 1
    def log():
        a = 5                # a = 15(修改后的值)
        def info():
            nonlocal a       # 声明修改log函数下边的变量a
            a += 10          # a = a + 10  a = 15
            print(a)         # 15
        info()
        print(a)             # 15
    log()
    print(a)                 # 1
func()


# 打印:15 15 1
View Code

五、函数的嵌套:

  5.1 定义:

    函数嵌套 多个函数嵌套调用

  5.2 综合示例:

  
# 第一种函数嵌套 在函数func内
def func():
    print(3)
    def f():
        print(1)
    print(2)
    f()
func()

# 3 2 1


# 第二种函数嵌套 多个函数嵌套调用
def func2():
    print(1)
    log()

def func1():
    print(3)

def log():
    func1()
    print(6)
    def fun():
        print(7)
    fun()

func2()

# 1 3 6 7
View Code

 

posted @ 2019-03-23 16:53  Amorphous  阅读(622)  评论(0编辑  收藏  举报