zoukankan      html  css  js  c++  java
  • 【python】-- 内置函数、软件目录开发规范(代码编码风格)

    内置函数

    一、内置函数表格

    二、内置函数演示

      1 1、abs(x)
      2 
      3 功能:取数的绝对值
      4 
      5 >>> abs(-1)  #取-1的绝对值
      6 1
      7 
      8 #######################################
      9 2、all(iterable)
     10 
     11 功能:如果这个可迭代的元素都为真,则返回真(非0的就为真,负数也是为真)
     12 
     13 >>> all([0,1,3])   #有0,说明为假
     14 False
     15 >>> all([1,-5,6])  #负数也是为真
     16 True
     17 
     18 
     19 #######################################
     20 3、any(iterable)
     21 
     22 功能:可迭代的元素中,有一个为真,则返回真,空列表返回假。
     23 
     24 >>> any([0,1,2])  #有一个为真,则为真
     25 True
     26 >>> any([])  #空列表为假
     27 False
     28 
     29 
     30 #######################################
     31 4、ascii(object)
     32 
     33 功能:把内存对象变成一个可打印的字符串格式
     34 
     35 >>> ascii([1,2,3,4])
     36 '[1, 2, 3, 4]'
     37 
     38 
     39 #######################################
     40 5、bin(x)
     41 
     42 功能:把一个整数转换成二进制
     43 
     44 >>> bin(300)  #把300转换成二进制
     45 '0b100101100'
     46 >>> bin(1)
     47 '0b1'
     48 
     49 
     50 
     51 #######################################
     52 6、bool([x])
     53 
     54 功能:返回一个布尔值,空列表为假,不为空为真
     55 
     56 >>> bool([])   #空列表
     57 False
     58 >>> bool([1,2])   #不为空列表
     59 True
     60 >>> bool([0])
     61 True
     62 
     63 
     64 
     65 #######################################
     66 7、bytearray[source[, encoding[, errors]]]
     67 
     68 功能:字节数组,并且可以修改二进制的字节
     69 
     70 >>> b = bytearray("abcd",encoding="utf-8")  #声明一个字节数组
     71 >>> b[0]  #打印第一个元素的ascii值,也就是'a'对应的ascii值
     72 97
     73 >>> b[0] = 100  #修改时,只能赋值对应字符的ascii值
     74 >>> b
     75 bytearray(b'dbcd')   #发现字节数组值被修改
     76 
     77 
     78 
     79 
     80 #######################################
     81 8、bytes([source[, encoding[, errors]]])
     82 
     83 功能:把字符串转换成字节
     84 
     85 >>> b = bytes("abcd",encoding="utf-8")  #声明字节
     86 >>> b
     87 b'abcd'
     88 >>> b[0]   #访问到'a'字符对应的ASCII值
     89 97
     90 >>> b[0]=100    #不可以修改里面的值,不然会报错
     91 Traceback (most recent call last):
     92   File "<input>", line 1, in <module>
     93 TypeError: 'bytes' object does not support item assignment
     94 
     95 
     96 
     97 #######################################
     98 9、callable(object)
     99 
    100 功能:判断一个对象是否可以被调用,只有在后面有括号的,表示可以调用,比如:函数,类。
    101 
    102 >>> callable([])  #列表后面不加括号
    103 False
    104 >>> def sayhi():pass  #定义一个函数
    105 >>> callable(sayhi)  #函数调用,后面需要加括号
    106 True
    107 
    108 
    109 
    110 #######################################
    111 10、chr(i)
    112 
    113 功能:通过ascii的值,找到对应的字符
    114 
    115 >>> chr(97)
    116 'a'
    117 
    118 
    119 
    120 #######################################
    121 11、ord(c)
    122 
    123 功能:根据字符,找到对应的ascii值
    124 >>> ord('a')
    125 97
    126 
    127 
    128 #######################################
    129 12、classmethod(function)
    130 
    131 功能:类方法,类内部装饰器 
    132 
    133 
    134 #######################################
    135 13、compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
    136 
    137 功能:用于把代码编译的一个过程,这个基本用不到
    138 
    139 >>> code = """1+3/2*6"""  
    140 >>> py_object = compile(code,'','eval')  #把代码转换为字符串
    141 >>> eval(py_object)  #执行
    142 10.0
    143 
    144 
    145 
    146 #######################################
    147 14、complex([real[, imag]])
    148 
    149 功能:返回一个复数,我们几乎用不到。
    150 >>> complex('1+2j')
    151 (1+2j)
    152 15、delattr(object, name)
    153 
    154 功能:类那边使用的,先不care。
    155 
    156 
    157 #######################################
    158 
    159 16、dict(**kwarg)、dict(mapping, **kwarg)、dict(iterable, **kwarg)
    160 
    161 功能:返回一个字典
    162 >>> dict()  #定义一个字典
    163 {}
    164 >>> dict(name='zhangqigao',age=18)   #传入非固定关键字参数
    165 {'name': 'zhangqigao', 'age': 18}
    166 >>> dict([('name','zhangqigao'),('age',18)])   #传入一个列表
    167 {'name': 'zhangqigao', 'age': 18}
    168 >>> dict([['name','zhangqigao'],['age',18]])    #传入一个列表
    169 {'name': 'zhangqigao', 'age': 18}
    170  
    171 
    172 
    173 #######################################
    174 17、dir([object])
    175 
    176 功能:看一个对象有哪些方法
    177 
    178 >>> name = []
    179 >>> dir(name)  #显示name下的所有的方法
    180 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__',
    181 '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
    182 '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',
    183 '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
    184 '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
    185 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    186 
    187 
    188 
    189 #######################################
    190 18、divmod(a,b)
    191 
    192 功能:地板除,获得一个元组,元组第一个元素是商,第二个元素是余数。
    193 >>> divmod(5,2)
    194 (2, 1)    #2是商,1是余数
    195 
    196 
    197 
    198 #######################################
    199 19、enumerate(iterable,start=0)
    200 
    201 功能:获取一个列表,列表中的每个元素都是一个元组,元组的第一个数是iterable的索引,第二个数是iterable的元素。
    202 >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    203 >>> list(enumerate(seasons))
    204 [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    205 >>> list(enumerate(seasons, start=1))
    206 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
    207 
    208 
    209 
    210 #######################################
    211  20、eval(expression, globals=None, locals=None)
    212 
    213 功能:把字典类型的字符串变成字典,把一个整数类型的字符变成int类型,或者加减乘除这种简单转换成表达式。
    214 >>> eval('1')  #字符类型转换成int类型
    215 1
    216 >>> eval("1+3/2*6")   #字符串转换为表达式
    217 10.0
    218 
    219 
    220 
    221 #######################################
    222  21、exec(object[, globals[, locals]])
    223 
    224 功能:有语句的和复杂的语句的字符串转换成表达式
    225 
    226 code = '''
    227 def timmer(func):  #timmer(test1) func=test1
    228     def deco(*args,**kwargs):
    229         res = func(*args,**kwargs)   #run test1()
    230         return res
    231     return deco
    232  
    233 @timmer
    234 def test1():
    235     print("in the test1")
    236     return "from the test1"
    237  
    238 res = test1()
    239 print(res)
    240 '''
    241  
    242 exec(code) 
    243  
    244 #输出
    245 in the test1
    246 from the test1
    247 
    248 
    249 
    250 #####################################
    251 22、filter(function, iterable)
    252 
    253 功能:通过function过滤条件,去获取iterable中你想要的数据。
    254 
    255 >>> res = filter(lambda n:n>5,range(10)) 
    256 >>> res     #得到一个迭代器
    257 <filter object at 0x0000000003093BE0>
    258 >>> for i in res:
    259     print(i)
    260 
    261 
    262 #####################################
    263 23、map(function, iterable)
    264 
    265 功能:对传入的每一个值进行处理,处理完了再返回,再把原来的结果覆盖掉。
    266 
    267 >>> res = map(lambda n:n*2,range(5))  #n*2是处理方式
    268 >>> res
    269 <map object at 0x00000000031B4BE0>
    270 >>> for i in res:
    271     print(i)
    272 0
    273 2
    274 4
    275 6
    276 8
    277 
    278 
    279 
    280 #####################################
    281 24、reduce(function,iterable)
    282 
    283 功能:把一组可迭代序列通过function函数操作,元素之间相加或者相乘操作。
    284 >>> from functools import reduce
    285 >>> res = reduce(lambda x,y:x+y,range(10))  #x+y的值赋给x,rang(10)中的每个元素赋给y
    286 >>> res
    287 45
    288 >>> res = reduce(lambda x,y:x*y,range(1,10)) #x*y的值赋给x,rang(10)中的每个元素赋给y
    289 >>> res
    290 362880
    291 
    292 
    293 
    294 #####################################
    295 25、float([x])
    296 
    297 功能:把一个浮点类型的字符串转换为浮点类型的数据。
    298 
    299 >>> float('+1.23')
    300 1.23
    301 >>> float('   -12345
    ')
    302 -12345.0
    303 >>> float('1e-003')
    304 0.001
    305 >>> float('+1E6')
    306 1000000.0
    307 >>> float('-Infinity')
    308 -inf
    309 
    310 
    311 #####################################
    312 26、format(value[, format_spec])
    313 
    314 功能:格式话字符串,以前随笔中有介绍
    315 
    316 
    317 #####################################
    318 27、frozenset([iterable])
    319 
    320 功能:把集合变成一个不可变的集合
    321 
    322 >>> res = frozenset([1,2,3,4,3])
    323 >>> res
    324 frozenset({1, 2, 3, 4})   #去重的,不可变的集合
    325 >>> dir(res)   #没有可变的方法
    326 ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
    327 '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__iter__', '__le__',
    328  '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__',
    329 '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__',
    330 '__subclasshook__', '__xor__', 'copy', 'difference', 'intersection', 'isdisjoint', 'issubset',
    331 'issuperset', 'symmetric_difference', 'union']
    332  注:set()是可变的
    333 
    334 
    335 
    336 #####################################
    337 28、getattr(object, name[, default])
    338 
    339 功能:类中的反射函数
    340 
    341 
    342 
    343 #####################################
    344 29、globals()
    345 
    346 功能:返回当前这个python文件中的所有变量的key-value,变量是key,值是value
    347 
    348 print(globals())
    349  
    350 #输出
    351 {'__spec__': None, '__name__': '__main__', '__file__': 'D:/PycharmProjects/pyhomework
    352 /day4/内置函数/内置函数.py', '__doc__': None, '__package__': None, '__loader__':
    353 <_frozen_importlib_external.SourceFileLoader object at 0x0000000000695B00>,
    354 '__cached__': None, '__builtins__': <module 'built
    355 注:可以判断一个文件中的变量是否存在,而globals()只能打印全局变量
    356 
    357 
    358 
    359 #####################################
    360 30、hash(object)
    361 
    362 功能:反射出一个对象的对应的hash值。
    363 
    364 >>> hash('zhangqigao')
    365 2313972277536963491
    366 >>> hash(255)
    367 255
    368 >>> hash('a')
    369 6806508886604307842
    370 
    371 
    372 
    373 
    374 #####################################
    375 31、help([object])
    376 
    377 功能:显示对象的帮助信息
    378 
    379 >>> res = []  #定义一个列表
    380 >>> help(res)   #打印帮助信息
    381 Help on list object:
    382  
    383 class list(object)
    384  |  list() -> new empty list
    385  |  list(iterable) -> new list initialized from iterable's items
    386  | 
    387  |  Methods defined here:
    388  | 
    389  .....
    390 
    391 
    392 
    393 
    394 #####################################
    395 32、hex(x)
    396 
    397 功能:把一个数字转成16进制
    398 
    399 
    400 >>> hex(255)
    401 '0xff'
    402 >>> hex(10)
    403 '0xa'
    404 
    405 
    406 
    407 
    408 #####################################
    409 33、id(object)
    410 功能:返回对象的内存地址
    411 
    412 >>> id('zhangqigao')
    413 50993136   #'zhangqigao'这个字符串的内存地址
    414 
    415 
    416 
    417 #####################################
    418 34、input([prompt])
    419 
    420 功能:输入字符串
    421 
    422 
    423 >>> s = input('--> ') 
    424 --> Monty Python's Flying Circus  #输入的内容
    425 >>> s 
    426 "Monty Python's Flying Circus"
    427 
    428 
    429 
    430 
    431 #####################################
    432 35、int(x)
    433 
    434 功能:把其他数据类型强制转换成int类型
    435 
    436 >>> int('10')
    437 10
    438 
    439 
    440 
    441 
    442 #####################################
    443 36、isinstance(object, classinfo)
    444 
    445 功能:这个在迭代器中使用,详情:猛击这里
    446 
    447 
    448 
    449 #####################################
    450 37、issubclass(class, classinfo)
    451 
    452 功能:判断是否是一个子类,这个后续讲到类那边会讲
    453 
    454 
    455 
    456 
    457 #####################################
    458 38、iter(object[, sentinel])
    459 
    460 功能:把一个普通序列转成迭代器
    461 
    462 with open('mydata.txt') as fp:
    463     for line in iter(fp.readline, ''):
    464         process_line(line)
    465 
    466 
    467 
    468 
    469 #####################################
    470 39、len(s)
    471 
    472 功能:计算序列或者字符串的长度
    473 
    474 >>> len("zhangqigao")  #字符串的长度
    475 10
    476 >>> len([1,2,3,4,5])  #列表的长度
    477 5
    478 
    479 
    480 
    481 
    482 #####################################
    483 40、list([iterable])
    484 
    485 功能:把其他序列转换成一个列表
    486 
    487 
    488 >>> list((1,2,3,4,5))   #把一个元组转换为一个列表
    489 [1, 2, 3, 4, 5]
    490 
    491 
    492 
    493 
    494 #####################################
    495 41、locals()
    496 
    497 功能:打印局部变量
    498 
    499 def test():
    500     locals_var = 333
    501     print(locals())   #只打印局部变量
    502  
    503 test()
    504 print(globals().get("locals_var"))  #只能打印全局变量
    505  
    506 #输出
    507  
    508 {'locals_var': 333}
    509 None
    510 
    511 
    512 
    513 
    514 #####################################
    515 42、max(iterable, *[, key, default])
    516 能:返回列表重点额最大值
    517 
    518 >>> max([1,2,3,4,5])
    519 5
    520 
    521 
    522 
    523 
    524 #####################################
    525 43、min(iterable, *[, key, default])
    526 
    527 功能:返回列表中的最小值
    528 
    529 >>> min([1,2,3,4,5])
    530 1
    531 
    532 
    533 
    534 
    535 #####################################
    536 44、memoryview(obj)
    537 
    538 功能:暂时用不到
    539 
    540 
    541 
    542 
    543 #####################################
    544 45、next(iterator[, default])
    545 
    546 功能:返回迭代器的下一个值,相当于__next__()方法,如果迭代最后一个数据之后没有值了,则会抛出一个StopIteration异常
    547 
    548 >>> a = iter([1,2])
    549 >>> next(a)
    550 1
    551 >>> next(a)
    552 2
    553 >>> next(a)
    554 Traceback (most recent call last):
    555   File "<input>", line 1, in <module>
    556 StopIteration
    557 
    558 
    559 
    560 
    561 #####################################
    562 46、object
    563 
    564 功能:python中一切皆对象,每一个对象都有它的属性和方法
    565 
    566 
    567 
    568 
    569 #####################################
    570 47、oct(x)
    571 
    572 功能:把一个数转成8进制
    573 
    574 >>> oct(7)
    575 '0o7'
    576 >>> oct(8)
    577 '0o10'
    578 >>> oct(15)
    579 '0o17'
    580 >>> oct(16)
    581 '0o20'
    582 
    583 
    584 
    585 
    586 #####################################
    587 48、open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
    588 
    589 功能:文件操作
    590 
    591 
    592 
    593 
    594 
    595 #####################################
    596 49、pow(x, y[, z])
    597 
    598 功能:返回多少次幂
    599 
    600 >>> pow(2,3)  #相当于2**3
    601 8
    602 
    603 
    604 
    605 
    606 #####################################
    607 50、print(*objects, sep=' ', end='
    ', file=sys.stdout, flush=False)
    608 
    609 功能:打印
    610 
    611 >>> print("zhangqigao")
    612 zhangqigao
    613 
    614 
    615 
    616 
    617 #####################################
    618 51、property(fget=None, fset=None, fdel=None, doc=None)
    619 
    620 功能:类方法。类内部装饰器
    621 
    622 
    623 
    624 #####################################
    625 52、range(stop)、range(start, stop[, step])
    626 
    627 功能:生成一个迭代器
    628 
    629 >>> range(5)
    630 range(0, 5)
    631 >>> range(1,5)
    632 range(1, 5)
    633 >>> range(1,5,2)
    634 range(1, 5, 2)
    635 
    636 
    637 
    638 #####################################
    639 53、repr(object)
    640 
    641 功能:把代码转成字符串对象
    642 
    643 
    644 
    645 #####################################
    646 54、reversed(seq)
    647 
    648 功能:反转一个序列,跟列表中的reversed方法是一样的
    649 
    650 >>> reversed([1,2,3,4,5])
    651 <list_reverseiterator object at 0x00000000030A2588>  #变成一个迭代器
    652 >>> for i in  reversed([1,2,3,4,5]):
    653 ...     print(i)
    654 ...    
    655 5
    656 4
    657 3
    658 2
    659 1
    660 
    661 
    662 
    663 
    664 #####################################
    665 55、round(number[, ndigits])
    666 
    667 功能:保留float数据类型位数
    668 
    669 >>> round(1.23344,2)  #保留两位
    670 1.23
    671 
    672 
    673 
    674 
    675 #####################################
    676 56、set([iterable])
    677 
    678 功能:创建一个集合
    679 
    680 
    681 
    682 #####################################
    683 57、setattr(object, name, value)
    684 
    685 功能:类的反射方法
    686 
    687 
    688 
    689 
    690 #####################################
    691 58、slice(stop),slice(start, stop[, step])
    692 
    693 功能:序列的切片
    694 
    695 >>> a = [1,2,3,4,5,6]
    696 >>> a[slice(1,3)]
    697 [2, 3]
    698 >>> a[1:3]
    699 [2, 3]
    700 
    701 
    702 
    703 
    704 #####################################
    705 59、sorted(iterable[, key][, reverse])
    706 
    707 功能:对一个序列进行排序
    708 
    709 >>> sorted([5,3,2,6,8])
    710 [2, 3, 5, 6, 8]
    711 >>> a = {1:5,6:8,3:6}
    712 >>> sorted(a)  #默认是按key排序
    713 [1, 3, 6]
    714 >>> sorted(a.items())  #按key排序
    715 [(1, 5), (3, 6), (6, 8)]
    716 >>> sorted(a.items(),key = lambda x:x[1])  #按value排序
    717 [(1, 5), (3, 6), (6, 8)]
    718 
    719 
    720 
    721 #####################################
    722 60、 str(object)
    723 
    724 功能:把其他数据类型转换为字符串
    725 
    726 
    727 >>> str(1)
    728 '1'
    729 
    730 
    731 
    732 
    733 #####################################
    734 61、sum(iterable[, start])
    735 
    736 功能:求一个列表的和
    737 
    738 
    739 >>> sum([1,2,3,4,5,6])
    740 21
    741 
    742 
    743 
    744 #####################################
    745 62、super([type[, object-or-type]])
    746 
    747 功能:这个是类的继承,新式类
    748 
    749 
    750 
    751 
    752 #####################################
    753 63、tuple([iterable])
    754 
    755 功能:把其他序列转换为一个元组
    756 
    757 >>> tuple([1,2,3,4,5])
    758 (1, 2, 3, 4, 5)
    759 
    760 
    761 
    762 
    763 #####################################
    764 64、type(object) 、type(name, bases, dict)
    765 
    766 功能:查看一个对象的数据类型
    767 
    768 >>> a = 'zhangqigao'
    769 >>> type(a)
    770 <class 'str'>
    771 注:一切数据类型都是有type()方法产生,它是一切数据类型的根。
    772 
    773 
    774 
    775 
    776 #####################################
    777 65、vars([object])
    778 
    779 功能:返回对象的所有属性
    780 
    781 
    782 
    783 
    784 #####################################
    785 66、zip(*iterables)
    786 
    787 功能:zip中文意思是拉链的意思,把两个序列一一对应起来。
    788 
    789 >>> a = [1,2,3,4]
    790 >>> b=['a','b','c','d']
    791 >>> for i in zip(a,b):
    792 ...     print(i)
    793 ...    
    794 (1, 'a')
    795 (2, 'b')
    796 (3, 'c')
    797 (4, 'd')
    798  注:如果a的元素比b的多,则按照元素最少的那个来
    799 
    800 
    801 
    802 
    803 
    804 #####################################
    805 67、__import__(name, globals=None, locals=None, fromlist=(), level=0)
    806 
    807 功能:当导入的模块是一个字符串时,用__import__()
    808 
    809 >>> import os
    810 >>> __import__('os') 
    811 <module 'os' from 'D:\Python\Python35\lib\os.py'>
    View Code

    更多详情:点击

     

    软件开发目录设计规范

    良好的,规范的软件目录结构,能更好的控制程序,让程序具有更高的可读性,可维护性。

    1. 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。
    2. 可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。

     

    1、目录结构

    假设你的项目名为foo,目录结构可以设计成这样:

    |-- bin/
    |   |-- foo
    |
    |-- foo/
    |   |-- tests/
    |   |   |-- __init__.py
    |   |   |-- test_main.py
    |   |
    |   |-- __init__.py
    |   |-- main.py
    |
    |-- docs/
    |   |-- conf.py
    |   |-- abc.rst
    |
    |-- setup.py
    |-- requirements.txt
    |-- README

    简要解释一下:

    1. bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
    2. foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py
    3. docs/: 存放一些文档。
    4. setup.py: 安装、部署、打包的脚本。
    5. requirements.txt: 存放软件依赖的外部Python包列表。
    6. README: 项目说明文件。

    除此之外,有一些方案给出了更加多的内容。比如LICENSE.txt,ChangeLog.txt文件等,我没有列在这里,因为这些东西主要是项目开源的时候需要用到。如果你想写一个开源软件,目录该如何组织,可以参考这里:点击

    2、README

    每个项目都应该有的一个文件,目的是能简要描述该项目的信息,让读者快速了解这个项目。

    它需要说明以下几个事项:

    1. 软件定位,软件的基本功能。
    2. 运行代码的方法: 安装环境、启动命令等。
    3. 简要的使用说明。
    4. 代码目录结构说明,更详细点可以说明软件的基本原理。
    5. 常见问题说明。

    参考:点击

    3、setup.py

    一般来说,用setup.py来管理代码的打包、安装、部署问题。业界标准的写法是用Python流行的打包工具setuptools来管理这些事情。这种方式普遍应用于开源项目中。不过这里的核心思想不是用标准化的工具来解决这些问题,而是说,一个项目一定要有一个安装部署工具,能快速便捷的在一台新机器上将环境装好、代码部署好和将程序运行起来。

    Python写项目的时候,安装环境、部署代码、运行程序这个过程如果是手动完成,会遇到过以下问题:

    1. 安装环境时经常忘了最近又添加了一个新的Python包,结果一到线上运行,程序就出错了。
    2. Python包的版本依赖问题,有时候我们程序中使用的是一个版本的Python包,但是官方的已经是最新的包了,通过手动安装就可能装错了。
    3. 如果依赖的包很多的话,一个一个安装这些依赖是很费时的事情。
    4. 新同学开始写项目的时候,将程序跑起来非常麻烦,因为可能经常忘了要怎么安装各种依赖。

    setup.py可以将这些事情自动化起来,提高效率、减少出错的概率。"复杂的东西自动化,能自动化的东西一定要自动化。"

    4、requirements.txt

    这个文件存在的目的是:

    1. 方便开发者维护软件的包依赖。将开发过程中新增的包添加进这个列表中,避免在setup.py安装依赖时漏掉软件包。
    2. 方便读者明确项目使用了哪些Python包。

    这个文件的格式是每一行包含一个包依赖的说明,通常是flask>=0.10这种格式,要求是这个格式能被pip识别,这样就可以简单的通过 pip install -r requirements.txt来把所有Python包依赖都装好了。

    具体格式说明:点击

  • 相关阅读:
    学习笔记CSS
    悲剧,当用cywin 写Linux脚本
    .net中控件的命名规则和一些词语的简称(转)(I)
    PyMining开源中文文本数据挖掘平台 Ver 0.2发布
    TCP和UDP的区别(转)
    发一道我今天遇到C面试题(求完美解)
    C#三种定时器的实现转载
    window 拷贝 linux 远程
    datepicker 日月年
    Oracle PL/SQL练习题总目录 hl3292
  • 原文地址:https://www.cnblogs.com/Keep-Ambition/p/7278831.html
Copyright © 2011-2022 走看看