函数能提高应用的模块性,和代码的重复利用率。
定义一个函数:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法:
1 def functionname( parameters ):
2 "函数_文档字符串"
3 function_suite
4 return [expression]
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。(把具有独立功能代码块当作整数)
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
1 # -*- coding: UTF-8 -*-
2
3 # 定义函数
4 def printme( str ):
5 "打印任何传入的字符串"
6 print str;
7 return;
8
9 # 调用函数
10 printme("我要调用用户自定义函数!");
11 printme("再次调用同一函数");
函数的实参和形参
1 # -*- coding:utf-8 -*-
2 def summing(a,b,c): →形参
"""求三个数和"""
3 sum=a+b+c
4 print(sum)
5 num1=int(input("请输入第一个数:"))
6 num2=int(input("请输入第二个数:"))
7 num3=int(input("请输入第三个数:"))
8 summing(num1,num2,num3) →实参
在函数summing()的定义中,变量a,b,c是一个形参——函数完成其工作所需的一项信息。在代码summing(num1,num2,num3) 中,num1,num2,num3是实参,实参是调用函数时传递给函数的信息。调用函数时,将要让函数使用的信息放在括号。在summing(num1,num2,num3)中,将实参num1,num2,num3传递给函数summing(),这个值被存储在形参中。
传递实参:
函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同,也可以使用关键字实参,其中每个实参都由变量名和值组成,还可以使用列表和字典。
位置实参:
1 # -*- coding:utf-8 -*- 2 def summing(a,b,c): 3 sum =a+b+c 4 #print(sum) 5 return sum 6 def Mean_value(a1,b2,c3): 7 averaging=summing(a1,b2,c3) 8 averaging=averaging/3 9 print("平均值%d"%averaging) 10 num1 = int(input("请输入第一个数:")) 11 num2=int(input("请输入第二个数:")) 12 num3=int(input("请输入第三个数:")) 13 #summing(num1,num2,num3) 14 Mean_value(num1,num2,num3)
在调用函数时,python必须将函数调用的每个实参都关联到函数定义中的一个形参,这种关联方法被称为位置实参。
关键字实参:
关键字实参是传递给函数的名称——值对。关键字实参让你无需考虑函数调用中实参顺序,还清楚地指出了函数调用中各个值得用途。
1 # -*- coding:utf-8 -*-
2 def describe_pet(animal_type,pet_name):
3 print("
I have a" + animal_type +".")
4 print("My"+animal_type+"s name is "
5 + pet_name.title()+".")
6 describe_pet(pet_name="larry",animal_type="han " )
输出结果:
1 I have ahan .
2 Myhan s name is Larry.
默认值:
编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,python将使用指定的实参值,否则,将使用形参的默认值。给形参指定默认值后,可在函数调用中相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。(位置实参必须写在关键字实参后面)
返回值:
return可以返回一个函数执行结果下方代码不会被执行
如果return后面没有任何内容,表示会到调用函数的位置,并且不返还任何结果
如果未在函数中指定return,那这个函数的返回值为None
1 # -*- coding:utf-8 -*- 2 def get_formatte_name(first_name,last_name): 3 """返回姓名""" 4 full_name=first_name+""+last_name 5 return full_name.title() 6 musician=get_formatte_name("xie","cc") 7 print(musician)
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构
1 # -*- coding:utf-8 -*- 2 def build_person(first_name,last_name): 3 person={"name":first_name,"age":last_name} 4 return person 5 musician=build_person("xie",12) #返回字典 6 print(musician)
输出结果:
1 {'name': 'xie', 'age': 12} #返回字典
1 # -*- coding:utf-8 -*- 2 def build_person(first_name,last_name,name=""): 3 person={"name":first_name,"age":last_name} 4 if name: 5 person["name"]=name 6 7 return person 8 musician=build_person("xie",12,name="cc") 9 print(musician)
输出结果:
1 {'name': 'cc', 'age': 12}
传递任意数量实参:
1 # -*- coding:utf-8 -*- 2 def make(*toppings): 3 print(toppings) 4 make("pepperoni","extra","mushroons")
输出结果:
1 ('pepperoni', 'extra', 'mushroons')
传递任意数量关键字实参:
1 # -*- codfing:utf-8 -*- 2 def build_profile(first, last,**user_info): 3 profile={} 4 profile["first_name"] = first 5 profile["last_name"] = last 6 for key,value in user_info.items(): 7 profile[key]=value 8 return profile 9 build_profile("albert","einstein",princeton="location=",field="physics") 10 print((build_profile))
全局变量:
1 # -*- coding:utf-8 -*- 2 a=100 3 def variables(): 4 print(a) 5 6 def variables1(): 7 print(a) 8 9 variables() 10 variables1()
局部变量:
1 # -*- coding:utf-8 -*- 2 a=200 #全局变量 3 def variables(): 4 5 a = 100 #局部变量,只作用该函数里面 6 print(a) 7 8 9 def variables1(): 10 print(a) 11 12 13 variables() 14 variables1()
global:
1 # -*- coding:utf-8 -*- 2 a=200 3 c=100#全局变量 4 def variables(): 5 global a #使用global用来对一个全局变量的声明,对全局变量进行修改 6 a = 400 #局部变量,只作用该函数里面,当加global,对全局变量进行修改。 7 print(a) 8 print(c) 9 def variables1(): 10 a=50 #局部变量,只作用该函数里面 11 print(a) 12 13 def variables2(): 14 print(a) 15 16 variables() 17 variables1() 18 variables2()
匿名函数:
lambda 参数:式子