Python函数参数(必选、默认、可变、关键字)
作者:互联网
Python函数参数(必选、默认、可变、关键字)
【参考】:https://blog.csdn.net/pql925/article/details/80999086
1. 必选参数
必选参数,即使用普通变量标识符标识形参,没有默认赋值或*星号。
def power2(x):
return x*x
def power3(x):
return x*x*x
def power(x,n):
return x**n
power2(5)
## 25
power3(5)
## 125
power(5,2)
## 25
power(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: power() missing 1 required positional argument: 'n'
每个必选参数,在函数调用时,都必须要指定实参对象,如果未指定或少于必选形参个数,则会报错。
必选参数,必须放在其他类型的参数之前,即形参列表的最前面。
2. 参数传递
调用函数时,可以按位置依照形参顺序依次传递实参,也可以使用形参赋值的格式,将实参与形参绑定。
参数传递的本质是,实参元组到形参元组的赋值。
-
位置传递,按照形参顺序依次传递实参
-
形参绑定,通过赋值语句将实参传递给对应的形参
-
混合传递,位置实参必须与形参位置对应,形参赋值可以打乱顺序,但不能影响位置实参与形参的对应关系
power(5,2)
## 25
power(2,5)
## 32
power(n=5,x=2)
## 32
>>> power(n=5,2)
File "<stdin>", line 1
power(n=5,2)
^
SyntaxError: positional argument follows keyword argument
>>> power(5,x=2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: power() got multiple values for argument 'x'
3. 默认参数
默认参数,必须放在必须参数之后。在调用函数时,可以给默认参数传递形参,也可以不传递,还可以
def power(x,n=2):
return x**n
power(5)
## 25
def enroll(name, gender, age = 18, city = 'Beijing'):
s = "name: %-10s , gender = %-6s , age : %d , city = %s" %(name,gender,age,city)
print(s)
enroll("Li", "Male", 30)
## name: Li , gender = Male , age : 30 , city = Beijing
enroll("Li", "Male", 30, 'Tianjin')
## name: Li , gender = Male , age : 30 , city = Tianjin
enroll("Li", "Male", city = 'Tianjin')
## name: Li , gender = Male , age : 18 , city = Tianjin
可以通过形参赋值形式,不按顺序提供参数。
4. 可变参数
在形参变量前面加上*单星号,表示此形参可接收的实参个数可变,形参赋值为元组类型。
def sumall(*nums):
print("nums = ",nums)
print("Type = ",type(nums))
return sum(nums)
>>> sumall(1,2,3,4)
nums = (1, 2, 3, 4)
Type = <class 'tuple'>
10
>>> ln = [1,2,3,4] # ln =(1,2,3,4)
>>> sumall(*ln)
nums = (1, 2, 3, 4)
Type = <class 'tuple'>
10
def sumall_base(base, *nums):
print("base = ",base)
print("nums = ",nums)
print("Type = ",type(nums))
return base + sum(nums)
>>> sumall_base(100,1,2,3,4)
base = 100
nums = (1, 2, 3, 4)
Type = <class 'tuple'>
110
>>> ln = [1,2,3,4] # ln =(1,2,3,4)
>>> sumall_base(100,*ln)
base = 100
nums = (1, 2, 3, 4)
Type = <class 'tuple'>
110
实参和形参都是元组类型,通过实参到形参的元组赋值完成参数传递。*星号在形参和实参中的作用:
-
形参(*num),将接收到的实参元组赋值给形参
-
实参(*ln),将实参变量引用的列表或元组,转为实参元组,将元组对象直接传递给形参。
5. 关键字参数
当形参变量的名称和个数不确认时,可以使用关键字参数,将传递来的形参和实参,转换为一个字典,赋值给关键字形参。
在形参变量前面加上**双星号,可以定义一个关键字参数。
也可以使用一个字典实参,给函数传递参数,给字典实参前加上**双星号,可以直接将字典对象传递给形参。
def student(id,name,**attr):
print("id : ",id)
print("name : ",name)
for k in list(attr):
print("%s : %s" %(str(k),str(attr[k])))
>>> student(1,'Li',age=16)
id : 1
name : Li
age : 16
>>> d = {"age":16}
>>> student(1,'Li',**d)
id : 1
name : Li
age : 16
标签:必选,power,形参,nums,Python,函数参数,实参,##,name 来源: https://blog.csdn.net/whereiwillgo/article/details/117787662