day10 python学习 函数的嵌套命名空间作用域等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day10 python学习 函数的嵌套命名空间作用域等相关的知识,希望对你有一定的参考价值。

1、三元运算

#1.三元运算
利用已下方法就可以实现一步运算返回a b中大的值
def my_max(a,b):
    c=0
    a=int(input(请输入))
    b=int(input(请输入))
        # if a>b:
        #     c=a
        # else:
        #     c=b
    #或者这样
    c = a if a > b else b
    return c
ret=my_max(1,3)
print(ret)

2.补充上节差的知识点

形参:

#位置参数

#默认参数(关键字参数)

#动态参数

     *args:接收说有按照位置传递的参数,接收到的是参数是组成的元祖

     *kwargs:接收说有按关键字传递的参数,接收到的是参数组成的字典

这次讲的是动态参数

参数的排序    如果各种参数都在函数中使用,就要以以下的形式排序

def func3(a,b,c,*args,key=‘key‘,**kwargs):
#2.动态参数
def func(a,b,c,*args,key="key"):  #在参数前面加一个* 这个参数就变成了动态参数
    print(a,b,c)                   #默认参数放在动态参数后边
    print(key)               #参数
    print(args)
set=func(1,2,3,sd,11,22,33,key=aaa)
以下是返回值
# 1 2 3 #前边这三个必须有,少一个都不能 # aaa #返回的就是此次的正常结果 # (‘sd‘, 11, 22, 33) 使用的时候,所有传入的值都被组织成元祖的形式
技术分享
#动态参数2  **kwargs的用法
def func3(a,b,c,*args,key=key,**kwargs):
    print(a,b,c,)
    print(key)
    print(args)
    print(kwargs)
set=func3(1,2,3,sdash,key=www,x=3,y=alex) #这里最后的kwargs要注意不要写成与
以下是返回值                                     #前边的形参的关键字参数有重复                     
                                                #如不能在后写成a="alex"会报错
# 1 2 3
# www
# (‘sdash‘,)
# {‘x‘: 3, ‘y‘: ‘alex‘}    #kwargs这个传入的值都会组织成字典的形式
View Code
#4魔性用法
def func4(*args):
    print(args)
li=[1,2,3,4,5]
# func4(li) #  得到以下结果
#([1, 2, 3, 4, 5],)  直接将列表传递到函数的话,他会直接弄成一个大的元祖
func4(*li)  #结果如下  在列表名前加一个*就是打散的意思,这样可以一一是放在元祖中去
#(1, 2, 3, 4, 5)       也有**dic的用法  

3.命名空间

三种命名空间之间的加载与取值顺序:

加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

取值:

  在局部调用:局部命名空间->全局命名空间->内置命名空间

技术分享

 

 

4.作用域

技术分享

 全局作用域

技术分享

局部作用域

技术分享

 

技术分享

 

 

nonlocal的用法,和他的作用
n=2 def func(): n=4 def func2(): nonlocal n #想要引用上一层的并改变他得值就得用nonlocal这个,如果只是引用不用nonlocal n n +=1 func2() print(n) #运行程序打印的是5 说明上一层的n=1在最下层被修改成功了 func()
内层函数想要改变全局变量中的n的值的话就要用global 来引入全局变量
n=2 def func(): n=4 def func2(): global n#想要引用全局变量的并改变他得值就得用这个,如果只是引用不用nonlocal n n +=1 func2() print(n) #运行程序打印的是4 说明上一层的n=4没有被改变 func() print(n) #运行结果还是3 说明只是改变了全局变量n=2的值

 

 

 

函数的嵌套

 

技术分享

输出的结果

技术分享 

技术分享

 输出结果是  我是qqxing

 技术分享

 




以上是关于day10 python学习 函数的嵌套命名空间作用域等的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之路day4-函数高级特性装饰器

python学习-day15:局部变量与全局变量嵌套函数递归

python学习day11

python—day10

python学习(day4)

python之路---10 *args **kwargs 命名空间 作用域 函数的嵌套