函数参数的两大分类
1.形式参数
在函数定义阶段括号内依次写入的变量名就叫形式参数,简称‘形参’
2.实际参数
在函数调用阶段括号里一次传入的变量值就叫实际参数,简称‘实参’
3.形式参数和实际参数之间的关系
把实际参数传递给形式参数,以形参=实参的形式传入——一变量名=变量值的形式传入
形参相当于变量名,实参相当于变量值
形参和实参在函数调用阶段临时绑定,当函数调用完毕,两者断开
形参形式只有一种,那就是变量名
实参有很多方式,但抓住本质:数据值
位置参数和关键字参数
位置参数
在函数括号一次写入的参数就是位置参数
位置形参
在函数定义阶段括号从左往后依次写入变量名就是位置形参
位置实参
在函数调用阶段括号里从左往右一次写入变量值就是位置实参
1 #写一个注册学员信息功能 2 def register(name,age,gender) 3 print(‘%s:%s:%s’%(name,age,gender)) 4 5 #位置传参必须一一对应
关键字实参
可以打破原来的循序传递,就是传递参数不在按照顺序传递
register(age=18, name='kevin', gender='female') register('kevin', age=18, 'female') # 不行,位置参数不能跟在关键字的后面 register('kevin', age=18, gender='female') # 行 register(age=18, 'kevin', gender='female') # 不行 register('kevin', name=18, gender='female') # 不行
总结:位置参数不能卸载关键字后面,越简单的参数越靠前
默认参数
前提:默认的是形参
在函数定义阶段就被赋值了
1.如果你在函数调用阶段,没有给形参传值,那就默认的
2.如果函数在调用阶段给形参传值,就是要传的值
练习一: 如果默认值是列表的话,比较特殊:以后调用函数的时候,hobby用的都是一个 def register(name,age,hobby=[]) hobby.append(age) print('%s:%s;%s'%(name,age,hobby')) 练习二: m=200 def func(a,b,c=m) print(a,b,c) m=400 func(1,2)#(1,2,200) 两个角度理解 角度1: 在函数定义阶段,参数的值就已经固定死了,不能修改 角度2: 根据变量名和变量值在内存中关系来判断
可变长参数
1.不管我在调用函数的时候,传入多少个位值参数,都能正常运行
def index(name,password,x,y,*a):
print(name,password,a,x,y)
*号在形参中的使用:会接收多余的位置参数
2.不管我们在调用函数的时候,传入多少个关键字参数,都能正常运行
**号在形参中使用:接受多余的关键字参数
def index(username,age,gender,hobby,**a)
print(username,age,gender,a)
3.不管我传入多少个位置参数和关键字参数,函数都能正常运行
def index(*a,**b)
print(a,b)
4.注意:
*号和**号后面的变量可以任意取名,遵循变量原则即可
zaipython中,推荐使用*args:arguments 位置参数
**kwags:keyword arguments 关键字参数
以后在定义函数时候,如果我们不知道要传递多少个参数,我们就可以如下定义
def index(*args,**kwargs):
pass
5.*在实参中的使用,就是把列表、元组中一个一个元素打散,然后以位置参数的形式传递
针对列表这种里面肯能存放多个元素的时候,我们利用*打散成一个个的元素
6.**号在实参中的使用:把字典打散成关键字的形式进行传递
名称空间
什么是名称空间?
就是绑定变量名与变量值关系的地方
名称空间的分类:
1.内置名称空间
Python解释器内置的,可以直接拿来使用的
2.全局名称空间
Python文件中,顶格写的变量都是在全局名称空间中
name='jason' name就是全局变量,他就是在全局名称空间中存着
3.局部名称空间
在函数中存在的都是局部的
print(locals())
print(globals())
名字查找顺序
名字的查找:
先看你自己再哪个位置
全局 >>> 内置
先看你自己再哪个位置
局部 >>> 全局 >>> 内置
"""验证变量的查找顺序:局部 >>> 全局 >>> 内置"""
标签:12,name,python,gender,age,基础,参数,print,实参 From: https://www.cnblogs.com/shanghaipudong/p/17435344.html