python 函数的进阶

# def eat(*food):
#     print(food)
# eat('大米饭','小米饭')保存的形式是元组
# def func(**kwargs):
#     print(kwargs)
# func(山刀='面',老家='早饭')#保存形式是字典
#接收任参数
# def func(*args,**kwargs):
#     print(args,kwargs)
# func('马化腾','那云',wtf = '胡辣汤')

  

1. 函数参数--动态传参
2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序.
3. 函数的嵌套
4. gloabal, nonlocal关键字

动态猜数

*args **kwargs

位置关系 

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

二 命名空间

在python解释器开始执⾏行行之后, 就会在内存中开辟⼀一个空间, 每当遇到⼀一个变量量的时候, 就
把变量量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内
存, 表⽰示这个函数存在了了, ⾄至于函数内部的变量量和逻辑, 解释器是不关⼼心的. 也就是说⼀一开始
的时候函数只是加载进来, 仅此⽽而已, 只有当函数被调⽤用和访问的时候, 解释器才会根据函数
内部声明的变量量来进⾏行行开辟变量量的内部空间. 随着函数执⾏行行完毕, 这些函数内部变量量占⽤用的空
间也会随着函数执⾏行行完毕⽽而被清空.
def fun():
a = 10
print(a)
fun()
print(a) # a不不存在了了已经..
我们给存放名字和值的关系的空间起⼀一个名字叫: 命名空间. 我们的变量量在存储的时候就
是存储在这片空间中的.
命名空间分类:
1. 全局命名空间--> 我们直接在py⽂文件中, 函数外声明的变量量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量量会放在局部命名空间
3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内
置命名空间
加载顺序:
1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执⾏行行的时候)
取值顺序:
1. 局部命名空间
2. 全局命名空间
3. 内置命名空间
a = 10
def func():
a = 20
print(a)
func() # 20
作⽤用域: 作⽤用域就是作⽤用范围, 按照⽣生效范围来看分为 全局作⽤用域和局部作⽤用域
全局作⽤用域: 包含内置命名空间和全局命名空间. 在整个⽂文件的任何位置都可以使⽤用(遵循
从上到下逐⾏行行执⾏行行). 局部作⽤用域: 在函数内部可以使⽤用.
作⽤用域命名空间:
1. 全局作⽤用域: 全局命名空间 + 内置命名空间
2. 局部作⽤用域: 局部命名空间
我们可以通过globals()函数来查看全局作⽤用域中的内容, 也可以通过locals()来查看局部作
⽤用域中的变量量和函数信息
a = 10
def func():
a = 40
b = 20
def abc():
print("哈哈")
print(a, b) # 这⾥里里使⽤用的是局部作⽤用域
print(globals()) # 打印全局作⽤用域中的内容
print(locals()) # 打印局部作⽤用域中的内容
func()

 函数的嵌套看括号

1. 只要遇⻅见了了()就是函数的调⽤用. 如果没有()就不是函数的调⽤用
2. 函数的执⾏行行顺序

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

  

关键字

global 全局变量

nanlocal 局部变量

 

# a = 100
# def func():
#     global a
#     a = 8
#     print(a)
# func()
# print(a)
a = 10
def func1():
    a = 20
    def fun2():
        nonlocal a
        a = 30
        print(a)
    fun2()
    print(a)
func1()

  

 

posted @ 2018-06-12 18:56  又见芳踪  阅读(150)  评论(0编辑  收藏  举报