Python基础学习
之前一直是断断续续地进行学习,学了好久之后发觉自己还只是入门水平,于是乎,今日下定决心,以后要系统地学习,并对每天的学习都作一总结。
- *args和**args的区别:意思就是1还是参数a的值,args表示剩余的值,kwargs在args之后表示成对键值对。程序如下:
1 def test(a,*args,**kwargs): 2 print a 3 print args 4 print kwargs 5 test(1,2,3,d='4',e=5) 6
- Unpacking Argument Lists:The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range() function expects separate start and stop arguments. If they are not available separately, write the function call with the *-operator to unpack the arguments out of a list or tuple。In the same fashion, dictionaries can deliver keyword arguments with the **-operator。
- python闭包:简单说,闭包就是根据不同的配置信息得到不同的结果。再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。也可理解为,函数及其参数同时作为另一个函数的参数。例如以下代码:
def index(func): def panduan(license): def l90(a): if a>90: print('1') def l60(a): if a>60: print('2') func(a) pass if license==150: return l90 elif license==100: return l60 pass return panduan @index def liu(a): print(a) pass liu(license=100)(a=91)
- 迭代器(iterator):在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器。迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开。使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。比如要逐行读取一个文件的内容,利用readlines()方法,我们可以这么写:
1 for line in open("test.txt").readlines(): 2 print line
利用file的迭代器,我们可以这样写:
for line in open("test.txt"): #use file iterators print line
这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行。
- 生成器(constructor):生成器函数在Python中与迭代器协议的概念联系在一起。简而言之,包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。函数也许会有个return语句,但它的作用是用来yield产生值的。不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效,也就是说我们用yeild直接生成了一个可迭代的序列,我们可以在唤醒它之后,他依旧是一个序列,可以用next()函数执行序列长度的次数。

浙公网安备 33010602011771号