zoukankan      html  css  js  c++  java
  • python的30个编程技巧

     1、原地交换两个数字

    1 x, y =10, 20
    2 
    3 print(x, y)
    4 
    5 y, x = x, y
    6 
    7 print(x, y)

    10 20

    20 10

    2、链状比较操作符

    1 n = 10
    2 
    3 print(1 < n < 20)
    4 
    5 print(1 > n <= 9)

    True

    False

    3、使用三元操作符来实现条件赋值

    [表达式为真的返回值] if [表达式] else [表达式为假的返回值]

    y = 20
    
    x = 9 if (y == 10) else 8
    
    print(x)

    8

    # 找abc中最小的数
    
    def small(a, b, c):
    
        return a if a<b and a<c else (b if b<a and b<c else c)
    
    print(small(1, 0, 1))
    
    print(small(1, 2, 2))
    
    print(small(2, 2, 3))
    
    print(small(5, 4, 3))

    0

    1

    3

    3

    # 列表推导
    
    x = [m**2 if m>10 else m**4 for m in range(50)]
    
    print(x)

    [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401]

    4、多行字符串

    multistr = "select * from multi_row 
    
    where row_id < 5"
    
    print(multistr)

    select * from multi_row where row_id < 5

    multistr = """select * from multi_row
    
    where row_id < 5"""
    
    print(multistr)

    select * from multi_row

    where row_id < 5

    multistr = ("select * from multi_row"
    
    "where row_id < 5"
    
    "order by age")
    
    print(multistr)

    select * from multi_rowwhere row_id < 5order by age

    5、存储列表元素到新的变量

    testList = [1, 2, 3]
    
    x, y, z = testList    # 变量个数应该和列表长度严格一致
    
    print(x, y, z)

    1 2 3

    6、打印引入模块的绝对路径

    import threading
    
    import socket
    
    print(threading)
    
    print(socket)

    <module 'threading' from 'd:\python351\lib\threading.py'>

    <module 'socket' from 'd:\python351\lib\socket.py'>

    7、交互环境下的“_”操作符

    在python控制台,不论我们测试一个表达式还是调用一个方法,结果都会分配给一个临时变量“_”

    8、字典/集合推导

    testDic = {i: i * i for i in range(10)}
    
    testSet = {i * 2 for i in range(10)}
    
    print(testDic)
    
    print(testSet)

    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

    {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}

    9、调试脚本

    用pdb模块设置断点

    import pdb

    pdb.ste_trace()

    10、开启文件分享

    python允许开启一个HTTP服务器从根目录共享文件

    python -m http.server

    11、检查python中的对象

    test = [1, 3, 5, 7]
    
    print(dir(test))

    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    test = range(10)
    
    print(dir(test))

    ['__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index', 'start', 'step', 'stop']

    12、简化if语句

    # use following way to verify multi values
    
    if m in [1, 2, 3, 4]:
    
    # do not use following way
    
    if m==1 or m==2 or m==3 or m==4:

    13、运行时检测python版本

    import sys
    
    if not hasattr(sys, "hexversion") or sys.version_info != (2, 7):
    
        print("sorry, you are not running on python 2.7")
    
        print("current python version:", sys.version)
    
    sorry, you are not running on python 2.7
    
    current python version: 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]

    14、组合多个字符串

    test = ["I", "Like", "Python"]
    
    print(test)
    
    print("".join(test))
    
    ['I', 'Like', 'Python']
    
    ILikePython

    15、四种翻转字符串、列表的方式

     

    5

    3

    1

     

    16、用枚举在循环中找到索引

    test = [10, 20, 30]

    for i, value in enumerate(test):

        print(i, ':', value)

    0 : 10

    1 : 20

    2 : 30

    17、定义枚举量 

     class shapes:
    circle, square, triangle, quadrangle = range(4) print(shapes.circle) print(shapes.square) print(shapes.triangle) print(shapes.quadrangle)

    0

    1

    2

    3

    18、从方法中返回多个值

    def x():
    
        return 1, 2, 3, 4
    
    a, b, c, d = x()
    
    print(a, b, c, d)

    1 2 3 4

    19、使用*运算符unpack函数参数

    def test(x, y, z):
    
        print(x, y, z)
    
    testDic = {'x':1, 'y':2, 'z':3}
    
    testList = [10, 20, 30]
    
    test(*testDic)
    
    test(**testDic)
    
    test(*testList)

    z x y

    1 2 3

    10 20 30

    20、用字典来存储表达式

    stdcalc = {
    
        "sum": lambda x, y: x + y,
    
        "subtract": lambda x, y: x - y
    
    }
    
    print(stdcalc["sum"](9, 3))
    
    print(stdcalc["subtract"](9, 3))

    12

    6

    21、计算任何数的阶乘

    import functools
    
    result = (lambda k: functools.reduce(int.__mul__, range(1, k+1), 1))(3)
    
    print(result)

    6

    22、找到列表中出现次数最多的数

    test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4, 4]
    
    print(max(set(test), key=test.count))

    4

    23、重置递归限制

    python限制递归次数到1000,可以用下面方法重置

    import sys
    
    x = 1200
    
    print(sys.getrecursionlimit())
    
    sys.setrecursionlimit(x)
    
    print(sys.getrecursionlimit())

    1000

    1200

    24、检查一个对象的内存使用

    import sys
    
    x = 1
    
    print(sys.getsizeof(x))    # python3.5中一个32比特的整数占用28字节

    28

    25、使用slots减少内存开支

    import sys
    
    # 原始类
    
    class FileSystem(object):
    
        def __init__(self, files, folders, devices):
    
            self.files = files
    
            self.folder = folders
    
            self.devices = devices
    
    print(sys.getsizeof(FileSystem))
    
    # 减少内存后
    
    class FileSystem(object):
    
        __slots__ = ['files', 'folders', 'devices']
    
        def __init__(self, files, folders, devices):
    
            self.files = files
    
            self.folder = folders
    
            self.devices = devices
    
    print(sys.getsizeof(FileSystem))

    1016

    888

    26、用lambda 来模仿输出方法

    import sys
    
    lprint = lambda *args: sys.stdout.write(" ".join(map(str, args)))
    
    lprint("python", "tips", 1000, 1001)
    
    python tips 1000 1001

    27、从两个相关序列构建一个字典

    t1 = (1, 2, 3)
    
    t2 = (10, 20, 30)
    
    print(dict(zip(t1, t2)))
    
    {1: 10, 2: 20, 3: 30}

    28、搜索字符串的多个前后缀

    print("http://localhost:8888/notebooks/Untitled6.ipynb".startswith(("http://", "https://")))
    
    print("http://localhost:8888/notebooks/Untitled6.ipynb".endswith((".ipynb", ".py")))
    
    True
    
    True

    29、不使用循环构造一个列表

    import itertools
    
    import numpy as np
    
    test = [[-1, -2], [30, 40], [25, 35]]
    
    print(list(itertools.chain.from_iterable(test)))
    
    [-1, -2, 30, 40, 25, 35]

    30、实现switch-case语句

    def xswitch(x):
    
        return  xswitch._system_dict.get(x, None)
    
    xswitch._system_dict = {"files":10, "folders":5, "devices":2}
    
    print(xswitch("default"))
    
    print(xswitch("devices"))
    
    None

    2

  • 相关阅读:
    高级(线性)素数筛
    Dijkstra(迪杰斯特拉)算法
    简单素数筛
    【解题报告】 POJ1958 奇怪的汉诺塔(Strange Tower of Hanoi)
    4 jQuery Chatting Plugins | jQuery UI Chatbox Plugin Examples Like Facebook, Gmail
    Web User Control Collection data is not storing
    How to turn on IE9 Compatibility View programmatically in Javascript
    从Javascrip 脚本中执行.exe 文件
    HtmlEditorExtender Ajax
    GRIDVIEW模板中查找控件的方式JAVASCRIPT
  • 原文地址:https://www.cnblogs.com/hahaa/p/9662773.html
Copyright © 2011-2022 走看看