函数
函数
定义函数
例子:
def add_way(a,b):
print("两个数加起来的结果是%d" % (a+b))
info_a = 1
info_b = 2
add_way(info_a,info_b)
实参:调用函数时传递给函数的信息。在上例中实参为info_a和info_b
形参:函数完成其工作所需要的一项信息。在上例中形参为a和b
传递实参
位置实参
函数调用时,基于形参的顺序与实参相关联。
def pet(pet_name,pet_type):
print("这是一只名叫"+pet_name+"的"+pet_type)
pet('jack','dog')
关键字实参
关键字实参是传递给函数的名称-值对。这种方法能让你无需考虑函数调用中的实参顺序。
def pet(pet_name,pet_type):
print("这是一只名叫"+pet_name+"的"+pet_type)
pet(pet_name = 'jack',pet_type = 'dog')
形参默认值——缺省参数
在函数的定义中可以通过给形参设置默认值,此时可以不给该值输入实参,则形参为默认值
def pet(pet_name,pet_type = 'dog'):
print("这是一只名叫"+pet_name+"的"+pet_type)
pet(pet_name = 'jack')
使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。
若将默认值设置为空,则表示该形参是可选的,当有相应的实参输入时才有使用。
多值参数
在函数定义时,定义参数*args
*args用于接受多余的参数,以元组的格式来保存,只能接受多余的整数或字符串,但不能接受关键字参数
**kwargs能够接收多余的关键字参数,以字典的方式保存
def demo(num,*args,**kwargs):
print(num)
print(args)
print(kwargs)
demo(10,20,30,40,name = "lin",age = 25)
例子:计算任意多个数字的和
def sum_numbers(*args):
sum = 0
print(args)
for i in args:
sum += i
print(sum)
sum_numbers(1,2,3)
多值参数拆包
test()为函数
test(a,b,args,kwargs)
相当于test(10,20,(30,40,50,60),{'name':'lin','age'=20})
test(a,b,*args,kwargs)
相当于test(10,20,30,40,50,60,{'name':'lin','age'=20})
test(a,b,*args,**kwargs)
相当于test(10,20,30,40,50,60,'name':'lin','age'=20)
返回值
在函数中,可以使用return语句将值返回到调用函数的变量。
def get_name(firstname,lastname):
name = firstname + lastname
return name
full_name = get_name('Lin','yu')
print(full_name)
使用默认值让实参变为可选
def get_name(firstname,lastname,midname = ''):
name = firstname + midname + lastname
return name
full_name1 = get_name('Lin','yu')
full_name2 = get_name('Lin','yu','xiao')
print(full_name1)
print(full_name2)
通过容器返回多个变量
通过列表返回:
def func():
#定义变量,保存温度
tmp = 27
#定义变量,保存湿度
wetness = 89.5
#定义变量,保存当前PM2.5
pm_25 = 120
#返回多个值,借助容器,如列表、元组、字典等
return [tmp,wetness,pm_25]
#main函数
ret = func()
print(ret)
print(type(ret))
元组返回多个返回值
def func():
#定义变量,保存温度
tmp = 27
#定义变量,保存湿度
wetness = 89.5
#定义变量,保存当前PM2.5
pm_25 = 120
#返回多个值,借助容器,如列表、元组、字典等
return tmp,wetness,pm_25
#元组的拆分,要严格按照顺序和个数来确定
a,b,c = ret = func()
print(ret)
print(type(ret))
print(a)
print(type(a))
print(b)
print(type(b))
print(b)
print(type(b))
函数的注释
使用三双引号在函数名后进行注释,对于编程了解函数的功能有很大的作用。
此时能够通过把鼠标放在函数上能看到函数的注释,或者用help(函数名)语句把函数的注释输出。
def add_way(a,b):
"""
该函数用于加法运算
"""
return a+b;
help(add_way)
模块
模块的定义
函数的优点之一是能够将代码块与主程序分离,因此可以将函数存储在被称为模块的独立文件中,再将模块导入到主程序中,使用import语句导入模块。
1、模块是比函数更大的封装,模块中可以封装多个函数
2、原则上,任何一个python文件都可以作为模块,模块名要符合标识符命名规范
3、使用模块:
①导入模块:import 模块名
②使用模块中的工具:模块名.函数名 模块名.变量名
4、作用:把成熟稳定的代码封装到模块中,供其他开发者使用,提高开发效率。
5、注意:被导入的模块会被python解释器从头到尾扫描,如果遇到可执行的代码会直接执行。
model_test.py
print("正在调用")
def add_way(a,b):
return a+b;
主程序.py
import model_test
info_a = int(input("请输入a的数值:"))
info_b = int(input("请输入b的数值:"))
result = model_test.add_way(info_a,info_b)
print("结果等于 %d" % result)
导入特定的函数
导入模块可以只导入一个特定的函数,而不把模块中的全部函数进行导入。
from model_test import add_way
info_a = int(input("请输入a的数值:"))
info_b = int(input("请输入b的数值:"))
result = add_way(info_a,info_b)
print("结果等于 %d" % result)
给导入的模块或者函数起别名
from model_test import add_way as add
import model_test as model
匿名函数
函数的引用
函数名就是一个变量名,保存当前函数体的引用地址。
匿名函数——lambda表达式
用lambda关键词创建小型匿名函数
其省略了def定义函数的标准步骤,可以定义功能简单的函数
语法:lambda 参数:表达式
特点:匿名函数把表达式作为整个返回值进行返回
# 定义匿名函数,不带参数的匿名函数,匿名函数本身就是函数体
print(lambda : 100)
print((lambda: 100)())
ret = lambda:100
print(ret)
print(ret())
# 定义匿名函数,带一个参数的匿名函数
# 匿名函数直接返回函数中的表达式
print((lambda x : x + 100)(30))
func = lambda x : x + 100
print(func(50))
# 定义匿名函数,带两个参数的匿名函数
func = lambda x,y: x + y
print(func)
ret = func(10,20)
print(ret)
print((lambda x, y: x + y)(30,40))
# 匿名函数作为函数的参数
def sum_number(a,b,opt):
print("a=%d" % a)
print("b=%d" % b)
print("%d + %d = %d" % (a,b,opt(a,b)))
sum_number(10,20,lambda x,y: x+y)