Python 定义函数
函数是带名称的代码块,用于完成具体的工作,当我们需要在程序中多次执行同一任务时,会产生大量的重复代码
我们可以将重复代码定义为函数,这样每次执行任务时,只需要调用该函数即可
定义函数语法:
def functionname(parameters):
"""函数文档"""
statement
return [expression]
1 定义函数实例
1.1 定义无参数函数
下面定义一个不含参数的欢迎函数:
def greet_user():
print('Welcome!')
greet_user()
执行结果:
该函数没有定义参数,所以引用的时候也不需要输入参数,直接以函数名引用即可
1.2 定义有参数函数
下面定义一个含参数的欢迎函数:
def greet_user(user):
print('Hello,%s!' % user)
greet_user('Jack')
执行结果:
该函数定义了参数,所以调用的时候必须输入参数
当函数有多个参数时,可以通过位置给参数赋值,但位置不可靠,建议以'参数名=参数'键值对的形式赋值,这样参数的位置就不影响赋值
1.3 给参数指定默认值
定义函数时,可以给参数指定默认值,这样在调用函数时,如果给参数指定值,参数就使用指定的值,否则就使用默认值
def self_introduction(name, country='China'):
introduction = 'My name is %s,I come from %s.' % (name, country)
print(introduction)
return introduction
self_introduction(name='张无忌')
self_introduction(name='成昆', country='Japan')
结果如下:
第一次调用时,没有指定参数country的值,所以使用了默认值;第二次调用时,则使用了指定的参数值
默认参数必须指向不可变的对象
def add_end(list1=[]):
list1.append('1')
return list1
print(add_end())
print(add_end())
print(add_end())
代码运行结果是:
原因:函数在定义时,默认参数list1所指定的地址已经确定,而list1是一个list,所以每次调用该函数时,如果改变了列表的内容,则下次调用时,默认参数的内容就会改变
如果确实需要指定一个空的对象,可指定默认值是None,然后在函数内部对参数值判断
1.4 定义可变参数
可变参数:就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
定义语法:def function(arg,*args):
在函数调用时,*会以单个元素的形式解包一个元祖,使其成为独立的参数
def sum_new(*numbers):
total = 0
for n in numbers:
total = total + n * n
return total
print(sum_new())
print(sum_new(5))
a = [1, 2, 3]
print(sum_new(*a)) # 将list or tuple做为参数时,加一个*解析为可变参数
结果如下:
1.5 关键字参数
**kwargs表示关键字参数,接收的是dict
def sum_new(year, **users):
print(year, users)
sum_new(2021, a=1, b=2)
结果如下:
总结:参数的定义顺序为:必选参数-->默认参数-->可变参数-->关键字参数