第十天

万能参数:*args

接受位置参数

约定俗称:args


" * " 函数定义时, * 代表聚合

她将所有的位置参数 聚合 成一个元组,赋值给了args

形参角度的参数顺序

*args 的位置?

def func(a,b,sex="男",*args):

def func(a,b,sex="男",*args):
    print(a,b)
    print(sex)
    print(args)

func(1,2,3,4,5,6,7)

# sex=3
def func(a,b,*args,sex="男"):
    print(a,b)
    print(sex)
    print(args)

func(1,2,3,4,5,6,7,sex="女")


女
# args  (3, 4, 5, 6, 7)


关键字参数 **kwargs


接受关键字参数

**将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs

**kwargs的位置?

def func(a,b,*args,sex="男",**kwargs):
    print(a,b)
    print(sex)
    print(args)
    print(kwargs)

func(1,2,3,4,5,6,7,sex="女",name="333")

#1 2
女
(3, 4, 5, 6, 7)
{'name': '333'}


#* 在函数调用时,*代表打散 可迭代对象

#* * 在函数调用时,* * 代表打散 打散字典

def func(*args):
    print(args)

     # *在函数调用时,*代表打散
func([1,2,3],[22,33])
# ([1, 2, 3], [22, 33])


func(*"456456465465",*"asyudiyasuidyasi")
# ('4', '5', '6', '4', '5', '6', '4', '6', '5', '4', '6', '5', 'a', 's', 'y', 'u', 'd', 'i', 'y', 'a', 's', 'u', 'i', 'd', 'y', 'a', 's', 'i')

func(*[1,2,3],*[22,33])
# (1, 2, 3, 22, 33)

func(1,2,3,22,33)
# (1, 2, 3, 22, 33)
# 可迭代对象都可以   字符串也可以
# 后两个相等

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

func(**{"name":"太白"},**{"age":18})
两个*  打散字典
#{'name': '太白', 'age': 18}


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

func(*{"name":"太白"},*{"age":18})
一个* 只读取 键 key   打散 赋值给 args
#('name', 'age')
#{}

名称空间;命名空间.

创建一个函数,解释器只是把函数名读入内存,表示这个函数存在了,

至于函数内部的变量和逻辑,解释器不关心, 一开始只是加载进来,仅此而已,

只有当函数被调用和访问的时候,解释器才会根据内部声明的变量来开辟变量的内部空间

函数执行完毕,内部变量占用的空间也随之释放掉了

全局命名空间 当前py文件

整个文件里面变量的对应关系

局部命名空间 函数,函数执行时才会开辟

函数中的变量的对应关系

内置命名空间 builtins.py

python给你提供的一些内置函数 print input

print(666)

加载顺序:

内置--->

全局--->

局部名称空间(函数执行时)

取值顺序:(就近原则)

name= "他白"
def func():
    name="alex"
    print(name)
func()

(从局部找)局部名称空间-->

全局名称空间-->

内置命名空间

(不可逆)

作用域

全局作用域:内置名称空间 全局名称空间

局部作用域 : 局部名称空间

局部 作用域 可以引用 全局 作用域 ,不能改变

局部 作用域 不能改变 全局 作用域 的变量,当 python解释器读取到局部作用域时,发现了你对一个变量进行修改操作,解释器会认为你在局部已经定义过这个局部变量了,他就从局部照这个局部变量,报错了.

count=1

def fuc()

​ count+=2

​ print(count)

func()

报错

def func()
	count=1
    def inner():
        print(count)
     inner()
func()

就近原则   局部变量2   使用局部1 的   但是不能改变


高阶函数

多层函数的 执行顺序

内置函数


本文件:

globals() #返回的是字典,字典的键值对是 全局作用域 的所有内容

locals() #返回的是字典,字典的键值对是 当前作用域 的所有内容

posted @ 2020-02-25 00:18  小丁变优秀  阅读(190)  评论(1)    收藏  举报