今日内容总结
函数参数之位置参数
位置形参: 函数定会阶段括号内从左至右填写的变量名
def aaa(1,2,3):
print(1,2,3)
位置实参: 函数调用阶段括号内从左往右填写的数据值
aaa(a,b,c)
'''
要与位置形参做到一一对应 多了或少了均会报错
'''
# 关键字传参的格式:
关键字传参必须要在位置传参后面
口诀:越短越简单越靠前
越长越复杂越靠后
同一形参不可多次赋值
# aaa(a=1,b=2,c=3)
如果 位置实参与关键字传参互相组合 必须是位置参数在关键子参数前
# aaa(1,b=2,c=3) # 结果与上述一样
使用关键字传参可以打乱位置 不过要遵循一个形参不可多次赋值
# aaa(b=1,c=2,a=3)
实参没有固定的定义 可以传数据值 也可以传绑定了数据值的变量名
n=123
m=456
t=789
# aaa(n,m,t)
默认参数
# 在定义函数给参数直接赋值 若在后续的调用阶段没有新的值输入 则会保持之前赋的值
本质就是关键字传参
'''默认参数也遵循 简单的靠前 复杂的靠后'''
def infor(name,age=18):
print(name,age)
infor('xiaochen',19) # 如果输入了则就按照所输入来执行
infor('jason') # 不输入也不会报错
可变长参数
可变长形参
def fff(*a):
'''加入*号的形参会接受所有多余的数据值 不输入也行'''
print(a)
1.fff() # ()
2.fff(1) # (1,) 产生的结果会是一个元组
当位置形参与可变长形参一起使用时
def fff(a,*b):
'''必须有一个数据值给a 不然会报错'''
print(a)
fff(1,2,5,5,4) # 数据的第一个值会给a 后面多余出的数据自动组成元组赋值给b
def fff(**k):
'''也可以接受多种数据值 不输入也不会报错'''
print(k)
1.fff() # {}
2.fff(b=1,c=2) # {'b':1,'c':2} **可接受多余的关键字传参并自动组成一个字典返回
# 多种形参混合使用
1. * 与 ** 混合使用
def fff(*a,**k):
print(a,k)
fff() # *可以接收多余的数据值 **可以接收多余关键字传参所以兼容性十分高
2.位置参数与可变长参数混合使用
def fff(c,*a,**k):
print(c,a,k)
fff() # 由于加了位置参数的原因所以必须加入一个数据值 来提供给c
可变长实参
# 用法
def fff(a,b,c):
print(a,b,c)
l1 = [1,2,3]
fff(*l1) # 可将列表中的数值拆分成一个一个的数据值 在一次性赋值给形参
'''
1.这种方法适用于与形参个数相等数据值个数的元组,集合以及与字符串字符相等的字符串
2.与for循环的遍历类似 但是将遍历出的值一次性赋值给形参
3.字典参与时只有键会参与
'''
# 如果想要获取字典的键所绑定的值
def fff(a,b,c):
print(a,b,c)
dict_1={'a':1,'b':2,'c':3}
fff(**dict_1) # 将字典中键的值赋值给形参
'''
注意:
1.只有字典键与形参相等时才可以
2.遵守一一对应
'''
命名关键字参数
#让形参只能按照关键字参数传参
代码实现:
def fff(a,*b,c=555,**d):
print(a,b,c,d)
fff(1,22,333,444,f=666)
'''
如果不使用关键字传参 c将无法接受到新的数据 就只能绑定555 而且不会报错
'''
名称空间
'''
name='xiaochen'
在使用变量名绑定数据值时底层的原理是申请一块空间来存储数据值 用变量名来表达这个数据值的坐标
那么变量名存哪?
'''
# 名称空间 就是负责存储变量名和变量名绑定的数据对应关系的地方
1.内置名称空间
解释器运行时自动储存
eg: len print
2.全局名称空间
py文件使用时 里面存放的文件级别名字
name = 'xiaochen'
eg: name
3.局部名称空间
函数体代码执行时 产生的空间
名称空间存货周期以及作用范围(域)
# 存活周期
1.内存名称空间
随着python解释器启动而产生 关闭就销毁
2.全局名称空间
py文件打开而创建 运行结束则销毁
3.局部名称空间
函数体代码运行(函数被调用)而产生 函数体代码结束销毁(类不考虑)
# 作用域
1.内存名称空间
解释器级别的全局有效
2.全局名称空间
py文件全局有效
3.局部名称空间
函数体代码内有效
名字的查找顺序
# 局部名字查找
局部名称空间>>>全局名称空间>>>内置名称空间
# 全局名字查找
全局名称查找>>>内置名称查找
查找循序案例
1.相互独立的局部名称空间默认不能相互访问
def fff():
name = 'jason'
print(age)
def aaa():
age = 19
print(name)
# 直接报错
2.局部名称空间的嵌套
先从自己的名称空间查找 之后从内到外查找
'''函数体代码中名字的查找顺序在函数定义阶段就以及固定'''
eg:
x = '全局名称'
def func1():
x = '局部一'
def func2():
x = '局部二'
def func3():
# 如果print在这会直接报错 无法查找
x = '局部三'
# 如果print在这就会打印 '局部三'
func3()
func2()
func1()
标签:11,传参,形参,名称,print,fff,def
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/16776427.html