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