广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【Python】《Python编程之美
  • 952
分享到

【Python】《Python编程之美

之美Python 2023-01-31 02:01:49 952人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

草草的看了一遍,有些设计代码讲解地方因为我的层次不及,尚不能理解。 基本 留白胜于紧凑 |> 一行只写一条语句 明确胜于隐晦 |> 判断代码写的是否优雅的一个规则是:其他开发者是否只阅读函数的首行和末行就能理解程序的作用 错

草草的看了一遍,有些设计代码讲解地方因为我的层次不及,尚不能理解。

基本

  • 留白胜于紧凑 |> 一行只写一条语句
  • 明确胜于隐晦 |> 判断代码写的是否优雅的一个规则是:其他开发者是否只阅读函数的首行和末行就能理解程序的作用
  • 错误不应被默默的忽略,除非你明确地忽视 |> 没有指定任何异常类型的except语句将捕获所有的异常,会屏蔽键盘发出的KeyboradInterrupt,使得ctrl +c无法被正确响应
  • *args的理由类似,kwargs这类强大的技术应该用在真正需要之处。如果函数的意图可以通过更简单更清晰的结构来充分表达,那么不应该使用这类技术。
  • 相比较于运行速度,python更在意代码的可读性,Python把用户友好看的比性能更重

    函数

  • Python函数应具有如下特点
      • 易读:函数名称和参数都无需解释
      • 易改: 添加新的关键字参数不会破坏代码其他参数
      • 尽量在移除返回函数结果,函数体的返回点越少越好,当函数不能正确执行时,最好返回FalseNone
      • 一个函数只做一件事

    • 使用@property的目的是将函数与数据相分离

      自觉的编程习惯

  • Python中没有private关键字
  • 私有属性和实现细节的主要约定是为所有的内部变量增加“_”前缀
  • 任何不开放给外部使用的方法或者属性,都应带下划线前缀
  • 随时都可以讲私有属性公有化,但是把公有化属性私有化会困难很多
  • 访问字典时,使用key in dict的判断语法而不是dict.has_keys(),还可以使用dict.get()处理键值为空时的默认值
  • 访问列表或者数组时,使用enumerate()来生成元素位置,比手动维护一个 i += 1 in for 更pythonic
  • 如果解包是需要赋值,单又不需要其中的某个值,可以使用双下划线(__)来代替此位置的值。双下划线比单下划线 更优

  • 集合set比列表list的速度更快
  • 无法使用with结构时,可以使用try: do xx \nfinnally: do yy来代替

    模块与包

  • 使用import *的代码更难阅读,依赖也难以区分
  • 如果包内的模块和子包不需要共享任何代码,那么init.py文件留空是最佳实践。
  • 依赖引入的兼容性处理
# 处理不同版本的包名不同,或者使用兼容包模拟另一个包
try:
    import functionXX
except ImportError:
    import python2_functionXX as functionXX

# 处理2和3不同包引入,设置可以预设2to3的兼容方案
import sys
if sys.version < "3":
    import python2_functionXX as functionXX
else:
  import functionXX

变量与类型

  • Python是动态类型的语言,变量没有一个固定的类型。变量被实现为对象的指针
  • 复用变量名对代码效率提升没有任何帮助
  • 一个变量只赋值一次是良好的实践
  • 变量命名示例:item_string = "sb" \n item_list= [250,520]
  • 可变类型:允许in-place改变对象的内容,例如列表和字典,都提供了append()或者pop()等变更自身的方法
  • 可变类型不能用作字典的键,因为字典在键存储时使用了哈希方式,不允许键发生变化
  • 字符串是不可变类型
  • 字符拼接:

    sb = "me"
    sb2 = "you"
    string = "%s %s " %(sb,sb2) # 官方废弃
    string = "{},{}".fORMat(sb,sb2)
    string = "{0},{1}".format(sb,sb2) # 与C#的方式略有类似
    string = "{people1},{people2}".format(people1=sb,people2=sb2) # 最佳风格

    文档

    • sphinx是最流行的Python文档工具

内部

  • Python调用栈包含当前Python解释器正在执行的指令。如果函数f()调用了函数g(),那么函数f()会先入栈。待g()被调用时则会入栈压到f()的上面。当g()返回时,它从栈中被弹出,f()会从原来中断的位置继续执行。

代码发布

  • 一般会使用PyInstaller去打包程序,PyInstaller会将程序用到的所有Python库都放入dist文件夹,所以在分发可执行文件时,需要分发整个dist文件夹

    命令行应用

  • argparse替代了已经废弃的optparse模块,是Python标准库内置的包。最优使用
  • docopt使用函数或者文件的doc位置设置命令行交互。
  • click使用注释器的方式来实现命令交互编写
  • clint可以着色和便利的处理缩进问题

    GUI应用

  • tkinter库所有依赖已经捆绑进Python发行版
  • PyObjC可以提供OC接口,制作MacOS的专用程序

    WSGI服务器

  • 相比较于传统的WEB服务器(Nginx,apache),wsgi服务器性能好,资源少。
  • 比较流行的的服务器有gunicorn,其使用配置比较简单

    代码管理和改进

  • 持续集成,tox |> 打包,测试,部署,Travis-CI |> 分布式持续集成,可与GitHub无缝集成并评论Pull Request
  • jenkins api进行交互最常用的Python工具是python-jenkins
  • 服务器自动化ssh |> Ansible |> 最大的优势是不要求在客户端上安装Python以外的任何东西
  • 系统监控: RawSystemInfo |> psutil > glances (扩展版的top,比较综合,信息全)
  • 系统任务管理:ssh |> Fabric

    速度优化

  • threading 多线程,使用多线程,当Python内核发现某个线程正阻塞在I/O读写上时,会切换到另一个线程来使用处理器,直到这个线程也被阻塞和结束
  • mutliprocessing 多进程,但是不同进程之间的通信需要注意数据的共享安全
  • subprocess用于发起系统调用,推荐Python2用户使用subprocess32版本,该版本修复了若干bug
  • PyPy 是Python的一个纯Python实现。使用PyPy代码不需要任何改动,就能运行得更快。
  • future.concurrent 这个包装了threading和mutliprocessing,用起来方便,但是性能略差。(个人看法)

    数据序列化

  • 将结构数据转化为能够被共享或者存储的格式,保留必要的信息传输数据的接收端(或者从存储中读取数据时)能够在内存中重建对象
  • 可以让被序化的数据占用最小化,便于最小化磁盘需求或者网络带宽需求
  • pickle模块在遇到错误和恶意结构的数据时是不安全的,不要使用pickle对来源不明的数据进行反序列化
  • 跨语言序列化可以使用谷歌的protobuf

    网络编程

  • asyncio 提供异步事件循环来管理与非阻塞套接字或者队列通信,以及任意用户定义的协程。asyncio目前仍不成熟。临时性的存在于标准库中
  • gevent 因轻量,与底层C库libev紧耦合,性能很高,而被广泛使用
  • pika 提供一个清凉的AMQP客户端,用于连接RabbitMQ或者其他消息代理

--结束END--

本文标题: 【Python】《Python编程之美

本文链接: https://www.lsjlt.com/news/185636.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Python】《Python编程之美
    草草的看了一遍,有些设计代码讲解地方因为我的层次不及,尚不能理解。 基本 留白胜于紧凑 |> 一行只写一条语句 明确胜于隐晦 |> 判断代码写的是否优雅的一个规则是:其他开发者是否只阅读函数的首行和末行就能理解程序的作用 错...
    99+
    2023-01-31
    之美 Python
  • Python 之Web编程
      htyper text markup language 即超文本标记语言   超文本:就是指页面内可以包含图片、链接、甚至音乐、程序等非文字元素   标记语言:标记(标签)构成的语言   静态网页:静态的资源,如xxx.html  ...
    99+
    2023-01-30
    Python Web
  • python之初探编程
        接触python语言完全是个偶然。那时候还在一所培训学校里学习网络和系统,和朋友一起去图书馆淘书,转遍了整个楼层,只是找到了一两本感兴趣的计算机方面的书,朋友选的很快,开始催我回去了,真是纠结,拿着借阅卡一次可以借5本,图书馆也挺远...
    99+
    2023-01-31
    python
  • Python网络编程之协程
    What is the association与子例程一样,协程也是一种程序组件。 相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。 协程源自Simula和Modula-2语言,但也有其他语言支持。 协程更适合于用来实...
    99+
    2023-01-31
    网络编程 Python
  • Python并发编程之协程
    协程介绍 协程:是单线程下的并发,又称微线程,纤程。协程是一种用户态的轻量级线程,即线程是由用户程序自己控制调度的。 需要强调的是: #1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫...
    99+
    2023-01-30
    Python
  • python并发编程之多线程编程
    一、threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 二、开启线程的两种方式 方式一: from threading import ...
    99+
    2023-01-31
    之多 线程 python
  • python编程之if/for/whil
    1、python流程控制之if测试A、python对象的特点--所有对象都支持比较操作    数字:通过相对大小进行比较    字符串:按照字典次序逐字进行比较    列表和元组:自左至右比较各部分内容    字典:对排序之后的(键、值)列...
    99+
    2023-01-31
    python whil
  • python socket 编程之三:长
    长连接:开启一个socket连接,收发完数据后,不立刻关闭连接,可以多次收发数据包。 短连接:开启一个socket连接,收发完数据后,立刻关闭连接。 心跳:长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态。 在pyt...
    99+
    2023-01-31
    之三 python socket
  • python网络编程之socketser
    防伪码:存在的,忘却了,红尘万丈,入眸幻灭  在进行网络编程前我们先来说说在网络中服务器与客户端是如何交互的,也就是传说中的TCP三次握手。  三次握手的目的是为了确认客户端与服务端都能接收到对方的信息,以下是三次握手的详细过程:    第...
    99+
    2023-01-31
    网络编程 python socketser
  • Python线程编程之Thread详解
    目录一、线程编程(Thread)1、线程基本概念1.1、什么事线程1.2、线程特征二、threading模块创建线程1、创建线程对象2、 启动线程3、 回收线程4、代码演示5、线程对...
    99+
    2022-11-12
  • python并发编程之多进程
    阅读目录 一 multiprocessing模块介绍 二 Process类的介绍 三 Process类的使用 四 守护进程 一  multiprocessing模块介绍  python中的多线程无法利用多核优势,如果想...
    99+
    2023-01-30
    之多 进程 python
  • Python编程基础之字典
    目录一、字典概念二、字典操作(一)创建字典1、先创建空字典,再添加元素(键值对)2、直接创建包含若干键值对的字典(二)字典操作1、读取字典元素 - 按键取值2、添加字段元素 - 按键...
    99+
    2022-11-12
  • 详解python之异步编程
    目录一、异步编程概述二、python的异步框架模型三、顺序执行多个可重叠的任务四、异步化同步代码五、使用多线程克服具体任务的异步限制总结一、异步编程概述 异步编程是一种并发编程的模式...
    99+
    2022-11-12
  • python编程之网络基础
    1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。 套接字起源于20世纪70年代,有时人们把套接字成为“伯克利套接字”或“BSD套接字”,期初,套接字被设计用在同一台主机上多个应用...
    99+
    2023-01-31
    基础 网络 python
  • python编程之函数思想
    #!/usr/bin/python ##Filename: game.py from sys import exit from random import randint def death():   quips = ["1-dead"...
    99+
    2023-01-31
    函数 思想 python
  • Python进阶之网络编程
    网络通信 使用网络的目的 把多方链接在一起,进行数据传递; 网络编程就是,让不同电脑上的软件进行数据传递,即进程间通信; ip地址 ip地址概念和作用 IP地址是什么:比如192.168.1.1 这样的一些数字; ip地址的作用:用来在电...
    99+
    2023-01-31
    进阶 网络编程 Python
  • python编程之GUI的选择
     前言:本文来自于网络位置http://www.2cto.com/kf/201009/74917.html。尽管内容可能有些老,但是没有关系,对于想深入Python开发的工作者,在选择GUI开发包,乃至可视化IDE方面都还有相当的借鉴意义。...
    99+
    2023-01-31
    python GUI
  • Python网络编程之Python编写TCP协议程序的步骤
    目录TCP客户端程序开发1. 开发 TCP 客户端程序开发步骤回顾2. socket 类的介绍3. TCP 客户端程序开发示例代码执行结果:TCP服务端程序开发1. 开发 TCP 服...
    99+
    2022-11-13
    Python TCP协议程序 Python 网络编程TCP协议
  • Python 之vim编写python自
    Pydiction :vim - python自动补全插件插件的安装如下:1.下载插件包https://github.com/vim-scripts/Pydiction 可以直接下载,也可git下载 [root@localhost ~]# ...
    99+
    2023-01-31
    Python vim python
  • python网络编程之进程详解
    目录1.进程1.1进程:1.2在python中创建进程1.3 使用multiprocessing创建进程1.3.1 单个进程时: 1.3.2 多个子进程时:1.3.3 自定...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作