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这个传入的值都会组织成字典的形式
#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学习 函数的嵌套命名空间作用域等的主要内容,如果未能解决你的问题,请参考以下文章