Erlo

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

时间:2019-03-15 15:01   阅读:44次   来源:博客园页面报错

点赞 打赏

×打赏

支付宝

微信

本节内容:

1.动态参数

2.函数的注释

3.函数名称空间(三个空间)

4.两个作用域、全局变量和局部变量

5.函数的嵌套

 

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

 

 

动态参数(*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.在实参调用的时候 **将字典打散成 关键字参数(键=值)
在形参处出现**就是将关键字参数聚合成一个字典




 


 

2.函数的注释:

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

print(aaa.__doc__)


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

View Code

 

3.名称空间

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

 


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

# 取值顺序:
'''
1.局部空间
2.全局空间
3.内置空间
4.找不到就报错
'''

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

全局变量:定义在函数外部的变量
局部变量:定义在函数内部的变量
global(指定全局变量):在局部空间只修改全局变量,没有就创建修改。
nonlocal(指定上一级变量):在局部空间内,修改最近的上一层变量,如果没有就继续往上一层查找,

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


重点:5.函数的嵌套:

def func():
    print(3)
    def f():
        print(1)
    print(2)
    f()
func()

函数的嵌套1

函数的嵌套2

 




下一篇:Python基础——字符串操作

评论留言

还没有评论留言,赶紧来抢楼吧~~

Erlo大厅()

* 这里是“吐槽厅”,所有人可看,只保留当天信息。

  • Erlo.vip2019-05-24 14:42:49Hello、欢迎使用吐槽厅,这里是个吐槽的地方。
  • 首页 笔记分享 案例展示 ERLO 搜索
    鼠标试试
    返回顶部