今天看啥  ›  专栏  ›  盆友揣的小可爱

Python参数类型

盆友揣的小可爱  · 简书  ·  · 2021-06-15 22:44
    

文章预览

参数简介

上一期我们学习参数传递怎么传递,也了解了参数的几种类型。

首先,我们再来回顾一下,形参和实参:

形参是在定义函数时定义的,放在函数名后面的圆括号里,可为空

实参是调用函数时为形参传入具体的参数值

简单总结一下,谁调用函数,谁就负责传入参数。

形参与实参

好呐,本期我们来详细学习函数几种参数类型,大纲如下:

参数类型大纲

1. 位置参数

python函数的参数名是无意义的,Python允许在调用函数时通过通过名字来传入参数值。

位置参数:按照形参位置传入的参数

调用函数时,实参默认按位置顺序传递的。同时实参个数也要和形参匹配

位置参数

举一个小栗子

# 计算三数之和
def sum_count(a, b, c):
    S = a + b + c

    print(S)


# 调用函数
sum_count(10, 20, 30)

位置参数运行结果

如果实参的个数与形参不匹配时,调用函数运行就会报错

sum_count(10, 20)  # 实参与形参格式不匹配报错

位置参数报错

2. 关键字参数

Python中,形参与调用函数紧密联系在一起的。

关键字参数:调用函数时,使形参名称来传递参数,形式为“形参名=实参”

关键字参数,又叫命名参数,传递时无需考虑参数位置和顺序

关键字参数

举一个小栗子

# 计算面积
def calculate(Length, width):
    size = Length * width

    return size


print("长为20,宽为60面积为:",calculate(Length=20, width=60))

print("长为5,宽为8面积为:",calculate(width=5, Length=8)) # 关键字参数不用考虑位置顺序

关键字参数运行结果

3. 默认参数

默认参数:定义函数时,我们可以为形参提前设置具体的值。

在定义函数时,默认参数要放到位置等其他参数后面

在调用函数时,默认参数是可选的。如果传入新值,则会覆盖默认值

默认参数

举一个小栗子

# 打印长方形,默认是高为5的
def print_rectangle(weight,height=5):

      for i in range(height):
        for j in range(weight):
            print("*", end="  ")
        print()

print("打印宽为4的,高采用默认值5的长方形")
print_rectangle(4)  # 采用默认值

print("打印宽为3,高为9的长方形")
print_rectangle(3,9) # 覆盖默认值

默认参数运行结果1

注意,默认值不能位于位置参数前面,否则程序会报错误

默认参数报错

4. 不定长参数

不定长参数又名可变参数。

不定长参数指的是可变数量的参数,分两种情况:

  1. *形参 (一个星号),将多个参数收集到一个元组对象中
  2. ** 形参 (两个星号),将对各参数收集到一个字典对象中
不定长参数
  • 形参前只加一个星号,可以传入元组和列表类型的数据给函数进行处理。举一个小栗子
def print_info(listname, *arg):             
                                            
    print("Listname:", listname)            
                                                                   
    print("arg:",arg)                       
                                                                                 
print_info("student","Tom","Anne","Bob")    
不定参数运行结果1
  • 形参前加两个星号,则可以传入字典类型的数据给函数
def print_dicinfo(Dictname, **arg):                                  
                                                                     
    print("Dictname:", Dictname)                                     
                                                                     
    print("arg:",arg)                                                
                                                                     
                                                                     
print_dicinfo("JueJinginfo",name="JueJing",address="JueJing.cn")     

不定参数运行结果2

如果不定长参数后面,可以新增参数吗?

我们通过例子来看,会发生什么?

def test(*a,b,c)::

    print(a,b,c)
   
test(2,3,4)   

运行上面的程序,Python解释器会报错

报错

原因是,形参a已经是不定长参数,我们调用的test(2,3,4)传入的三个实参,系统自动把它们属于形参a的值,形参b 和形参c就等于没有值传入,这时候系统就认为,调用函数的对象,参数没有传够。

为了解决这一报错,python引入了 强制命名参数

规定,调用不定参数后面有跟位置参数的函数时,传入给位置参数时,必须要强制命名参进行传参。

test(2,b=3,c=4)

强制命名结果

5. 逆向参数收集

逆向参数收集针对的对象传入函数的实参

调用函数时,如果实参是元组,列表或者字典,通过在实参前面加入星号,可以自动把元素进行隔开,然后再转入给函数进行处理

  1. *实参(一个星号),可拆分数据类型为元组、列表的实参
  2. ** 实参(两个星号),可拆分数据类型为字典的实参
逆向参数收集

举一个小栗子

# 函数的形参有元组类型
def print_info(listname, *arg):             
                                            
    print("Listname:", listname)            
                                            
    # for var in arg:                       
    #   print(var)                          
    print("arg:",arg)                       
                                            
List = ["Tom","Anne","Bob"]
print_info("student",*List)    #实参前加入一个星号,可以拆分元组,列表类型的实参

逆向参数收集运行结果1
# 函数形参是字典类型的数据
def print_dicinfo(Dictname, **arg):      
                                         
    print("Dictname:", Dictname)         
                                         
    print("arg:",arg)                    
                                         
Dict = {"name":"JueJing","address":"JueJi
                                         
print_dicinfo("JueJinginfo",**Dict)     # 实参前加入两个星号,拆分字典类型的实参 

逆向参数收集运行结果2

总结

本期,我们详细学习了参数几种类型,为后面我们学习函数,打好基础。

实践是检验真理的过程,大家多动手练习练习,会有不一样的奇妙旅程~

好呐,以上是本期内容,欢迎大佬们评论区指正~

………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览