Python学习笔记(十三)——进阶语法

本文介绍了 Python 的多种特性与用法。包括函数返回元组传递多值、类中特殊方法模拟内置行为、单语句块写法、Lambda 表达式创建匿名函数、列表推导生成新列表、函数接收元组与字典的方式,还提及 assert 语句和装饰器的作用与用法。

####传递元组
函数可以返回元组来实现传递多个数值
示例如下:

>>> def get_error_details():
... return (2, 'details')
...
>>> errnum, errstr = get_error_details()
>>> errnum
2
>>> errstr
'details'

其中接收参数的两个变量errnum, errstr可以视为一个含有两个变量的元组
据此,在 Python 中交换两个变量的最快方法是:

>>> a , b = 5, 8
>>> a, b
(5, 8)
>>> a, b = b, a
>>> a, b
(8, 5)

####特殊方法
可以通过在类中定义特殊方法来模拟一些内置行为(类似运算符重载)
常用的特殊函数如下:

  • _init_(self, …)
    • 这一方法在新创建的对象被返回准备使用时被调用。
  • _del_(self)
    • 这一方法在对象被删除之前调用(它的使用时机不可预测,所以避免使用它)
  • _str_(self)
  • 当我们使用 print 函数时,或 str() 被使用时就会被调用。
  • _lt_(self, other)
  • 当小于运算符(<)被使用时被调用。类似地,使用其它所有运算符(+、> 等等)时都会有特殊方法被调用。
  • _getitem_(self, key)
    • 使用 x[key] 索引操作时会被调用。
  • _len_(self)
  • 当针对序列对象使用内置 len() 函数时会被调用

####单语句块
python中通过缩进来区分语句块,如果一个语句块只有一个语句,则可以在同一行使用,例如:

flag = True
if flag: print('Yes')

但是不推荐此种做法,原因是如果不小心缩进,可能造成错误
####Lambda 表达式
lambda表达式用来创建一个函数对象,相当于一个匿名的简单函数
lambda函数结构简单,只限于表达式作为函数体,限制在一行以内
形式如下:
lambda 参数列表:表达式
可以参考:关于Python中的lambda,这可能是你见过的最完整的讲解
可以将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
也可以将lambda函数赋值给一个函数, 可以覆盖掉原来的函数内容
####列表推导
列表推导用于从一份现有的列表中得到一份新列表。通过for循环来筛选列表中符合要求的元素组成新列表。示例如下:

listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print(listtwo)

####在函数中接收元组与字典
可以分别使用 * 或 ** 作为元组或字典的前缀,来使它们作为一个参数为函数所接收。示例:

def powersum(power, *args):
	'''Return the sum of each argument raised to the specified power.'''
	total = 0
	for i in args:
	total += pow(i, power)
	return total

>>> powersum(2, 3, 4)
25
>>> powersum(2, 10)
100

args 变量前添加了一个 * 前缀,函数的所有其它的额外参数都将传递到args 中,并作为一个元组予以储存。如果采用的是 ** 前缀,则额外的参数将被视为字典的键值—值配对。
####assert 语句
assert 语句用以断言(Assert)某事是真的。用来确保某些条件一定成立,不成i则抛出错误。
####装饰器
装饰器用来方便的对函数功能进行修改,本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
格式如下:

def 装饰器名称(func):
	def 装饰器函数(参数列表):
		函数体
		#一般都与func有关
	return 装饰器函数
@装饰器名称(参数列表)
调用函数 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值