文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

学习python的第十四天(可变长参数,

2023-01-31 00:48

关注

一.可变长参数

1.可变长形参之(*)

形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数。需要注意的是:*后的参数名约定俗成为args。

def sum_self(*args):
    res = 0
    for num in args:
        res += num
    return res


res = sum_self(1, 2, 3, 4)
print(res)
#10

2.可变长实参之(*)

实参中的会将后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带的,它就是位置实参,应该马上打散成位置实参去看。

def func(x, y, z, *args):
    print(x, y, z, args)


func(1, *(1, 2), 3, 4)
#1 1 2 (3,4)

3.可变长形参之(**)

形参中的会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给后的参数。需要注意的是:**后的参数名约定俗成为kwargs。

def func(**kwargw):
    print(kwargw)


func(a=5)
#{'a': 5}

4.可变长实参之(**)

实参中的会将后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带的,它就是关键字实参,应该马上打散成关键字实参去看。

def func(x, y, z, **kwargs):
    print(x, y, z, kwargs)
func(1, 3, 4, **{'a': 1, 'b': 2})
#1 3 4 {'a': 1, 'b': 2}

5.可变长参数应用

def index(name, age, sex):
    print(f"name: {name}, age: {age}, sex: {sex}")


def wrapper(*args, **kwargs):
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")
    index(*args, **kwargs)


wrapper(name='nick', sex='male', age=19)

'''
args: ()
kwargs: {'name': 'nick', 'sex': 'male', 'age': 19}
name: nick, age: 19, sex: male
'''

二.关于函数的嵌套

最好返回值为函数名,不要是函数调用

#第一种
def f1():
    def f2():
        print('asdad')
    return f2
f2 = f1()
f2()
#第二种
def f1():
    def f2():
        print('asdad')
    return f2()
f1()

#最好用第一种方法运行,第二种运行可能会造成一些不必要的麻烦

函数内部的函数只能在函数内部调用,不能在函数外部调用

def f1():
    def f2():
        print('asdad')

f2() 会报错 ,f2没有定义

三.名称空间

1.内置名称空间

名称空间(name spaces):在内存管理那一章节时,我们曾说到变量的创建其实就是在内存中开辟了一个新的空间。但是我们一直在回避变量名的存储,其实在内存中有一块内存存储变量名与变量间的绑定关系的空间,而这个空间称为名称空间。

生命周期:在python启动时候,python关闭时候

2.全局名称空间

全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间.

生命周期:在文件执行时生效,在文件执行结束后失效

3.局部名称空间

局部名称空间:用于存放函数调用期间函数体产生的名字.`

生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效

如:

x = 1                    # 其中X,f1为全局名称空间,print为内置名称空间,f2为局部名称空间

print(x) 

def f1():
    def f2():
        print('from f2')
    f2()

f1() 

关于三种名称空间的加载顺序:

内置名称空间→全局名称空间→局部名称空间

名称空间的查找顺序

x=1
def f1():
    def f2():
        x = 3 
        print(x)
    f2()
x=3
f1()
print(x)

关于查找:

如果查找的起点在局部名称空间内,他会先在局部空间他的位置开始自之下而上开始寻找,如果在局部空间内找不到,再去全局名称空间开始寻找如果还没找打他会去去内置名称空间寻找他不会去另外的局部空间进行查找

如果起点在全局名称空间,他不会去局部空间开始查找,他会去全局开始寻找,如果全局没找到他会去内置名称空间寻找.

四.关键字

1..global关键字

修改全局作用域中的变量。

x = 1


def f1():
    x = 2

    def f2():
        global x  # 修改全局
        x = 3
    f2()


f1()
print(x)
#3

2.nonlocal关键字

修改局部作用域中的变量。

x = 1


def f1():
    x = 2

    def f2():
        nonlocal x
        x = 3

    f2()
    print(x)


f1()

3.注意点

1,两个关键字必写在须在局部名称空间变量名第一次出现的上面
2.在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。
3.在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改。
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯