1.定义一个函数
定义一个函数需要5个部分:
-
def
告诉Python,用户在自定义函数 -
function_name
告诉Python要定义的函数的名字,且取名尽量做到descriptive -
(parameters)
这是形式参数,简称形参,接收函数调用时,传过来的实参,不需要传参时可省略 -
'''docstring'''不执行任何功能,仅用来说明函数功能,调用函数者可以查看该函数的docstring以了解其功能
-
function_body
是函数的主体,函数要实现的功能由它决定
格式:
#函数定义def function_name(parameters): #注意冒号 '''docstring''' #注意缩进1个tab function_body #注意缩进1个tab#函数调用 function_name(arguments) #arguments为实参,字符串参数要加引号
2.参数
在上述的函数定义格式中,有两种参数,分别是:parameters和arguments
parameters为形式参数,简称为形参在函数定义时,仅作为符号,表示这里应该有这样一个参数,实现函数的成功定义。
arguments为实参,即主程序中,需要调用函数处理的实实在在的信息。调用时,会实现parameter_1=argument_1...,将所有实参的值赋给对应的形参,交由函数处理。
例:
输入:
def greet_user(username): '''display a simple greeting''' print('hello, '+username.title()+'!') greet_user('jack')
输出:
c:\py>function_define hello, Jack!
3.传送多个参数
上面的例子是仅传一个参数的情况,parameters和arguments可以有多个,有3种方法实现多参数传送。
(1) 位置实参
def语句
def function_name(parameter_1, parameter_2,..., parameter_n):
调用函数语句
function_name(argument_1, argument_2,..., argument_n):
调用函数语句中的实参与def语句中的形参按顺序一一对应,传参时实现的操作如下:
parameter_1=argument_1 parameter_2=argument_2 . . . parameter_n=argument_n
注意,使用位置实参时,一定要按照定义函数时,正确的顺序排列,不然会出错。
(2) 关键字实参
关键字传参是将一个name-value组合传给函数形参。
调用形式:function_name(name_1=value_1,name_2=value_2,...,name_n=value_n)
name-value里面,name为函数定义时,形参的名字,value为主程序中实参的值,通过name=value实现传参。所以通过关键字实参传参,并不需要按照定义时的顺序。
输入:
def describe_pet(animal_type,pet_name): '''display information about a pet''' print('\nI have a '+animal_type+'.') print('My '+animal_type+"'s name is "+pet_name+'.') describe_pet(animal_type='dog',pet_name='harry')#顺序不一样describe_pet(pet_name='harry',animal_type='dog')
输出:
c:\py>describe_pet.py I have a dog. My dog's name is harry. I have a dog. My dog's name is harry.
上面程序调用了两次describe_pet函数,参数顺序不一样,但是输出结果一样。
(3) 默认值
当一个函数被调用时,它的某些参数总是很少改变时,我们可以给这些很少变动的参数,在定义函数时,给它们一个默认值。这样在调用函数时,若与默认值相同,则可以不用写该参数的实参值,直接采用默认值,如果与默认值不符,可以用关键字name-value对传参。
输入:
def describe_pet(pet_name,animal_type='dog'): #默认animal_type参数值为‘dog’ '''display information about a pet''' print('\nI have a '+animal_type+'.') print('My '+animal_type+"'s name is "+pet_name+'.') describe_pet(pet_name='harry') #省略animal_type参数值describe_pet('harry