一、定义函数
形参:函数完成一项工作所需要的信息,在函数定义时完成
实参:调用函数时传递给函数的信息
二、传递实参
1.位置实参:每个实参都关联到函数定义中的一个形参
示例: def describe_pet(animal_type,pet_name): print("My "+ animal_type+"‘s is "+pet_name.title()+".") describe_pet(‘hamster‘,‘harry‘)
2.关键字实参是传递给函数的名称-值对 (直接在实参中将名称和值关联起来,这样无需考虑函数调用中的实参顺序)
def describe_pet(animal_type,pet_name): print("My "+ animal_type+"‘s is "+pet_name.title()+".") describe_pet(animal_type=‘hamster‘,pet_name=‘harry‘)
3.默认值:编写函数时,可给每个形参指定默认值。在调用函数时给形参指定了实参值时,python将使用指定实参值;否则,将使用形参的默认值。
def describe_pet(pet_name,animal_type=‘dog‘): print("My "+ animal_type+"‘s is "+pet_name.title()+".") 调用式1: describe_pet(‘hamster‘) 使用形参默认值 调用式2: describe_pet(pet_name=‘harry‘,animal_type=‘hamster‘) 显示的给animal_type提供了实参,因此python忽略了形参的默认值
注意:使用默认值时,在形参列表中必须先列出没有默认值的形参,在列出有默认值得形参,这让python能正确解读位置实参
4.等效的函数调用:指定实参时可以使用位置方式,也可以使用关键字方式
def describe_pet(pet_name,animal_type=‘dog‘): print("My "+ animal_type+"‘s is "+pet_name.title()+".") #一条命为willie的小狗 describe_pet(‘willie‘) describe_pet(pet_name=‘willie‘) #一只名为Harry的仓鼠 describe_pet(‘harry‘,‘hamster‘) --位置实参 describe_pet(pet_name=‘harry‘,animal_type=‘hamster‘)--关键字实参 describe_pet(animal_type=‘hamster‘,pet_name=‘harry‘)
三、返回值: return语句将值返回到调用函数的代码行
1.返回简单的值
2.让实参变成可选的
def get_formatted_name(first_name,last_name,middle_name=‘‘): if middle_name: full_name=first_name+‘ ‘+middle_name+‘ ‘+last_name else: full_name=first_name+‘ ‘+last_name reutn full_name musician=get_formatted_name(‘zilong‘,‘zhou‘) print(musician) musician=get_formatted_name(‘xifeng‘,‘wang‘,‘lee‘) print(musician)
为让中间名变成可选,可给形参middle_name一个默认值-空字符串,并在用户没有提供中间名时不使用这个实参
3.返回字典:函数可返回任何类型的值,包括列表和字典等较为复杂的数据结构
def build_person(first_name,last_name,age=‘‘) person={‘first_name‘:first_name,‘last_name‘:last_name}
if age:
age=32 retun person musician=build(‘yufang‘,‘ke‘,20) print(musician)
4.将函数与while循环结合使用
def get_formatted_name(first_name,last_name) full_name=first_name+‘ ‘+last_name retun full_name while true: print("please tell me your name|enter q to quit ") first_name=input("first name: ") if first_name == ‘q‘: break; last_name=input("last name: ") if last_name == ‘q‘: break; formatted_named=get_formatted_name(first_name,last_name) print(formatted_named)
四、传递列表
1.在函数中修改列表:3D打印模型公司需要打印的设计存储在一个列表中,打印后移到另一个列表中
def print_models(unprinted_designs,completed_models): while unprinted_designs: current_design=unprinted_designs.pop() completed_models.append(current_design) def show_completed_models(completed_models): print("the following models have been printed: ") for completed_model in completed_models: print(completed_model) unprinted_designs=[‘iphone case‘,‘robot pendant‘,‘dodecahedron‘] completed_models=[] print_models(unprinted_designs,completed_models) show_completed_models(completed_models)
2.禁止函数列表修改(源代码参--在函数中修改列表)
print_models(unprinted_designs[:],completed_models)
unprinted_designs[:]获得列表unprinted_designs的副本,而不是列表unprinted_designs的本身,列表completed_models也将打印包含打印好的列表名称,但函数所做的修改不会影响到列表unprinted_designs
五、传递任意数量的实参
1.简单示例
制作比萨时需要接受很多配料,但无法预先确定顾客要多少配料,下面形参toppings能够接受任意多个实参
def make_pizza(*toppings): print(toppings) make_pizza(‘peper‘) make_pizza(‘peper‘,‘extra cheese‘)
2.结合使用位置实参和任意数量实参
def make_pizza(size,*toppings): print("making a"+str(size)+"-inch pizza with the following toppings: ") for topping in toppings: print("-"+topping) make_pizza(16,‘peper‘) make_pizza(15,‘peper‘,‘extra cheese‘)
3.使用任意数量的关键字实参:将函数编写能够接受任意数量的键-值对--调用语句提供多少就接受多少
build_profile()函数接受名和姓,同事还接受任意数量的关键字实参
def build_profile(first,last,**user_infos): profile={} profile[‘first_name‘]=first profile[‘last_name‘]=last for key,value in user_infos: profile[key]=value retun profile user_profile=build_profile(‘albert‘,‘eisnst‘,location=‘princeton‘,field=‘physics‘) print(user_profile)
六、将函数存储灾模块中
return语句将值返回到调用函数的代码行
原文:https://www.cnblogs.com/tanxiaojun/p/10548757.html