【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'>
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包依赖都装好了。

具体格式说明:点击

 

posted @ 2017-04-20 11:37  Wilson_Blogs  阅读(851)  评论(0编辑  收藏  举报