python 函数之传参
一、参数的两大分类
1、形式参数
在'函数定义阶段'括号内依次写入的变量名就叫形式参数,简称"形参"
def index(a,b,c,d,e): pass
# a,b就称之为是函数的形参
补充:type在形参中的用法
def my_function(param: int): print(param * 2) # 参数类型限制为整数类型 # 进行相应的处理 my_function(12)
: int
指定了参数param
的类型应为整数。当传入其他类型的参数时,Python解释器可能会给出警告或错误。
2、实际参数
在'函数调用阶段'括号内依次传入的变量值就叫实际参数,简称"实参"
index(1, 2, 3)
# 1,2,3就称之为是函数的实参
二、
1、位置参数
在函数'定义阶段'括号内从'左往右依次'写入的'变量名'就是位置形参
def index(a,b,c,d): pass
# a,b,c,d就是位置形参
2、关键字参数(k=v)
在函数的'调用阶段'括号内从'左往右依次'写入的'数据值'就是位置实参
register(‘age’=18, ‘name’='kevin', ‘gender’='female')
3、默认参数
# 前提是默认的形参
- 在函数定义阶段就可以给参数赋值了
- 如果你在函数调用阶段,没有给形参传值,那就是要默认的
- 如果你在函数调用阶段,给形参传值了,就是要你传的值
练习1:
def register(name, age, gender='male'): print('%s:%s:%s' % (name, age, gender)) register('kevin', 18,)
练习2:如果默认值是列表的话,比特特殊:以后所有调用该函数的时候,hobby用的都是一个
def register(name, age, hobby=[]): hobby.append(age) print('%s:%s:%s' % (name, age, hobby))
三、
1、不管我在调用函数的时候,传入多少个位置参数,都能正常运行
def index(name, password, x, y, *a): print(name, password, x, y,a) index('jignzhi', 123, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
*号在形参中的使用:会接收多余的位置参数
返回值为元组类型
2、不管我们在调用函数的时候,传入多少个关键字参数,都能正常运行
def index(username, age, gender, **a): print(username, age, gender, a) index('jingziz', 18, 'male', tell=123, hobby='climb')
**号在形参中的使用:接收多余的关键字参数
返回值为字典类型
3.、不管我传入多少个位置参数和关键字参数,函数都能正常运行
def index(*a, **b): print(a, b)
*号和**号后面的变量可以任意起名,遵循变量的命名即可
在python中,推荐使用
*args: arguments 位置参数
**kwargs: keyword arguments 关键字参数
以后在定义函数的时候,如果我们不知道要传递多少个参数,我们就可以如下定义
def index(*args, **kwargs): pass
4、*在实参中的使用,就是把列表、元组中的一个一个元素打散,然后以位置参数的形式传递
def index(*args): print(args) l = [1, 2, 3, 4, 5, 6, 7, 8, 9, ] index(*l) # 元组也一样
5、**号在实参中的使用:把字典打散成关键字的形式进行传递
def func(**kwargs): print(kwargs) d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} func(**d)
6、其他参数
def register(name, age, *, sex, height): print(name, age, sex, height) register('lili', 18, sex='male', height='1.8m')
四、名称空间
1、绑定变量名与变量值关系的地方
2、分类
- 内置名称空间
- 局部名称空间
- 全局名称空间
名字的查找:
先看你自己再哪个位置
全局 >>> 内置
先看你自己再哪个位置
局部 >>> 全局 >>> 内置