← 返回首页
Python3基础教程(十七)
发表时间:2022-03-27 12:46:50
形参

1.形参 函数定义处的参数称为形参,函数调用处的参数是实参,函数调用的本质是实参把值复制了一份给形参,形参的改变不影响实参。

实例:

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:25
# @File : function2.py
# @Software : PyCharm

def swap(x, y):
    temp = x
    x = y
    y = temp
    return

x = 10
y = 7
swap(x,y)
print("x=",x,"y=",y)

运行结果:

x= 10 y= 7

2.默认参数 python可以设置默认参数,避免出现参数个数不匹配时的调用错误。 注意:必选参数必须在前,默认参数在后,否则Python的解释器会报错。

实例:

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:32
# @File : function3.py
# @Software : PyCharm

def pow(x,n=2):
    result = 1
    while n > 0:
        n -= 1
        result = result * x
    return result

print(pow(2))
print(pow(2,10))

运行结果:

4
1024

3.可变参数 在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

实例: 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:38
# @File : function4.py
# @Software : PyCharm
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

sum = calc(1,2,3,4,5)
print(sum)

运行结果:

55

4.关键字参数

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

实例:

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:41
# @File : function5.py
# @Software : PyCharm

def person(name,gender,**keys):
    print('name:', name, 'gender:', gender, 'other:', keys)
    return


person('张三','男')
person('李四','女',age=20)
person('王五','男',age=22,city='西安')
#使用dict简化
map={'age':18,'ciy':'成都'}
person('赵六','男',**map)

运行结果:

name: 张三 gender: 男 other: {}
name: 李四 gender: 女 other: {'age': 20}
name: 王五 gender: 男 other: {'age': 22, 'city': '西安'}
name: 赵六 gender: 男 other: {'age': 18, 'ciy': '成都'}

5.命名关键字参数

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过keys检查。如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和age作为关键字参数。这种方式定义的函数如下:

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:41
# @File : function5.py
# @Software : PyCharm

#注意:age和city都没有默认参数
def person(name, gender, *, age, city):
    print('name:', name, 'gender:', gender, 'age:', age, "city:", city)
    return

person('张三', '男')  #错误,命名关键字参数必须传入参数名
person('张三', '男', age=18, city='武汉') #ok
person('李四', '男', age=18, zipcode='027') #错误,错误的参数名字

注意: 如果命名关键字参数具有默认值,调用时,可不传入参数。 如果命名关键字参数没有默认值,命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:41
# @File : function5.py
# @Software : PyCharm

def person(name, gender, *, age=18, city='北京'):
    print('name:', name, 'gender:', gender, 'age:', age, "city:", city)
    return


person('张三', '男') #ok
person('李四', '男', age=18, zipcode='027') #错误,错误的参数名字

6.参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

实例:

# -*- coding: utf-8 -*-
# @Time : 2022/3/27 13:24
# @File : function6.py
# @Software : PyCharm

def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
    return

f1(1, 2, 3, 'a', 'b', x=100)

运行结果:

a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 100}