码迷,mamicode.com
首页 > 编程语言 > 详细

向Python函数传递参数的几种方法

时间:2021-05-24 16:50:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:结果   不可   阶段   ring   调用函数   命名   star   word   形参和实参   

函数的参数

参数:配合函数内部代码运行必要的值
参数分为:

  1. 形参,形式参数,在函数定义阶段需要写明的变量名。
    位置形参, 默认形参 , 普通收集形参 , 命名关键字形参 , 关键字收集形参
    实参: 普通实参,关键字实参
  2. 实参,实际参数,函数调用阶段,真实参与代码运行的数值。
    实参: 普通实参,关键字实参
    遵循原则:
    实参和形参要一一对应。
  • 位置形参
    示例一:
‘‘‘
函数star_arry(row,column)的功能是需要打印行M列的全‘0’矩阵。
行数和列数由调用者来设定。
‘‘‘
def star_arry(row , column):
    i = 0
    while i<row:
        j = 0
        while j <column:
            print("0",end=‘ ‘)
            j+=1
        print()
        i+=1
star_arry(10,9)
 

上面这个例子中,行数和列数在我们调用函数时确定,传入两个数字按照位置对应row和column,在函数执行的时候,我们传入的两个实际的数字也就是实参,对应函数内部两个变量的名,相当于我们给函数内部两个变量row和column分别赋值。这种传参方式是实参与形参之间是按照位置严格对应的。

  • 默认形参
    在函数定义处,给形参赋一个默认值,如果函数调用时不传入新的值,函数按默认值运行。
    示例二:
def star_arry(row=10 , column=10):#在此处
	...
	#此处代码与示例一相同
	pass

star_arry()
star_arry(9,7)
示例一中如果不传入参数的话,程序报错,这个程序不传入参数,打印10行10列的全零矩阵
有传入数值的话,按传入数值来打印矩阵
 
  • 普通形参 + 默认形参

函数的定义处
默认形参必须跟在普通形参的身后,顺序是一定的,顺序反掉的话会直接报错。
示例三

def star_arry(row , column=10):
		...
	#此处代码与示例一相同
	pass
star_arry(8)
star_arry(5,7)
此种情况下至少传入一个位置参数。
 
  • 关键字实参

关键字实参是对具体的某个参数赋值,具体的顺序可以打。
示例四:

def star_arry(row,column,a,b,c):#函数定义处
	...
	#此处代码与示例一相同
	pass
star_arry(column=8,row=7,b = 4,a = 3,c= 1)#函数调用处
 

值得注意的是函数定义时,和函数调用时参数的位置可以互换,但是形参和实参要对应,不可增加也不可减少。

  • 普通实参 + 关键字实参
    示例五
def star_arry(row,a,b,c,column=10):
		...
		#此处代码与示例一相同
		pass
star_arry(8,1,row=7,b = 4,c= 1)
 

注意:关键字实参必须跟在普通实参的身后,顺序是一定的

默认参数和关键字实参 在写法上一模一样
一个是在函数的定义处
一个是在函数的调用处

  • 收集参数

收集参数:
*

  1. 普通收集参数: 专门用来收集多余的没人要的普通实参
def func(*args):
	code
*args => arguments(参数)
 
在args这个参数的前面加上一个*表达普通收集参数,形成一个元组
基本使用
def func(a,b,c,*args):
	print(a,b,c)
	print(args)
	
func(1,2,3,4,5,5,6,7,8)
在func这个函数调用的时候,1,2,3分别对应的位置形式参数4,5,5,6,7,8没对应的形式参数,被*args收集成为了一个元组。
#运行结果
1 2 3
(4, 5, 5, 6, 7, 8)
 

计算任意个数的累加和

def func(*args):
	total = 0
	for i in args:
		total += i		
	print(total)
	
def func(*args):
    total = 0
    for i in args:
        total += i
    print(total)
func(-429,78,352,76,345,234,76,863,274)
#运行结果:
1869
 
  1. 关键字收集参数 : 专门用来收集多余的没人要的关键字实参
def func(**kwargs):
	code1...
**kwargs => keyword arguments
 

在kwargs参数的前面加上2个**表达关键字收集参数,形成一个字典

def func(a=1,b=2,c=3,**kwargs):
	print(a,b,c)
	print(kwargs) # {‘f‘: 1, ‘g‘: 2, ‘j‘: 3}

func(f=1,g=2,j=3,a=15,b=16,c=17)
#运行结果
15 16 17
{‘f‘: 1, ‘g‘: 2, ‘j‘: 3}
 
  • 命名关键字参数
    定义命名关键字参数的两种方式:
(1)def func(a,b,*,c) c是命名关键字
(2)def func(*args,c,**kwargs) c是命名关键字参数
 

在函数调用时,必须使用命名关键字参数来进行赋值
定义方式一

def func(a,b,*,d,c):
	print(a,b)
	print(d)
	print(c)
	
func(1,2,d = 3,c=10)
 

定义方式二

def func(*args,c,**kwargs):
	print(args)
	print(c)
	print(kwargs)
	
func(1,2,3,4,5,6,a=1,b=2,d=6,c=100)
运行结果
(1, 2, 3, 4, 5, 6)
100**加粗样式**
{‘a‘: 1, ‘b‘: 2, ‘d‘: 6}
 

关于* 和 ** 的使用方法

向Python函数传递参数的几种方法

标签:结果   不可   阶段   ring   调用函数   命名   star   word   形参和实参   

原文地址:https://www.cnblogs.com/step1889/p/14787628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!