函数能提高应用的模块性,和代码的重复利用率。
定义一个函数:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法:
1 deffunctionname( parameters ):2 "函数_文档字符串"
3 function_suite4 return [expression]
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。(把具有独立功能代码块当作整数)
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
1 #-*- coding: UTF-8 -*-
2
3 #定义函数
4 defprintme( str ):5 "打印任何传入的字符串"
6 printstr;7 return;8
9 #调用函数
10 printme("我要调用用户自定义函数!");11 printme("再次调用同一函数");
函数的实参和形参
1 #-*- coding:utf-8 -*-
2 defsumming(a,b,c): →形参
"""求三个数和"""3 sum=a+b+c4 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 defsumming(a,b,c):3 sum =a+b+c4 #print(sum)
5 returnsum6 defMean_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 defdescribe_pet(animal_type,pet_name):3 print("\nI 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 defget_formatte_name(first_name,last_name):3 """返回姓名"""
4 full_name=first_name+""+last_name5 returnfull_name.title()6 musician=get_formatte_name("xie","cc")7 print(musician)
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构
1 #-*- coding:utf-8 -*-
2 defbuild_person(first_name,last_name):3 person={"name":first_name,"age":last_name}4 returnperson5 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 ifname:5 person["name"]=name6
7 returnperson8 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"] =first5 profile["last_name"] =last6 for key,value inuser_info.items():7 profile[key]=value8 returnprofile9 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 globala #使用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 参数:式子