函数进阶 —— 动态参数、内置空间、函数嵌套

函数的参数有:形参、实参、行参、位置参数、关键词参数、默认参数,今天我们来讲讲动态参数!

动态参数(*args)

动态参数位置在位置参数后面!

  View Code

 关键字的形式传参(**kwargs)

1 def func(a,b,c,*args,x=1,y=1,z=1,**kwargs):
2     print(a,b,c)
3     print(args,kwargs)
4     print(x, y, z)
5 func(1,2,3,4,e=1,f=2,g=3)
6     # 1 2 3
7     # (1,2,3,4,5)
8     # 1 1 1
9     # {'e': 1, 'f': 1, 'g': 1}
关键字的形式传参

 

那么我们只输入关键字参数,下图会输出什么呢?

 最后只输出了(){‘a’:4,‘b’:5}

def func(*args,**kwargs):
    print(args,kwargs) # args = () kwargs = {'a':4,'b':5}
func(a=4,b=5)

def func(*args,**kwargs):
    print(args,kwargs) # args = (1,2,3) kwargs = {}
func(1,2,3)
View Code

输出:

 () {'a': 4, 'b': 5}
(1, 2, 3) {}

def func(*args,**kwargs):
    print(args,kwargs) # args = () kwargs = {}
func(1,2,3,a=4,b=5)
View Code

输出:(1, 2, 3) {'a': 4, 'b': 5},args和kwargs都只接受对应自己的实参。

 总结:

1.args和 kwargs 是可以更换的,但是程序员约定都用它
  用途:在不明确接受参数,数量时使用*args和**kwargs
2.动态位置参数 > 动态关键字参数
  形参: 位置 > 动态位置 > 默认参数 > 动态默认参数
  实参: 位置 > 关键字参数
3.在实参调用的时候 *将可迭代的对象打散,字典是将键取出
在形参处出现*就是在聚合
4.在实参调用的时候 **将字典打散成 关键字参数(键=值)
在形参处出现**就是将关键字参数聚合成一个字典





函数的注释:

def aaa(user,pwd):
    """
    登录函数
    :param user: 用户名
    :param pwd: 密码
    :return: 校验后的账号和密码
    """
    print(111)

print(aaa.__doc__)


登录函数
    :param user: 用户名
    :param pwd: 密码
    :return: 校验后的账号和密码
View Code
 
 

名称空间

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

 
加载顺序:
'''
1.内置空间
2.全局空间
3.局部空间
'''

# 取值顺序:
'''
1.局部空间
2.全局空间
3.内置空间
4.找不到就报错
'''
 
# 作用域:
'''
1.全局作用域 内置+全局 = 全局作用域
2.局部作用域 函数内的就是局部作用域
global:

a = 10
def func():
    global a  # (声明)我要修改a 找到要a
    a+=1      # 修改
func()
print(a)
View Code
 

输出的a是11

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

输出的a是1


重点:函数的嵌套:

def func():
    print(3)
    def f():
        print(1)
    print(2)
    f()
func()
函数的嵌套1
 

函数的嵌套2
 
 



猜你喜欢

转载自www.cnblogs.com/chitangyuanlai/p/10530557.html
今日推荐