Python基础三——推导式,函数,修饰器

循环外使用else

        可用来判断for循环是否正常结束,如果调用break跳出,则会执行else

ches = []
for che in ches:
    break
else:
print('no che') 

使用zip()并行迭代

        通过zip函数对多个进行并行迭代,zip()在最短序列用完就会停止

>>> for day,fun in zip(['mondy','sunday'],['coffe','beer','tea']):
...     print(day,fun)
...
mondy coffe
sunday beer

        可使用zip()遍历多个序列,在相同位移项间会创建元组

>>>list(zip(['mon','d'],['d','e'])
[('mon','d'),('d','e')]
>>>dict(zip(['mon','d'],['d','e'])
{'mon':'d','d':'e'}

enumerate(seq)可以创建一个迭代器,返回值为一个元组的序列(0,s[0]),(1,s[1])

            如果seq为字典则元组的第二个元素为字典键

for i,x in enumerate(s):
    pass

使用range(start, stop, setp)可生成自然数序列,setp=-1时为反向序列,默认为0

可以使用range()和len()组合来迭代序列的索引

>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):

推导式

        列表[],字典{},集合{},生成器()元组没有推导式

        expression for item in iterable if condition

                可有多个for...语句嵌套,每个for语句可以有自己单独的if判断

#列表推导式
[row*col for row in range(4) for col in range(10) if col<7]
#字典推导式
{letter:word.count(letter) for letter in word}
#集合推导式
{letter for letter in word}
生成器推导式
(number for number in range(44))

                生成器只能运行一次,再次运行会发现已经被擦除了      

>>> number_it = (number for number in range(10))
>>> list(number_it)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(number_it)
[]

pass 语句什么也不做。当语法上需要语句但程序不需要动作时
            通常用于创建最小的类

>>> class MyEmptyClass:
...     pass

           或用于编写新代码时作为函数体或控制体的占位符

一个函数如果不显示调用return,则默认返回None

函数调用的实际参数在函数被调用时引入被调函数的局部符号表;因此,参数的传递使用 传值调用 (这里的 值 始终是对象的 引用,不是对象的值)。

>>> def changeList(s):
...     s.append('newValue')
...
>>> l= list(range(10))
>>> changeList(l)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'newValue']

函数参数

def myfunc( arg1,arg2=value,*args,**kwargs):
    pass

        位置参数

                传入参数值按照顺序一次复制过去

        关键字参数

                调用函数时可以指定对应参数名字,避免位置参数带来的混乱

        指定默认参数值    arg2=value

   

使用*收集位置参数,将一组可变数量的位置参数合成参数值的元组

        如果函数同时有限定的位置参数,则*args会收集剩下的参数

使用**收集关键字参数,可将关键字参数收集到字典中

文档字符串

        在函数开始部分由''' '''定义

        help(func)可获取文档字符串,或func.__doc__返回字符串

函数名不可变,因此可以用作字典的键

在函数中调用全局变量需要使用global语句

在内部函数中使用外部变量需要使用nonlocal关键字

匿名函数lambda args : expression

a = lambda x,y:x+y
b = a(2,3) # 5

装饰器是一个函数,将一个函数作为输入并返回另一个函数,主要用来包装另一个函数或类

     利用装饰器可以抽离出大量的与函数功能无关的雷同代码进行重用。

>>> def print_func(func):
...     def new_func(*args,**kwargs):
...             print(func.__name__)
...             print('args:',args,kwargs)
...             result = func(*args, **kwargs)
...             return result
...     return new_func
...    
>>> c = print_func(add_item)
>>> c(3,4)
add_item
args: (3, 4) {}
7

        可以直接在需要装饰的函数前添加装饰器名字@decorator_name

>>> @print_func
...def add_item(arg1,arg2):
...     return arg1+arg2
...

         一个函数可以有多个装饰器,靠近函数定义的装饰器最先执行,依次向上执行
 

       

        

猜你喜欢

转载自blog.csdn.net/DAGU131/article/details/79354111