在定义函数的时候,我们把参数名字位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数返回什么样的就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

函数参数

-位置参数

位置参数是调用函数时根据函数定义参数位置来传递参数,也就是说调用函数时传入实际参数的数量位置都必须和原函数定义时保持一致

实参和形参数量位置必须都保持一致

# 定义函数名称为perometer 定义参数 长long 宽width 冒号结尾
def perometer(long,width):
    # 用户输入通过input()函数我们所获取到的值默认为str类型,我们不能够进行比较大小,所以需要进行转换成int类型
    # 若长方形的长小于宽,则会打印提示我们调用函数时是两个参数顺序错误而导致
    if int(long) < int(width):
        print("长方形的长宽不符合规范")
        pass
    return 2 * ( int(long) + int(width) )

# 获取用户输入的长,值的名称定义为x
x = input("请输入一个长 : ")
# 获取用户输入的宽,值的名称定义为y
y = input("请输入一个宽 : ")

# perometer()函数返回的值为int类型无法与字符串进行拼接,所以需要把它在进行强转为str类型
print("该长方形的周长为 : "+ str(perometer(x,y)))

-默认参数

perometer()函数我们定义已经没有问题,但当我们如果要去求多个不同长却同宽为1的周长时,我们可使用以下方式

def perometer(long,width = 1):
    if int(long) < int(width):
        print("长方形的长宽不符合规范")
        pass
    return 2 * ( int(long) + int(width) )
print("该长方形的周长为 : "+ str(perometer(10)))

我们可设置长方形的宽默认为1。这样在我们调用perometer(10)的时候就相当于调用perometer(10,1)

但是我们一定要注意,必选参数默认参数,否则Python解释器会报错。默认参数也必须指向不变对象

- 可变参数

在Python函数中,我们可以进行定义可变参数,其含义就是我们传入的参数个数可变的,可以使1个2个多个无参

# 定义函数add() 参数为可变参数nums
#函数内参数nums接收到的是一个tuple,会自动转换成tuple
def add(*nums):
    sum = 0
    # 遍历nums,
    for i in nums:
        sum = sum + i
    return sum
# add()为可变参数则我们就不需要传入list或tuple在进行遍历,直接简化输入多个参或无参即可
print(add(1,2,3))

-关键字参数

可变参数允许你传入0个任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个任意个参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def animals(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

animals('Boby',1)
animals('Mini', 6, city='Beijing')
extra = {'city': 'Beijing', 'job': 'Engineer'}
animals('Lili', 8, city=extra['city'], job=extra['job'])

打印为:

name: Boby age: 1 other: {}
name: Mini age: 6 other: {'city': 'Beijing'}
name: Lili age: 8 other: {'city': 'Beijing', 'job': 'Engineer'}

有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的。