zoukankan      html  css  js  c++  java
  • 【转】python的小知识

    1. 如何反序访问一个序列how do I iterate over a sequence in reverse order)

    如果序列是list,则使用list.reverse()即可将序列反序。若不是list,则可以:

    for i in range(len(sequence)-1, -1, -1):
      x = sequence[i]
      <do something with x>
    

    2. python中的类型转化

    Python中的类型转化较为容易。只需将等转化的对象使为参数传入目标类型即可。如:

    x = int('1')
    y = float(1)
    z = tuple([1, 2, 3])
    p = list((1, 2, 3))
    

    3. python中如何查找和替换字符串

    python中可用标准库re,结合正则表达式来查找字符串。使用sub(replacement, string, [n])来替换字符串。subn与sub功能类似。

    import re
    
    p = re.compile('blue|red|yellow')
    print p.sub('color', 'blue is not red')
    print p.sub('color', 'blue is not red', 1)
    print p.subn('color', 'blue is not red')
    
    结果:
    'color is not color'
    'color is not red'
    ('color is not color', 2)
    

    4. python如何拷贝对象

    python中的可变对象赋值时是按引用传递的。如果需要拷贝对象,有三种方法:1)完全切片操作[:] 2) 利用工厂函数,如list(), dict()等;3)使用标准库中的copy模块。序列类型的拷贝默认为浅拷贝。

    • copy.copy 浅拷贝只拷贝父对象,不会拷贝对象的内部的子对象。也就是说,如果了对象为可变对象,则仅是引用此可变对象
    • copy.deepcopy 深拷贝拷贝对象及其子对象

    以下有几点关于拷贝操作的警告。第一,非容器类型(比如数字、字符串和其他“原子”类型的对象,像代码、类型和xrange对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的。第二,如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。如果我们把账户信息改成元组类型,那么即便按我们的要求使用深拷贝操作也只能得到一个浅拷贝。

    例子:

    import copy
    
    a = [1, 2, 3, 4, ['a', 'b']]  #原始对象
    b = a  #赋值,传对象的引用
    c = copy.copy(a)  #对象拷贝,浅拷贝
    d = copy.deepcopy(a)  #对象拷贝,深拷贝
    e = a[:]      #对象拷贝,同浅拷贝
    f = list(a)    #对象拷贝,浅拷贝
    
    a.append(5)  #修改对象a
    a[4].append('c')  #修改对象a中的['a', 'b']数组对象
    
    print 'a = ', a
    print 'b = ', b
    print 'c = ', c
    print 'd = ', d
    print 'e = ', e
    print 'f = ', f
    

    输出结果为:

    a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    c =  [1, 2, 3, 4, ['a', 'b', 'c']]
    d =  [1, 2, 3, 4, ['a', 'b']]
    e =  [1, 2, 3, 4, ['a', 'b', 'c']]
    f =  [1, 2, 3, 4, ['a', 'b', 'c']]
    

    5. if __name__ == '__main__'的作用

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,它有什么用呢?模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

    6. python如何判断一个文件是否存在?如果获取脚本传进来的参数?

    os.path.exist()可用来判断文件是否存在

    sys.argv[i]用来取脚本传进来的参数

    7. 产生一个0至5(包括)的数组

    arr = [x for x in range(0, 6)]

    8. 将字符"www.baidu.com"输出为"com#baidu#www"

    def fun(str, f1, f2):
        arr = str.split(f1)
        return f2.join(arr[::-1])

    9. lambda函数的作用

    1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

    2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

    3. 使用lambda在某些时候让代码更容易理解。

    10. yield函数的作用

    yield 简单说来就是一个生成器,生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。详见:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

    11. python中search和match的区别

    search可从字符串的任何位置开始进行匹配,而match仅能从字符串的第0位置开始匹配。例如:

    >>> re.match('hello', 'hello world').span()

    (0, 5)

    >>> re.match('world', 'hello world').span()

    AttributeError: 'NoneType' object has no attribute 'span' 这说明re.match没有找到字符串

    >>> re.search('world', 'hello world').span()

    (6, 11)

  • 相关阅读:
    c语言的按位运算符
    数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
    【传感器】BMA253 数字,三轴加速度传感器
    并发编程的几种形式
    php:PHP解析xml的4种方法
    spring boot: 一般注入说明(五) @Component, application event事件为Bean与Bean之间通信提供了支持
    spring boot: 一般注入说明(四) Profile配置,Environment环境配置 @Profile注解
    spring boot: Bean的初始化和销毁 (一般注入说明(三) AnnotationConfigApplicationContext容器 JSR250注解)
    spring boot: EL和资源 (一般注入说明(二) @Service注解 @Component注解)
    spring boot: scope (一般注入说明(一) @Autowired注解)
  • 原文地址:https://www.cnblogs.com/sunada2005/p/3313502.html
Copyright © 2011-2022 走看看