函数
定义
调用
参数
- 形参
函数定义过程中的参数叫形参 - 实参
函数调用实传递进来的参数叫实参
关键字参数
形参 = 实参,用于指定需要赋值的参数
默认值
定义时赋给的值
收集函数
收集函数也称为可变函数,在参数前面加个* 就行
>>> def fun(* params):
print('有{}个参数'.format(len(params)))
print('收集参数是:',params)
>>> fun(1,2,3,4,5)
有5个参数
收集参数是: (1, 2, 3, 4, 5)
返回值
有,返回
无,返回none
作用域
函数内部定义的参数和变量都是局部变量,只在函数内部有效
函数外定义的变量是全局变量,整个程序皆可访问,但不要试图在函数内部改变它
global x #函数中定义全局变量,则可修改,整个程序有效
内嵌函数
py允许函数嵌套
>>> def fun1():
print('fun1正在被调用')
def fun2():
print('fun2正在被调用')
fun2()
>>> fun1()
fun1正在被调用
fun2正在被调用
但是不允许直接调用内嵌函数
lambda表达式
- 省去函数定义过程
- 无需考虑命名
- 阅读时省去函数跳到def定义部分
>>> g = lambda x,y:x + y
>>> g(3,4)
7
fiiter
map
递归
'''手动修改最高递归次数'''
>>> import sys
>>> sys.setrecursionlimit(100000)
自己调用自己
⚠️要设置结束条件
字典
是一种映射类型
标志性符号:大括号{ }
创建和访问字典
dict = {1:'one',2:'two',3:'three'} #创建一个字典
{1: 'one', 2: 'two', 3: 'three'}
dict[1] = 'A' #修改字典中的值,若没有key值则添加该项目
{1: 'A', 2: 'two', 3: 'three'}
字典的内嵌方法
- fromkeys(S[,v])
创建并返回一个新的字典
>>> dict2.fromkeys((1,2,3),'Number')
{1: 'Number', 2: 'Number', 3: 'Number'} #注意后面valua只能给一个,赋给所有的key
- keys()
得key值
dict.keys()
- items()
得元组 (key0,value0)
dict.items()
- get()
有就返回value,没有返回None - 快速查看一个键是否存在
>>> 31 in dict
True
- clear()
dict.clear() #清空该字典
- copy()
浅拷贝,原字典改变不影响拷贝品(直接赋值会影响) - pop()
dict1.pop(1) #返回key1对应的value值,同时删除该项
- popitem()
dict2.popitem() #返回并弹出(删除)最后一项
- update()
dict1.update(dict2) #把dict2加到dict1后面
集合
集合中所有的元素都具有唯一性,自动剔除重复的元素
集合是无序的,不能索引
- 创建一个集合
- 直接用花括号括起来一堆元素
- 使用set()工厂函数
>>> set1 = set([1,23,5,251,4,1])
>>> set1
{1, 4, 5, 23, 251} #得到的是剔除重复元素的集合【无序的】
[1, 2, 3, 4, 5, 0]
>>> num2 = [1,1,3,23,43,32,21,23,23,23]
>>> num2 = list(set(num2)) #调用set方法把num2变成没有重复元素的集合,再用list方法转成列表
>>> num2
[32, 1, 3, 43, 21, 23]
⚠️set方法得到的无序的集合,若注重前后顺序,使用时要小心
- 访问集合中的元素的值
- 使用for把集合中的元素一个个读取出来
- 用in和not in判断以一个元素是否在集合中已经存在
- 添加和移除元素
num2.add(666) #添加元素666
num2.remove(1) #移除元素1
- 不可变集合
num3 = frozenset([1,2,3,4])
文件
(空)
文件系统
导入(import)后可以使用模块中预设的方法
常用模块:
- random
secret = random.randint(1,10) #随机生成一个1——10的整数
- os
os.getcwd() #获取当前工作目录
chdir(path) #改变当前工作目录(path是字符串)
listdir(path) #列举指定目录中的文件名('.'或空表示当前目录,'..'表示上一级目录)
mkdir(path) #创建单层目录,若已存在则抛出异常
makedirs(path) #递归创建多层目录,若已存在则抛出异常
remove(path) #删除文件!
rmdir(path) #删除目录!若该目录非空则抛出异常
removedirs(path) #递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空(有子目录和文件)则抛出异常【只能删除最里层的目录】
rename(old,new) #将文件名old重命名为new(加路径)
- os.path
os.path.abspath(path) #返回绝对路径
os.path.basename(path) #只返回文件名
os.path.commonprefix(list) #返回list(多个路径)中,所有path共有的最长的路径。
os.path.dirname(path) #返回文件路径
os.path.exists(path) #路径存在则返回True,路径损坏返回False
os.path.lexists #路径存在则返回True,路径损坏也返回True
os.path.expanduser(path) #把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path) #根据环境变量的值替换path中包含的”$name”和”${name}”
os.path.getatime(path) #返回最后一次进入此path的时间。
os.path.getmtime(path) #返回在此path下最后一次修改的时间。
os.path.getctime(path) #返回path的大小
os.path.getsize(path) #返回文件大小,如果文件不存在就返回错误
os.path.isabs(path) #判断是否为绝对路径
os.path.isfile(path) #判断路径是否为文件
os.path.isdir(path) #判断路径是否为目录
os.path.islink(path) #判断路径是否为链接
os.path.ismount(path) #判断路径是否为挂载点()
os.path.join(path1[, path2[, ...]]) #把目录和文件名合成一个路径,获得的path = path1 + path2
os.path.normcase(path) #转换path的大小写和斜杠
os.path.normpath(path) #规范path字符串形式
os.path.realpath(path) #返回path的真实路径
os.path.relpath(path[, start]) #从start开始计算相对路径
os.path.samefile(path1, path2) #判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2) #判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2) #判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path) #把路径分割成dirname和basename,返回一个元组
os.path.splitdrive(path) #一般用在windows下,返回驱动器名和路径组成的元组
os.path.splitext(path) #分割路径,返回路径名和文件扩展名的元组
os.path.splitunc(path) #把路径分割为加载点与文件
os.path.walk(path, visit, arg) #遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
os.path.supports_unicode_filenames #设置是否支持unicode路径名
- pickle
泡菜模块,把数据拎出来