目录

  • 函数重要参数

  • 名称空间

  • 名称空间的查找顺序

  • 名称空间的作用域

  • global与nonlocal关键字

  • 函数名的多种使用方式

  • 函数重要参数

 

1.可变形参

""" *args:接收多余的位置参数,以元组形式储存

**kwargs:接收多余的关键字参数,以字典形式储存 """

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

# print(args)

# print(kwargs)

# func()     # () {}

2.可变实参

""" *args:接收多余的位置参数,以元组形式储存

**kwargs:接收多余的关键字参数,以字典形式储存 """

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

# print(args)

# print(kwargs)

# l1 = [1, 3, 5, 7]

# func(*l1)      # (1, 3, 5, 7) {}

# l1 = {'name':'kevin','age':22}

# func(**l1)    # () {'name': 'kevin', 'age': 22}

3.关键字形参

""" 形参中c必须以关键字参数传值位置必须在*args参数后面,如果有**kwargs,在它之前"""

# def func(name,age,*args,c):

# print(name, age, args, c)

# func('kevin',22,c = 'read') # kevin 22 () read

# func('kevin', 22,'read') # 报错

# def func(*args,c, **kwargs):

# print(args, c, kwargs)

# func(c = 'read') # () read {}

 

 

  • 名称空间

1.定义:存放变量名与数据值绑定关系的空间

2.分类:

2.1 内置名称空间 len()

python解释器中创建好的空间,解释器运行立即创建,解释器关闭销毁

2.2 全局名称空间

py文件运行代码过程中创建的变量名存入的空间,文件执行结束销毁
普通代码里面的变量名 a
分支结构里面的变量名 b
循环结构里面的变量名 i
定义函数的函数名 func
定义类的类名
# a = 111
# if 1 == 1:
#     b = 333
# for i in range(3):
#     pass
# def func():
#     pass

2.3 局部名称空间函数体代码运行过程中创建的变量名存入的空间,函数体代码运行结束立即失效名称

空间的查找顺序注:局部名称空间>>>全局名称空间>>>内置名称空间

当前所在名称空间>>>(局部名称空间>>>全局名称空间>>>内置名称空间)

# len = '全局空间中'
# def func():
#     print(len)
# func()     # 全局空间中   <built-in function len>
# def func():
#     len = '局部空间中'
# print(len)
# func()    # <built-in function len>

 

  • 名称空间的作用域

1.内置名称空间

  在程序任意位置都可使用(全局有效)

2.全局名称空间

  在程序任意位置都可使用(全局有效)

3.局部名称空间

  在各自的局部空间可以使用(局部有效)

4.案例

4.1 互不干涉,若所在局部名称空间变量名无则报错

def func():
    name = 'kevin'
    print(age)
def func1():
    age = 22
    print(name)
func()
func1()

4.2先看当前所在func2的局部空间查找,若无查找func1的局部空间查找,无从func的局部空间查找,无从全局空间查找

a = 1                   
def func(): # a = 2 def func1(): # a = 3 def func2(): # a = 4 print(a) func2() func1() func()

4.3函数在定义阶段已确定变量名,所在局部名称空间中在打印之后被定义则报错

# a = 1
# def func():
#     print(a)
#     a = 2
# func()

global与nonlocal关键字

1.修改全局作用域中的变量

# a = 100
# def func():
#     a = 1000
#     print(a)      # 1000
# func()
# print(a)          # 100
# a = 100
# def func():
#     global a
#     a = 1000
#     print(a)      # 1000
# func()  
# print(a)          # 1000

2.修改局部作用域中的变量

2.1 修改可变类型直接用append

l1 = [1, 2, 3]
def func():
    l1.append(99)
    print(l1)
func()              # [1, 2, 3, 99]

2.2 修改不可变类型

def func():
    a = 2
    def func1():
        nonlocal a 
a = 3 print(a) # 3 3不存在2 func1() func()

 

  • 函数名的多种使用方式

 

1.函数名可以被多次赋值

def func():

print('kvin')
name = func
func()       # kvin
name()       # kvin

2.函数名可以当做实参的参数

def func():
print('kvin')
def name(a):
print(a)
name(func)  # <function func at 0x000001CBB92054C8>

3.函数名可以当做返回值

def func():
print('kvin')
def name():
return func
res = name()
print(res)       # <function func at 0x0000017C1A1C54C8>
res()            # kvin

4.函数名还可以当做容器类型里面的数据值

def func():
print('kvin')
l1 = [1, 2, 3, func]
print(l1)          # [1, 2, 3, <function func at 0x000001BC67095288>]
l1[-1]()           # kvin

 
 posted on 2022-07-04 22:19  拾荒菇凉  阅读(76)  评论(0)    收藏  举报