【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\n') 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='\n', 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'>
更多详情:点击
软件开发目录设计规范
良好的,规范的软件目录结构,能更好的控制程序,让程序具有更高的可读性,可维护性。
- 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。
- 可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。
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
简要解释一下:
bin/
: 存放项目的一些可执行文件,当然你可以起名script/
之类的也行。foo/
: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/
存放单元测试代码; (3) 程序的入口最好命名为main.py
。docs/
: 存放一些文档。setup.py
: 安装、部署、打包的脚本。requirements.txt
: 存放软件依赖的外部Python包列表。README
: 项目说明文件。
除此之外,有一些方案给出了更加多的内容。比如LICENSE.txt
,ChangeLog.txt
文件等,我没有列在这里,因为这些东西主要是项目开源的时候需要用到。如果你想写一个开源软件,目录该如何组织,可以参考这里:点击
2、README
每个项目都应该有的一个文件,目的是能简要描述该项目的信息,让读者快速了解这个项目。
它需要说明以下几个事项:
- 软件定位,软件的基本功能。
- 运行代码的方法: 安装环境、启动命令等。
- 简要的使用说明。
- 代码目录结构说明,更详细点可以说明软件的基本原理。
- 常见问题说明。
参考:点击
3、setup.py
一般来说,用setup.py
来管理代码的打包、安装、部署问题。业界标准的写法是用Python流行的打包工具setuptools来管理这些事情。这种方式普遍应用于开源项目中。不过这里的核心思想不是用标准化的工具来解决这些问题,而是说,一个项目一定要有一个安装部署工具,能快速便捷的在一台新机器上将环境装好、代码部署好和将程序运行起来。
Python写项目的时候,安装环境、部署代码、运行程序这个过程如果是手动完成,会遇到过以下问题:
- 安装环境时经常忘了最近又添加了一个新的Python包,结果一到线上运行,程序就出错了。
- Python包的版本依赖问题,有时候我们程序中使用的是一个版本的Python包,但是官方的已经是最新的包了,通过手动安装就可能装错了。
- 如果依赖的包很多的话,一个一个安装这些依赖是很费时的事情。
- 新同学开始写项目的时候,将程序跑起来非常麻烦,因为可能经常忘了要怎么安装各种依赖。
setup.py
可以将这些事情自动化起来,提高效率、减少出错的概率。"复杂的东西自动化,能自动化的东西一定要自动化。"
4、requirements.txt
这个文件存在的目的是:
- 方便开发者维护软件的包依赖。将开发过程中新增的包添加进这个列表中,避免在
setup.py
安装依赖时漏掉软件包。 - 方便读者明确项目使用了哪些Python包。
这个文件的格式是每一行包含一个包依赖的说明,通常是flask>=0.10
这种格式,要求是这个格式能被pip
识别,这样就可以简单的通过 pip install -r requirements.txt
来把所有Python包依赖都装好了。
具体格式说明:点击