Python博客总结4

来源:互联网 发布:禁锢网络剧百度云 编辑:程序博客网 时间:2024/06/06 20:21

博客核心内容:


1、局部变量和全局变量
2、嵌套函数和作用域
3、内置函数
4、闭包
5、闭包应用:装饰器
6、迭代器的概念


1、局部变量和全局变量

变量按照作用域分为:全局变量和局部变量
全局变量的作用域:从定义位置开始到下面整个程序结束。
局部变量的作用域:在一个函数内部定义的变量只能在本函数内部进行使用。
当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
代码示例:

name='Alex'  #全局变量def change_name():    name='Eric'  #局部变量    print('我的名字',name)change_name()print(name)
2、嵌套函数和作用域

在Python当中,可以在函数内部嵌套函数,并且作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变。
代码示例:

name='Alex'def foo():    name='Eric'    def bar():        print(name)    return barfunc=foo()func()
3、内置函数

在Python当中部分函数是内置函数,如下图所示:
这里写图片描述
部分功能代码示例:

字典的运算:最小值,最大值,排序salaries={    'egon':3000,    'alex':100000000,    'wupeiqi':10000,    'yuanhao':2000}迭代字典,取得是key,因而比较的是key的最大和最小值>>> max(salaries)'yuanhao'>>> min(salaries)'alex'可以取values,来比较>>> max(salaries.values())>>> min(salaries.values())但通常我们都是想取出,工资最高的那个人名,即比较的是salaries的值,得到的是键>>> max(salaries,key=lambda k:salary[k])'alex'>>> min(salaries,key=lambda k:salary[k])'yuanhao'也可以通过zip的方式实现salaries_and_names=zip(salaries.values(),salaries.keys()) 先比较值,值相同则比较键>>> max(salaries_and_names)(100000000, 'alex')salaries_and_names是迭代器,因而只能访问一次>>> min(salaries_and_names)Traceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: min() arg is an empty sequencesorted(iterable,key=None,reverse=False)
4、闭包的概念

概念:
①Python中的闭包指的是当函数的变量超出它的有效作用域的时候,还能对函数内部的变量进行访问.
②Python中的闭包捕获到的是变量的本身而不仅仅是变量的数值,当自由变量发生变化时,Python中的闭包能够捕获到这个变化.
③如果自由变量在闭包内部发生变化,也会反映到函数外面定义的自由变量的数值.
代码示例:

def f1():    y = 10    def f2():        print(y)    return f2f=f1()print(f)x=100f()print(x)

在上面的程序中,f2()这个函数就是一个闭包函数。

5、闭包的应用装饰器

1、不带参数的装饰器:

def w1(main_func):    def outer(*args, **kwargs):        before_func(*args, **kwargs) #before_func定义忽略        main_func(*args, **kwargs)        after_func(*args, **kwargs)  #after_func定义忽略    return outer@w1def show()    pass# 装饰器w1将show作为其第一个参数,并使用返回值重新定义了show

2、带参数的装饰器

def login(name, password)...def errorHandler()...def Filter(before_func, after_func):    def outer(main_func):        def wrapper(*args, **kwargs):            before_result = before_func(*args, **kwargs)            main_result = main_func(*args, **kwargs)            after_result = after_func(*args, **kwargs)    return wrapperreturn outer@Filter(login, errorHandler)def show():    pass#先运行一次Filter(login, errorHandler),用返回值替换自身。然后再运行outer(main_func)
6、迭代器的概念

1.为什么要有迭代器?
对于没有索引的数据类型,必须提供一种不依赖索引的迭代方式。
2.迭代器定义:
迭代器:可迭代对象执行iter方法,得到的结果就是迭代器,迭代器对象有next方法
它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了iternext()方法的对象都是迭代器,iter返回迭代器自身,next返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。
代码示例:

i=[1,2,3].__iter__()  print(i)    #迭代器print(i.__next__())print(i.__next__())print(i.__next__())

OK,如有问题,欢迎留言指正!

原创粉丝点击