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

版权声明:欢迎转载!如有纰漏之处,欢迎批评指正! https://blog.csdn.net/black_kyatu/article/details/82145955

传递元组

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

>>> 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 装饰器函数
@装饰器名称(参数列表)
调用函数 

猜你喜欢

转载自blog.csdn.net/black_kyatu/article/details/82145955