1. 【自定义函数】def语句
语法参考
使用def关键字可以实现定义一个函数,具体的语法格式如下:
def functionname([parameterlist]):
['''comments''']
[functionbody]
参数说明如下:
-
functionname:函数名称,在调用函数时使用;
-
parameterlist:可选参数,用于指定向函数中传递的参数。如果有多个参数,各参数间使用逗号“,”分隔。如果不指定,则表示该函数没有参数。在调用时,也不指定参数;
注意:即使函数没有参数时,也必须保留一对空的小括号“()”,否则将显示错误提示对话框。
- ‘’‘comments’‘’:可选参数,表示为函数指定注释,注释的内容通常是说明该函数的功能、要传递的参数的作用等,可以为用户提供友好提示和帮助的内容;
说明:在定义函数时,如果指定了’‘‘comments’’'参数,那么在调用函数时,输入函数名称及左侧的小括号时,就会显示该函数的帮助信息。这些帮助信息就是通过定义的注释提供的。
注意:如果在输入函数名和左侧括号后,没有显示友好提示,那么就检查函数本身是否有误,检查方法可以是在未调用该方法时,先按下快捷键执行一遍代码。
- functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。如果函数有返回值,可以使用return语句返回。
注意:函数体“functionbody”和注释“‘’‘comments’‘’”相对于def关键字必须保持一定的缩进。
锦囊1 定义一个空函数
如果想定义一个什么也不做的空函数,可以使用pass语句作为占位符。代码如下:
def emptyfuntion():
pass
锦囊2 定义并调用一个函数
定义一个根据身高、体重计算BMI指数的函数fun_bmi(),该函数包括3个参数,分别用于指定姓名、身高和体重,再根据公式:BMI=体重/(身高×身高)计算BMI指数,并输出结果,代码如下:
def fun_bmi(person,height,weight):
'''
功能:根据身高和体重计算BMI指数
person:姓名
height:身高,单位:米
weight:体重,单位:千克
'''
print(person + '的身高:' + str(height) + '米 \t 体重:' + str(weight) + '千克')
bmi=weight/(height*height) # 用于计算BMI指数,公式为“体重/身高的平方”
print(person + '的BMI指数为:'+str(bmi)) # 输出BMI指数
# 判断身材是否合理
if bmi < 18.5:
print('偏瘦 ~@_@~')
elif bmi < 23.9:
print('正常 (-_-)')
elif bmi < 28:
print('偏胖 ~@_@~')
else:
print('肥胖 ^@_@^')
# 两种调用方式
fun_bmi("匿名",1.76,50) # 计算匿名的BMI指数
fun_bmi(height=1.76, weight=60, person='无语') # 计算匿名的BMI指数
锦囊3 定义并调用带默认值的函数
定义一个根据身高、体重计算BMI指数的函数fun_bmi(),该函数包括3个带默认值的参数,分别用于指定姓名、身高和体重,再根据公式:BMI=体重/(身高×身高)计算BMI指数,并输出结果,代码如下:
def fun_bmi(person='佚名',height=1.70,weight=60):
'''
功能:根据身高和体重计算BMI指数
person:姓名
height:身高,单位:米
weight:体重,单位:千克
'''
print(person + '的身高:' + str(height) + '米 \t 体重:' + str(weight) + '千克')
bmi=weight/(height*height) # 用于计算BMI指数,公式为“体重/身高的平方”
print(person + '的BMI指数为:'+str(bmi)) # 输出BMI指数
# 判断身材是否合理
if bmi < 18.5:
print('偏瘦 ~@_@~')
elif bmi < 23.9:
print('正常 (-_-)')
elif bmi < 28:
print('偏胖 ~@_@~')
else:
print('肥胖 ^@_@^')
调用fun_bmi()函数,各参数值都采用默认,代码如下:
fun_bmi() # 调用指定默认值的函数不指定参数值
fun_bmi('零语',1.65,55) # 调用指定默认值的函数时指定参数值
说明:在自定义函数时,如果即包含普通参数又包含带默认值的参数,那么带默认值的参数需要放在普通参数的后面。
锦囊4 定义并调用带可变参数*args的函数
定义一个根据身高、体重计算BMI指数的函数fun_bmi(),该函数只包括一个可变参数,用于指定测试人的姓名、身高和体重,再根据公式:BMI=体重/(身高×身高)计算测试人的BMI指数,并输出结果,代码如下:
def fun_bmi(*person):
'''
功能:根据身高和体重计算BMI指数
*person:可变参数,需传递带3个元素的元组分别为姓名、身高(单位:米)、体重(单位:千克)
'''
for item in person:
print('%s %s %s'%('='*13,item[0],'='*13))
print('身高:%s 米 \t 体重:%s 千克'%(item[1],item[2]))
bmi=item[2]/(item[1]*item[1]) # 用于计算BMI指数,公式为“体重/身高的平方”
print('BMI指数为:%f'%(bmi)) # 输出BMI指数
说明:在上面的代码中,item为传递的元组,它的第一个元素为姓名(通过item[0]获取)、第二个元素为身高(通过item[1]获取),第三个元素为体重(通过item[2]获取)。
fun_bmi(('绮梦',1.70,60),('零语',1.78,62))
listperson = [('绮梦',1.70,60),('零语',1.78,62)]
fun_bmi(*listperson) # 使用已有的列表作为函数的可变参数
锦囊5 定义并调用带可变参数**kw的函数
定义一个根据身高、体重计算BMI指数的函数fun_bmi(),该函数只包括一个关键字可变参数,用于指定测试人的姓名、身高和体重,再根据公式:BMI=体重/(身高×身高)计算测试人的BMI指数,并输出结果,代码如下:
def fun_bmi(**person):
'''功能:根据身高和体重计算BMI指数
*person:可变参数,需传递带3个元素的元组分别为姓名、身高(单位:米)、体重(单位:千克)
'''
for value in person.values(): # 遍历字典中的值
print('%s %s %s'%('='*13,value[0],'='*13))
print('身高:%s 米 \t 体重:%s 千克'%(value[1],value[2]))
bmi=value[2]/(value[1]*value[1]) # 用于计算BMI指数,公式为“体重/身高的平方”
print('BMI指数为:%f'%(bmi)) # 输出BMI指数
说明:在上面的代码中,value为传递的字典中的值,它的第一个元素为姓名(通过value[0]获取)、第二个元素为身高(通过value[1]获取),第三个元素为体重(通过value[2]获取)。
fun_bmi(p1=('绮梦',1.70,60),p2=('零语',1.78,62))
dictperson = {'p1':('绮梦',1.70,60),'p2':('零语',1.78,62)}
fun_bmi(**dictperson ) # 使用已有的字典作为函数的可变参数
锦囊6 定义并调用带可变参数*args和普通参数结合的函数
定义一个包括可变参数*args和普通参数结合的自定义函数,在函数中,输出普通参数以及遍历输出可变参数的值,代码如下:
def printcoffee(*cn,name):
print('欢迎光临%s咖啡馆~\n我店的咖啡有:'%name)
for item in cn: # 遍历输出可变参数*cn的值
print(item)
调用自定义printcoffee()函数,传递可变参数和普通参数,代码如下:
printcoffee('蓝山','卡布奇诺','摩卡','哥伦比亚',name = '依米')
注意:在定义和调用带可变参数*args和普通参数的函数时,*args需要在前,普通参数在后。
锦囊7 定义并调用带可变参数**kw和普通参数结合的函数
定义一个包括可变参数*kw和普通参数结合的自定义函数,在函数中,输出普通参数以及遍历输出关键字可变参数的值,代码如下:
def printcoffee(name,**cn):
print('欢迎光临%s咖啡馆~\n我店的咖啡有:'%name)
for item in cn.values(): # 遍历输出可变参数*cn的值
print(item)
调用自定义printcoffee()函数,传递普通参数和关键字可变参数,代码如下:
printcoffee('依米',id1='蓝山',id2='卡布奇诺',id3='摩卡',id4='哥伦比亚')
注意:在定义和调用带可变参数**kw和普通参数的函数时,普通参数需要在前,**kw关键字参数在后。
锦囊8 定义并调用带返回值的函数
定义一个带返回值的自定义函数,在函数中,输出普通参数以及遍历输出关键字可变参数的值,代码如下:
def area(w,h):
return w*h
调用自定义area()函数,传递矩形的宽度和高度,并输出返回结果,代码如下:
rect = area(450,200)
print('矩形面积:',rect)
2. 【匿名函数】lambda表达式
语法参考
在Python中,使用lambda表达式创建匿名函数,其语法格式如下:
result = lambda [arg1 [,arg2,……,argn]]:expression
参数说明如下:
-
result:用于调用lambda表达式;
-
[arg1 [,arg2,……,argn]]:可选参数,用于指定要传递的参数列表,多个参数间使用逗号“,”分隔;
-
expression:必选参数,用于指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数。
注意:使用lambda表达式时,参数可以有多个,用逗号“,”分隔,但是表达式只能有一个,即只能返回一个值。而且也不能出现其他非表达式语句(如for或while)。
锦囊1 实现带参数的匿名函数
使用lambda表达式定义一个带参数的匿名函数,用于计算圆的面积,代码如下:
import math # 导入math模块
r = 100 # 半径
result = lambda r:math.pi*r*r # 计算圆的面积的lambda表达式
print('半径为',r,'的圆面积为:',result(r))
锦囊2 实现带默认值参数的匿名函数
使用lambda表达式定义一个指定参数默认值的匿名函数,用于计算圆的面积,代码如下:
import math # 导入math模块
result = lambda r = 100:math.pi*r*r # 计算圆的面积的lambda表达式
print('圆面积为:',result()) # 不指定半径
锦囊3 在匿名函数后面直接传递参数
使用lambda表达式定义一个计算圆面积的匿名函数,并且在定义时直接在后面指定参数值,代码如下:
import math # 导入math模块
result = (lambda r :math.pi*r*r)(100) # 计算圆的面积的lambda表达式
print('圆面积为:',result) # 不指定半径
锦囊4 将lambda表达式与map()函数结合使用
将lambda表达式作为map()函数的参数实现将列表中的全部英文名字转换为首字母大写,代码如下:
name = ['rose','aurora','jim','lily','lucy']
name = map(lambda x : x.capitalize(),name) # 将列表中的全部英文名字变为首字母大写
print(list(name))
锦囊5 将lambda表达式与filter()函数结合使用
使用lambda表达式指定filter()函数的过滤条件,实现过滤掉不符合条件的数据,代码如下:
# 过滤掉重复的元素,只要有重复的就两个都不保留
list1 = ['a','b','a','c']
list2= filter(lambda x : list1.count(x) == 1,list1)
print(list(list2))
# 保留年龄大于等于18岁的数据
list3 = [('无语',30),('琦琦',10),('明日',19)]
list3 = filter(lambda x : x[1]>18,list3)
print(list(list3))
锦囊6 指定tkinter模块中控件内联的回调(callback)函数
在使用tkinter模块的窗体中,通过lambda表达式为按钮控件指定单击后的回调(callback)函数,代码如下:
import sys # 导入操作系统模块
from tkinter import Button # 导入tkinter模块的Button控件
button = Button(text='单击按钮', command=(lambda:sys.stdout.write('愿你的青春不负梦想。\n')))
button.pack() # 将按钮放置到主窗口中
button.mainloop() # 进入消息循环
3. 【空语句】pass语句
语法参考
pass是一个空语句,不会输出任何内容,常被用作占位符,防止语法错误。如果循环体或者函数体为空,解释器就会报错。这时可以用pass语句来占位,以防止程序报错。pass语句语法格式如下:
pass
锦囊1 在选择语句中使用pass语句
要求输入一个整数,然后进行判断,如果是奇数,则输出该数,否则使用pass语句占位,以方便对不是奇数的情况进行处理。代码如下:
num = int(input('请输入一个整数:')) # 输入一个数
if num % 2 != 0: # 判断是否为奇数
print(num)
else: # 不是奇数的情况
pass # pass语句,用于占位
锦囊2 在循环语句中使用pass语句
在编写for循环时,如果没想好循环体中要进行的操作,可以先使用pass语句占位,例如下面的代码:
menu = ['0','1','2','3','4','5','6'] # 菜单编号
for opt in menu: # 循环语句
pass # 空语句
说明:在运行上面的代码时,并不会输出任何内容。
锦囊3 在循环和选择语句中使用pass语句
使用for语句输出1~9之间的奇数,在不是奇数的情况下,使用pass语句占位,以方便对不是奇数的情况进行处理。代码如下:
for i in range(1, 10):
if i % 2 != 0: # 判断是否为奇数
print(i)
else: # 不是奇数的情况
pass # pass语句,用于占位
说明:pass语句和注释之间的区别在于:解释器会完全忽略注释,但不会忽略pass语句。
锦囊4 在自定义函数中使用pass语句
定义一个函数func,但函数体部分暂时还没有完成,又不能空着不写内容,因此可以用pass来替代占个位置,以使程序可以正常运行。代码如下:
def func():
pass
锦囊5 在创建类时使用pass语句
在创建类的时候用pass语句做一个占位符,以后再补充内容,代码如下:
class Geese:
pass
4. 【生成器】yield语句
语法参考
yield语句可以在函数中定义生成器对象。它可以生成一个值的序列,以便于在迭代中使用。使用了yield语句的函数(也称生成器函数)与普通函数不同,普通函数调用一次返回一个值(如果没有return语句,则返回None),而生成器函数则会返回一个生成器对象,通过调用该对象的__next__()方法,可以不断地执行语句,直到遇到yield语句为止,并且在停止的地方生成一个结果。接下来还可以再次调用__next__()方法继续执行。
def functionname([parameterlist]):
functionbody
yield expression
参数说明如下:
-
functionname:函数名称,在调用函数时使用;
-
parameterlist:可选参数,用于指定向函数中传递的参数。如果有多个参数,各参数间使用逗号“,”分隔。如果不指定,则表示该函数没有参数。在调用时,也不指定参数;
-
functionbody:可选参数,用于指定函数中要执行的代码;
-
yield expression:用于生成一个结果。
锦囊1 使用yield语句实现一个生成器并迭代它
定义一个函数,在该函数中,创建一个死循环,然后在该循环中使用yield语句生成一个结果,然后再创建生成器对象,并且分3次调用它的__next__()方法,代码如下:
def fun():
i = 0
while True:
yield i # 生成一个结果
i += 1
f = fun() # 生成器对象
print(f.__next__()) # 调用生成器对象的__next__()方法
print(f.__next__()) # 调用生成器对象的__next__()方法
print(f.__next__()) # 调用生成器对象的__next__()方法
虽然在函数中使用了死循环,但是并没有出现死循环,这是因为调用函数后,代码并不会开始执行,而是在调用__next__()方法时才开始执行,并且在遇到yield语句后,程序便会停下来,直到下次调用__next__()方法。