高级编程和编程规范总结


高级编程和编程规范总结

  • 高级编程和编程规范总结
    • 1. 可迭代对象
    • 2. 推导式
    • 3.生成器
    • 4. 迭代器
    • 5. 规范编写代码
    • 6. 练习
    • 总结

1. 可迭代对象

  1. 对list、tuple、dict、set、str等类型的数据使用for…in…的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。
  2. 把可以通过for…in…这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(Iterable)。

2. 推导式

  • 推导式分为 列表推导式、字典推导式、集合推导式等。在这里以其中一种也是用的最多列表推导式进行演示
  • 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表简单理解就是由一个旧的列表来构建出一个新的列表

推导式语法

[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]

ls = ['chenny','amy','body','heading','粒子']   #列表
def fun(ls):ls_1 = []  # 定义一个空列表for i in ls:          #遍历列表if len(i) > 3:    #条件判断,判断ls中字符串长度是否>3ls_1.append(i)    #将符合条件的字符串添加到新列表ls_1print(ls_1)
fun(ls)
#推导式
ls_2 = [i for i in ls if len(i)>3]
print(ls_2)
  • 例子
#需求:求1-100之间的整数
ls_3 = [i for i in range(1,101) if i % 2 == 0]
print(ls_3)#需求:求1-100之间的整数,且还能被4整除的数
ls_4 = [i for i in range(1,101) if i % 2 == 0 and i % 4 == 0 ]
print(ls_4)

3.生成器

创建生成器的方式

  1. 使用类似列表推导式的方法得到生成器
#方法一:使用类似列表推导式的方法得到生成器#获得1-10之间数*2
ls = [i*2 for i in range(1,11)]
print(ls)#不希望一次性得到太多的数据,需要时要多少数据就能够获得多少数据
gen = (i*2 for i in range(1,11))
print(gen,type(gen))
print(gen.__next__())
#通过next函数来获取
i = 1
while i < 10:print(next(gen))i += 1
  1. 使用函数+yield来实现
#方法二:使用函数+yield来实现
def fun():i = 0while True:i += 1yield i       #生成器yieldr = fun()
print(r)
print(next(r))   #按生成的顺序依次往下取
print(next(r))

只要在函数中出现yield关键字它就是一个生成器函数

生成器的特性

  1. 生成器会记住上一次取数据的位置,然后下一次取数据时继续从上一次的位置运行\
  2. 生成器生成一次数据,当第一次生成的数据取完就会结束生命周期,第二次去取就没有数据了
#生成器的特性:1.生成器会记住上一次取数据的位置,然后下一次取数据时继续从上一次的位置运行\
#            2.生成器生成一次数据,当第一次生成的数据取完就会结束生命周期,第二次去取就没有数据了
gen = (i*2 for i in range(1,11))
print(gen,type(gen))
ls = [i for i in gen]   #第一次取生成器里的数据
ls_1 = [i for i in gen]  #第二次取生成器里的数据
print(ls)
print(ls_1)

4. 迭代器

  • 迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问完结束。
#迭代器
class Test():     #创建一个类def __init__(self,data=1):    #定义一个方法self.data = datadef __iter__(self):return selfdef __next__(self):if self.data > 5:raise StopIteration     #扔出错误else:self.data += 1return self.data
for item in Test(3):print(item)
  • 可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator
      生成器是可迭代的,也是迭代器
      列表是可迭代的,但不是迭代器
      通过iter()函数可以将可迭代的变成一个迭代器
ls = [1,2,3,4,5,6]
ls_1 = (1,2,3,4,5,6)
ite1 = iter(ls)
ite2 = iter(ls_1)
print(ite1)
print(ite2)

5. 规范编写代码

  1. 缩进使用4个空格, 空格是首选的缩进方式. Python3 不允许混合使用制表符和空格来缩进.
  2. 每一行最大长度限制在79个字符以内.
  3. 顶层函数、类的定义, 前后使用两个空行隔开.
  4. import 导入
  • 导入建议在不同的行, 例如:
import os
import sys
  • 不建议如下导包
import os,sys
  • 但是可以如下:
from subprocess import Popen, PIPE
  1. 导包位于文件顶部, 在模块注释、文档字符串之后, 全局变量、常量之前. 导入按照以下顺序分组:
    标准库导入
    相关第三方导入
    本地应用/库导入
    在每一组导入之间加入空行

  2. Python 中定义字符串使用双引号、单引号是相同的, 尽量保持使用同一方式定义字符串. 当一个字符串包含单引号或者双引号时, 在最外层使用不同的符号来避免使用反斜杠转义, 从而提高可读性.

  3. 表达式和语句中的空格

  • 避免在小括号、方括号、花括号后跟空格.
  • 避免在逗号、分好、冒号之前添加空格.
  • 冒号在切片中就像二元运算符, 两边要有相同数量的空格. 如果某个切片参数省略, 空格也省略.
  • 避免为了和另外一个赋值语句对齐, 在赋值运算符附加多个空格.
  • 避免在表达式尾部添加空格, 因为尾部空格通常看不见, 会产生混乱.
  • 总是在二元运算符两边加一个空格, 赋值(=),增量赋值(+=,-=),比较(==,<,>,!=,<>,<=,>=,in,not,in,is,is not),布尔(and, or, not
  • 避免将小的代码块和 if/for/while 放在同一行, 要避免代码行太长.
if foo == 'blah': do_blah_thing()
for x in lst: total += x
while t < 10: t = delay()
  1. 永远不要使用字母 ‘l’(小写的L), ‘O’(大写的O), 或者 ‘I’(大写的I) 作为单字符变量名. 在有些字体里, 这些字符无法和数字0和1区分, 如果想用 ‘l’, 用 ‘L’ 代替.

  2. 类名一般使用首字母大写的约定.

  3. 函数名应该小写, 如果想提高可读性可以用下划线分隔.

  4. 如果函数的参数名和已有的关键词冲突, 在最后加单一下划线比缩写或随意拼写更好. 因此 class_ 比 clss 更好.(也许最好用同义词来避免这种冲突).

  5. 方法名和实例变量使用下划线分割的小写单词, 以提
    高可读性.

6. 练习

  1. 请使用装饰器实现已存在的函数的执行所花费的时间。
    • time模块
# 1. 请使用装饰器实现已存在的函数的执行所花费的时间。
# • time模块
import time      #导包def fun_1(fn):        #定义外层函数def new_fun(*args,**kwargs):     #定义内层内层函数,不定长参数print('程序开始')fn(*args,**kwargs)print('程序结束')return new_fun@fun_1   #生成器的语法糖写法
def fun(a):t1 = time.time()  # 获取开始时间for i in range(1,a):print('{:@^15}'.format(i))t2 = time.time()  # 获取结束时间m = t2 - t1  # 计算时间差print(f'整个程序耗时:{m}s')n = eval(input("请输入尽可能大的任意整数:"))
fun(n)

总结

本文为学习笔记,转载请标明出处,本文仅供交流学习,请勿用于非法途径,希望本文对大家有帮助。

仅是个人意见,如有不足之处或者侵权,请留言

高级编程和编程规范总结相关推荐

  1. linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战

    课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...

  2. 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese

    <Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...

  3. Linux C高级编程——时间编程

    Linux高级编程--时间编程 宗旨:技术的学习是有限的,分享的精神是无限的. 1 时间类型 (1) 世界标准世界(格林威治时间) (2) 日历时间(1970年1月1日0时)--到此时经历的秒数 2 ...

  4. eclipse java ui,Eclipse Forms筹划漂亮UI之高级组件[Java编程]

    赞助商链接 本文"Eclipse Forms筹划漂亮UI之高级组件[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价 ...

  5. 黑马程序员_java高级篇网络编程TCP实战Day8(上)

    ---------------------ASP.Net+Android+IOS开发.Net培训.期待与您交流! ----------- 黑马程序员_java高级篇网络编程TCP实战Day8(上) ( ...

  6. 初入Shell编程,了解规范与变量

    初入Shell编程,了解规范与变量 一.Shell脚本简介 1.1 Shell脚本概述 1.2 Shell脚本应用场景 1.3 Shell脚本的作用 1.4 shell脚本构成 二.Shell脚本的编 ...

  7. [iOS]Advanced Memory Management Programming Guide 高级内存管理编程指南(官方文档翻译)

    Advanced Memory Management Programming Guide - 高级内存管理编程指南(官方文档翻译) 版权声明:本文为博主原创翻译,如需转载请注明出处. 新博客文章地址: ...

  8. java自动化测试语言高级之多线程编程

    java自动化测试语言高级之多线程编程 Java 多线程编程 Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 ...

  9. java自动化测试语言高级之网络编程

    java自动化测试语言高级之网络编程 文章目录 java自动化测试语言高级之网络编程 Java 网络编程 Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来 ...

  10. 高级shell脚本编程之函数库、信号与陷进、文件处理、数组、安全性

    高级shell脚本编程之函数库.信号与陷进.文件处理.数组.安全性 1.函数库 把所有需要用到的函数都放到一个文件中,然后每个脚本的开头包含这个文件.例如: #!/bin/sh scope(){ lo ...

最新文章

  1. 宇宙和世界真的是虚拟的吗?
  2. Java虚拟机类装载的原理及实现
  3. 编程语言与思维:科技公司如何自我重构?
  4. 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
  5. 在CentOS 6.3中安装与配置JDK-7
  6. 一个常用的Android工具库
  7. Java相关资源下载路径
  8. 活动目录系列之一……活动目录简介及部署
  9. E72上安装fring使用skypeout拨打电话
  10. linux下绘图工具dia,功能强劲直逼visio - 潜入技术的海洋 - 51CTO技术博客
  11. VC++程序设计与应用--MFC应用程序概述
  12. 使用jsp实现留言板功能
  13. 惠普打印机WiFi连接使用
  14. html怎么引入框架,html文件中引入bootstrap框架
  15. 获取安卓应用包名和入口 Activity
  16. 搜狗技术开放日招募令 | 免费报名,与搜狗AI大咖面对面!
  17. DTCC2022 | openGauss打造企业级开源数据库,服务行业核心系统
  18. 2022年美容师(中级)找解析及美容师(中级)模拟试题
  19. python-大大的叉
  20. linux pcs是什么系统,linux操作系统版本查看

热门文章

  1. ubuntu设置python3.7为默认(python版本切换)
  2. 随手记_选方向读论文发论文相关
  3. 【一天一个C++小知识】003.C++中的void指针类型
  4. 关于wait、notify在火车售票战的实例
  5. 斯坦福大学深度学习公开课cs231n学习笔记(9)softmax分类和神经网络分类代码实现
  6. opencv 写视频时找不到编码器问题解决方法
  7. opencv中滚动条操作
  8. 中国高校鄙视链指南...
  9. python 正则表达式简介
  10. 碎片知识总结_刷题篇