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、分类

  • 内置名称空间
  • 局部名称空间
  • 全局名称空间

名字的查找:
先看你自己再哪个位置
全局 >>> 内置
先看你自己再哪个位置
局部 >>> 全局 >>> 内置

 

posted @ 2023-05-26 20:19  凡人半睁眼  阅读(201)  评论(0编辑  收藏  举报