当前位置: 首页 > news >正文

一些有意思的Python语法特性

Python支持许多比较有意思的语法,这里列举了部分内容。

切片

# TODO:切片
list_num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
print(list_num[-2:]) # 17 18
print(list_num[:3])  # 0, 1, 2
print(list_num[::2]) # 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

列表生成式

# TODO:列表生成式
list_num = [x * x for x in range(10)]
print(list_num) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

生成器

有时使用列表生成式生成较大列表时会浪费空间,此时可以使用生成器

# TODO:生成器
list_num = (x * x for x in range(10))
print(next(list_num)) # 0
print(next(list_num)) # 1
print(next(list_num)) # 4

生成器函数

生成器函数只有"实例化"一个后才可以配合多层yield,否则都只会到达第一层yield

# TODO:生成器函数 gererator
def fun():print("step 1")yield 1print("step 2")yield 2print("step 3")yield 3
f = fun
print(next(f())) # step 1
print(next(f())) # step 1
f = fun()        # "实例化"函数
print(next(f))   # step 1
print(next(f))   # step 2

Lambda表达式

简化函数书写

# lambda 参数 : 函数逻辑
f  = lambda x, y :print(x,y)
f(1, 2)

Python 推导式

name_list = ['zhangsan', 'lisi', 'wangwu']
x = 90
print(x) if x > 100 else print('<= 100')
_x = 10
print(_x)
# 类比嵌套 for loop
[print(ch) for name in  name_list for ch in name if ch > 'h']

偏函数

提前固定某些函数的形参,类比于指定函数参数

def add(a, b = 1):return a + b# 这种方式更加的灵活,可以按需指定参数
add2 = functools.partial(add, b = 1)
print(add2(1), add(1))

Python 装饰器

用于包装函数,可以在运行函数的上下文中进行某些操作,例如打印日志等,同时为了避免修改函数的__name__属性值,需要设置@functools.wraps(fun)

def log(fun):@functools.wraps(fun)def wrapper(*args, **kwargs):print('%s %s():' % (text, func.__name__))return func(*args, **kw)
def log(func):# wrapper 相当于包装后的 func@functools.wraps(func)def wrapper(*args, **kwargs):print("begin call")func(*args, **kwargs)				# 此时会执行被包装的func函数print("end call")# return func(*args, **kwargs)		# 如果return的话就是return函数执行结果return wrapper
# log(func) -->
@log
def fun(*args, **kwargs):print(f"args = {args}\n kwargs = {kwargs}")
fun(1, 2, 3, 4, 5, name='zhangsan', age = 18)

函数参数*args**kwargs

  • *args就是一个参数列表,可以包含多个参数
  • **kwargs就是key-word参数列表,包含多个字典(name='zhangsan', age = 18)
  • **kwargs必须放置在最后

包管理

  • python中的包管理和模块管理类似于Java和C++等编程语言库和头文件的概念
  • 当python文件作为执行文件时,文件的__name__属性为__main__,其余情况则为指定的__name__变量值,这也就是为什么主函数代码会有if __name == '__main__'这些代码,同时如果python文件是通过import导入的,则不会执行if __name == '__main__'的代码,同时python也支持pass用于函数占位,什么也不执行。
  • python模块中通过给__all__变量赋值,来设置引用该模块的文件可以访问本文件内容的范围
  • 。。。

待补充。。

  • map:对列表元素执行指定函数
  • filter:返回bool
  • 迭代器
http://www.lryc.cn/news/585280.html

相关文章:

  • pytorch的介绍以及张量的创建
  • 企业培训笔记:Vue3前端框架配置
  • mac电脑的usr/libexec目录是干什么的?
  • 怎么处理多源异构数据?搞不清楚就别谈数据融合!
  • Linux的基础I/O
  • PDF 转图助手 PDF2JPG 绿色版:免安装直接用,急处理文件的救急小天使
  • Genus:设计信息结构以及导航方式(路径种类)
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • cesium添加原生MVT矢量瓦片方案
  • 云暴露面分析完整指南
  • 香港站群服务器8C/4C/2C/1C有什么区别
  • Elasticsearch混合搜索深度解析(上):问题发现与源码探索
  • C++11中的std::minmax与std::minmax_element:原理解析与实战
  • 12. 说一下 https 的加密过程
  • 笔记 | 理解C/汇编中的数组元素访问
  • 飞算JavaAI:给Java开发装上“智能引擎”的超级助手
  • UNet改进(21):门控注意力机制在UNet中的应用与优化
  • 前端高频面试题深度解析(JavaScript + Vue + jQuery)
  • 云蝠智能 VoiceAgent重构企业呼入场景服务范式
  • SpringCloud云间剑歌 第一章:云间阁现,群雄并起
  • 智能运维管理平台:AI赋能的数字化转型引擎
  • DNS(Domain Name System,域名系统)
  • java底层的native和沙箱安全机制
  • JavaScript加强篇——第四章 日期对象与DOM节点(基础)
  • 如何批量旋转视频90度?
  • 【DataFlow】数据合成流水线工具
  • Neo4j启动
  • 将手工建模模型(fbx、obj)转换为3dtiles的免费工具!
  • 抽丝剥茧,一步步推导“大模型强化学习的策略梯度公式”
  • manifest.json只有源码视图没其他配置