zoukankan      html  css  js  c++  java
  • 学习PYTHON之路, DAY 5

    ---恢复内容开始---

    一 装饰器

    1 单层装饰器

     1 def outer(func):
     2     def inner():
     3         print('long')
     4         func()
     5         print('after')
     6     return inner
     7 
     8 @outer
     9 def f1():
    10     print('F1')    

    @ +函数名

    功能:

    1 自动执行out函数并且将其下面的函数名f1当作参数传递

    2 将outer函数的返回值,重新赋值给f1

     1 def outer(func):
     2     def inner(*args, **kwargw):   #*arg 可以放不同个数的参数
     3         print('before')
     4         r = func(*args, **kwargw)
     5         print('after')
     6         return r    # 原函数的返回值
     7     return inner
     8 
     9 @outer
    10 def f1(arg):
    11     print(arg)
    12     return 123

    2 双层装饰器

    执行从上到下,解析从下到上

    二 字符格式化

    1 百分号方式

    %[(name)][flags][width].[precision]typecode

    • (name)      可选,用于选择指定的key
    • flags          可选,可供选择的值有:
      • +       右对齐;正数前加正好,负数前加负号;
      • -        左对齐;正数前无符号,负数前加负号;
      • 空格    右对齐;正数前加空格,负数前加负号;
      • 0        右对齐;正数前无符号,负数前加负号;用0填充空白处
    • width         可选,占有宽度
    • .precision   可选,小数点后保留的位数
    • typecode    必选
      • s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
      • r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
      • c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
      • o,将整数转换成 八  进制表示,并将其格式化到指定位置
      • x,将整数转换成十六进制表示,并将其格式化到指定位置
      • d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
      • e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
      • E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
      • f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
      • F,同上
      • g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
      • G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
      • %,当字符串中存在格式化标志时,需要用 %%表示一个百分号

    注:1 Python中百分号格式化是不存在自动将整数转换成二进制表示的方式

    2 在格式化时,字符串出现占位符  需要用 ‘%%’ 输出 %

     常用格式化:

    1 a = 'I am %s age %d' % ('nikita', 20)
    2 
    3 a = 'I am %(name)s age %(age)d' % {'name':'nikita', 'age':20}
    4 
    5 a = '%(p).2f' % {'p': 1.2303}

    Format方式

    [[fill]align][sign][#][0][width][,][.precision][type]

      • fill           【可选】空白处填充的字符(只能用一个字符)
      • align        【可选】对齐方式(需配合width使用)
        • <,内容左对齐
        • >,内容右对齐(默认)
        • =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
        • ^,内容居中
      • sign         【可选】有无符号数字
        • +,正号加正,负号加负;
        •  -,正号不变,负号加负;
        • 空格 ,正号空格,负号加负;
      • #            【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
      • ,            【可选】为数字添加分隔符,如:1,000,000
      • width       【可选】格式化位所占宽度
      • .precision 【可选】小数位保留精度
      • type         【可选】格式化类型
        • 传入” 字符串类型 “的参数
          • s,格式化字符串类型数据
          • 空白,未指定类型,则默认是None,同s
        • 传入“ 整数类型 ”的参数
          • b,将10进制整数自动转换成2进制表示然后格式化
          • c,将10进制整数自动转换为其对应的unicode字符
          • d,十进制整数
          • o,将10进制整数自动转换成8进制表示然后格式化;
          • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
          • X,将10进制整数自动转换成16进制表示然后格式化(大写X)
        • 传入“ 浮点型或小数类型 ”的参数
          • e, 转换为科学计数法(小写e)表示,然后格式化;
          • E, 转换为科学计数法(大写E)表示,然后格式化;
          • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
          • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
          • g, 自动在e和f中切换
          • G, 自动在E和F中切换
          • %,显示百分比(默认显示小数点后6位)

     常用格式化:

    1 a = 'I am {} age {}' .format ('nikita', 20)
    2 
    3 a = 'I am {} age {}' .format (*['nikita', 20])
    4 
    5 a = 'I am {0} age {1}' .format (*['nikita', 20])
    6 
    7 a = 'I am {name} age {age}' .format (name = 'nikita', age = 20)
    8 
    9 a = 'I am {:*^20s} age {:+d}' .format ( 'nikita', 20)

    三 递归

    1 def func(a):     
    3     if n >= 4
    3         return 1
    4     return a * func(a - 1)

     四 迭代器

    特点:

    1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
    2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
    3. 访问到一半时不能往回退
    4. 便于循环比较大的数据集合,节省内存
    >>> a = iter([1,2,3,4,5])
    >>> a
    <list_iterator object at 0x101402630>
    >>> a.__next__()
    >>> a.__next__()
    >>> a.__next__()
    >>> a.__next__()
    >>> a.__next__()
    >>> a.__next__()  #超过范围就报错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration

    生成器

     1 import time
     2 def consumer(name):
     3     print("%s 准备吃包子啦!" %name)
     4     while True:
     5        baozi = yield
     6  
     7        print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
     8  
     9 def producer(name):
    10     c = consumer('A')
    11     c2 = consumer('B')
    12     c.__next__()
    13     c2.__next__()
    14     print("老子开始准备做包子啦!")
    15     for i in range(10):
    16         time.sleep(1)
    17         print("做了2个包子!")
    18         c.send(i)   #send 把i的值通过yield传入包子
    19         c2.send(i)
    20  
    21 producer("alex")

    yield的主要效果呢,就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。

    另外,还可通过yield实现在单线程的情况下实现并发运算的效果

  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/nikitapp/p/6040576.html
Copyright © 2011-2022 走看看