封装的具有独立功能的小模块,在调用前定义
定义:
def job()
pass
return
调用:
job()
参数:
形参:定义函数时使用的参数,用来接收传递过来的参数,可以给形参一个默认值
实参:用来传递参数
例子:def study(work="hard") #给定默认参数hard
类型标注:
def study(work:str)
def study(work) ->代表 return 类型
函数的嵌套使用
函数的嵌套调用:
在一个函数中调用另一个函数
函数的递归调用:
自己调用自己 例如阶乘
模块函数:
模块就是工具包,模块具有不同的功能,根据需求调用
模块的调用方式:
1.import random
2.from random import randint
3.from random import *
在调用模块时,避免被调用执行,在被调用模块中调用前__main__=__name___
注意:import keyword
print(keyword.kwlist)
打印出关键词,查看系统变量,防止变量与系统变量重名。
函数参数和返回值:
1.无参无返 ,不接收参数也没有返回值。只是做界面显示
2.有参有返,根据接收的参数,做相应的响应,并显示处理结果
3.有参无返,根据接收的参数,处理不同的数据
4.无参有返,例如温度计
根据不同的需求
注:使用元组可以返回多个值 a,b=b,a(互换变量)
不可变和可变参数:
传递参数是不可变类型的:函数内部赋值只会影响局部变量的引用,不会影响外部变量
传递参数是可变类型的:函数内部方法修改了数据,外部内容也会改变。例如append、extend 、pop、clear等
缺省参数:
就是默认参数
def job(name='bab'):
print(name)
job() # 如果不给参数就用默认的,要修改具有多个变量的某个变量值,最好是将此变量提取出来
例子:def study(name='xiaoming',study='hard'):
print(name,study)
study(study='easy')
注意:保证带有默认值的缺省参数在参数列表末尾
不定长参数:
def job(name,*args,**kwargs):
print(name,*args,kwargs) 加*解包,不加*整体。args是参数的元组,不用缺省参数传递进来的会被放在args作为元组存在,*args是对前面元组的解包。缺省参数传递进来的会被放在kwargs中作为字典存在。
当传入元组或字典时,使用*解包
def People(*args,**kwargs):
print(name,args,kwargs)
gl_name=('xiaohong','xiaoming',xiaobai')
gl_xiaohong={"name":xiaohong,"age":45}
People(*gl_name,**gl_xiaohong) 等价于People('xiaohong','xiaoming',xiaobai',"name":xiaohong,"age":45)
递归函数:
一个函数内部调用自己,针对不同的参数处理方法不同。当参数满足一个条件时,不再执行,否则会陷入死循环。
君子协议:
base64加密库
import base64
data ='2580'
print(base64.b64encode(data.encode()).decode()) #加密
print(base64.b64decode('MjU4MA==').decode()) #解密
哈希算法:
hash加密库
import hashlib
枚举函数:enumerate
for i,j in enumerate([1,2,3,4,5,6]):
print(i,j)
枚举带索引号的列表元素