Python 学习笔记6
Python 学习笔记
集合的操作
set.add()
用来向后添加
set1.update(set2)
将set2加入到set1中,但是添加的位置是无序的
set.remove(obj)
删除已存在的元素,不存在会报错
set.discard(obj)
删除元素,如果不存在的话不会做任何操作
set.pop()
随机删除其中的一个元素
更多的操作方式如下图所示
函数
格式
def 函数名([参数]):
...
...
isinstance(变量,类型名)
判断所给变量的类型是否符合
参数位置可以使用给定的默认参数,与C++相同的是默认值参数必须放在后面
关键字赋值:
当想不按参数顺序给参数赋值时,可以使用关键字赋值,如
def test(a,b):
print(a,b)
test(1,2) # 位置参数
# 1 2
test(b=1,a=2) # 关键字参数
# 2 1
test(b=1,2) # 关键字参数写在位置参数之前会导致出错
注意:关键字参数写在位置参数之前会导致出错,必须写在位置参数之后,参数名必须和函数参数名相同
可变参数*args
本质上就是通过拆包与装包,能够实现接受不定数量的参数,装包成一个数组,使用时即可使用args[i]
的形式
但是要注意的是,如果传递的参数是一个列表/元组,装包操作会把这一个列表/元组封装成只含一个元素的元组,此时按原来的调用方式就会出错
此时如果想传入这类参数,那么可以使用function(*list)
的形式,将列表进行拆包,在函数调用时再解包
关键字参数**kwargs
和可变参数相似,关键字参数是将一个不定长度的关键字参数转化为字典,即
def show(**kwargs):
print(kwargs)
show(a=1,b=2,c=3)
此时键似乎只能使用符号,而且默认作为字符串,不需要加上引号,而值需要加上
注意: 同时使用*args
和**kwargs
时,*args
参数必须要列在**kwargs
前,否则会报错。
返回值
和C++相同,使用return
语句返回,但是可以返回多个值,返回值会形成一个元组
局部变量和全局变量
和C++基本相同
但是发现函数内全局变量无法进行如a-=1
的修改,要解决这种情况,可以使用global a
认定a为全局变量,然后可以进行修改
关于global关键字的添加,只有不可变类型的才需要加global关键字,可变类型的不需要加就可使用全局变量
可变类型:list,dict,set
不可变类型: 其余的所有
本质上不是内容变不变,而是看在更改其内容的时候,相应的内存地址有没有发生变化
函数注释
可以在函数的第一行写入字符串,或者使用''' '''
来唤起自动的函数参数注释模板,当使用help(function)
时可以打印出此内容
引用与函数参数传递
和C++相比,C++分为值传递和引用传递,而在python中,就我个人理解,函数参数传递时本质上都是相同的赋值操作,一开始参数的地址都与实参地址相同,而后对于更改内容的操作时,分为可变参数和不可变参数,从而起到了类似值传递和引用传递的效果
在sys库中可以使用sys.getrefcount(a)
来查看当前变量引用数目(由于函数调用也传递了一次所以会多一个)
闭包
locals()
可以以字典的形式返回作用域内的全部局部变量
对于函数内部,也可以定义函数,称之为内部函数,类似于函数和全局之间的关系,而变量也有类似的关系,想要在内部函数中使用外部函数定义的变量,可以使用nolocal
关键字来表明
注意: 当内层已经定义了一个同名的变量后,不能再用global或者nolocal关键字,否则会导致冲突
函数的检索顺序: 内层函数->外层函数->全局函数->系统函数
需要注意的是,函数的返回值不仅能是一个值,而且还可以是一个函数名(本质上是函数的地址),从而能够在外部使用内部函数
闭包的格式:
- 有嵌套函数
- 内部函数引用了外部函数的变量
- 外部函数的返回值时内部函数(不是值!)
装饰器
用于不改变内层函数并增加功能,语法如下
def decorater(func):
def wrapper():
func()
print(wrapper)
return wrapper
@decorater
def f1():
print(f1)
当调用f1()时,@decorater
作用相当于f1=decorater(f1)
,而decorater内部又返回了wrapper函数,也就是将f1=wrapper()
,起到了对f1的装饰作用
带参数函数的装饰
如果原函数带有参数,那么装饰的内部函数也需要用参数,同时考虑到装饰器的普适性,装饰器的参数一般使用*args,*kwargs
带返回值的装饰器
内部函数也要有返回值
返回值由装饰器内部函数的返回值确定
装饰器带参数
def outer_check(time):
def check_time(action):
def do_action():
if time < 22:
return action()
else:
return '对不起,您不具有该权限'
return do_action
return check_time
@outer_check(23)
def play_game():
return '玩儿游戏'
print(play_game())
通过多层函数,一层一层进行装饰,内层函数可以使用外层参数
递归函数
和C++相同
匿名函数
用lambda关键词能创建小型函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda 参数列表: 运算表达式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!