【Python】一、Python基础

0 序

先讲一个故事。西汉初期,丞相萧何死后,由曹参接任,曹丞相一天到晚都请人喝酒聊天,好像根本就不用心在治理国家似的。惠帝感到很纳闷,又想不出个所以然来,只以为是曹相国嫌他太年轻了,看不起他,所以就不愿意尽心尽力来辅佐他。终于有一天汉惠帝责问曹参,曹参反问“请陛下好好地想想,您跟先帝(刘邦)相比,谁更贤明英武呢?”惠帝立即说:“我怎么敢和先帝相提并论呢?”曹参又问:“陛下看我的德才跟萧何相国相比,谁强呢?”汉惠帝笑着说:“我看你好像是不如萧相国。”,曹参接过惠帝的话说:“陛下说得非常正确。既然您的贤能不如先帝,我的德才又比不上萧相国,那么先帝与萧相国在统一天下以后,陆续制定了许多明确而又完备的法令,在执行中又都是卓有成效的,难道我们还能制定出超过他们的法令规章来吗?”
这就是著名的“萧规曹随”的故事。

我讲这个故事,是想表达互联网上优质的Python博客、视频已经非常多,肯定比我这个毫无教学经验的人讲的好。所以我不会重复写这些内容,但会给出链接,抛砖引玉,故这个系列不是正经的“Python教程”,想要学会Python还是多读我推荐的一些资料吧。我更多的篇幅是介绍自己的经验心得,和一般人不会重点讲但实战中又很实用的技巧。

作者:陈坤泽

邮箱:877362867@qq.com

1 为什么要学Python

廖雪峰Python教程有关于开发效率、运行效率、未来趋势、找工作等方面完善的介绍:

完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。所以Python是一种相当高级的语言。
代码少的代价是运行速度慢,但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1秒,你想,用户能感觉到1.001秒和1.1秒的区别吗?

  1. 上手容易,万能语言。
    • 小学生都能学会的语言,你认为上手有多难?Python将被纳入高考,小学生都在学Python,你慌了吗?“网红” Python,疯狂打 call
    • python有非常庞大的第三方功能扩展库,包罗万象,几乎无所不能。可以做测试、运维、数据分析、数据挖掘、机器学习和爬虫等。
    • Python降低了进入IT行业的门槛,我身边有很多数学专业的朋友,成功转型做Python大数据分析的例子。数学专业不好找工作,迷茫的时候,学一个Python没有什么坏处,但却大大扩宽了未来的发展出路。不仅是小众的LaTeX,随着人工智能的发展,越来越多工作会被自动化技术取缔,所以我要求编校组的每个人都要学习Python,否则等我们35岁的时候,试想我们跟刚毕业的大学生相比有什么优势呢?是什么价值让我们是不可替代的?程序员:不要自称为码农
  2. 开发简洁、快速。
    • Python创始人龟叔印在T恤前的理念就是“人生苦短,我用Python”。
    • 用Python能快速实现我们需要的一些小功能,做成自动化脚本工具。
    • python项目的文件也很简洁,一个py文件既是代码,也是可执行文件。而C++,一个cpp文件可能对应有h头文件要管理,就c++的项目头文件管理学问,都可以开上好几节课来探讨了。简洁清晰的文件系统,让我们写代码的时候会更专注于业务功能的开发,而不是总去思考计算机底层相关的问题。
  3. 可以为自己的学习工作开发好用的小程序。
    • 将我们开发的Python小程序放到环境变量,windows操作系统可以用“Win键 + r”来快速打开程序。
    • 例如:"rename.py"的文件批量重命名工具、“查看目录下png图片信息.py”。
    • 也可以使用PyQt开发剪切板的监控工具,在复制时,自动对内容进行处理,粘贴的时候直接就是处理好的结果内容。
    • 还可以对一些第三方程序进行扩展,例如Beyond Compare差异对比软件,有时候需要对两段文本比较差异,就要新建两个文件,将内容粘贴进去后,再打开比较,手动操作就会非常繁琐。将其写成bc.py工具,直接用Beyond Compare软件打开两个新建空文件,将文本复制进去,就能快速实现差异比较了。

2 Python学习资料推荐

我只推荐我看过的资料,但优质的资源肯定不止这些,大家可以自己去发掘,不错的资料可以分享出来让更多人知道。

  1. Python教程:
  2. 常见问题:

3 编程技巧

3.1 软件安装

  1. 本文提及部分文件可在此处下载 。
  2. 下载Python(建议装windows64位版)
    • 要勾选下方的“Add Python 3.x to PATH”,把python加入环境变量。
  3. pip加速
    • 使用“pip install”安装Package的时候,默认的国外镜像速度特别慢,可以通过修改为国内镜像加速。参考资料
    • 下载附件里的“pip”文件夹,放到个人目录里,例如我的用户名是kzche,则放到:‪C:\Users\kzche\pip\pip.ini。
  4. IDE推荐PyCharm,pycharm视频教程
    • 这是edu免费版PyCharm:https://www.jetbrains.com/education/download/#section=pycharm-edu(edu没有我很需要用的Structure功能,所以我安装的是我网盘里存的pycharm-community-2019.3.2.exe)
    • 我喜欢深色的配色方案: File/Settings/Appearance & Behavior/Appearance/Theme/Darcula
    • 修改创建python脚本文件时的模板:我的python模板参考资料

      Markdown
    • 设置Python解释器,以及可以管理Package:

    • 打开一个项目后,可以关闭不需要的目录的索引index,加快项目加载速度:
      File/Settings/Project: YourProjectName/Project Structure/Right click on folder and press “Excluded”
    • (edu版本好像没这功能)View / Tool Windows / Structure,可以打开代码结构查看工具。
  5. Python中一些比较难安装的Package
  6. 推荐windows下一个更好用的cmder终端,以及pycharm里的terminal可以改设为cmder

3.2 代码风格规范

在PyCharm,可以用Ctrl + Shift + Alt + L,对代码格式化,剩下还有下图这种下划线提示的,鼠标移过去,会提示你的代码有什么瑕疵,一般是一些PEP8规范。

Markdown

关于PEP8,至少要了解命名规范:变量函数名lower_with_under,类名CapWords,常量CAPS_WITH_UNDER。

很多下划线问题,都可以把鼠标光标停留在上面,按Alt + Enter,不少问题IDE会帮忙自动修正,或者弹出多种参考修正方案的菜单。

3.3 注释等代码块

作为规范的工程开发,一个python代码文件的开头不应该直接就写import,而是要写两个东西:编码与作者信息,文档注释。

Markdown

灰色部分,第1~5行:

  • 第1行:是让linux系统知道这是一个python3文件
  • 第2行:告知解析程序本文件文本采用的编码格式
  • 第3~5行:代码作者和联系邮箱,作者可以有多人,以及文件的创建或更新时间。
    有需要的话还可以增加"# @Version : v.0.0"记录版本信息。

这块代码除了用PyCharm设置py文件模板的方法,在新建.py文件时自动生成。也可以用搜狗输入法设置"自定义短语",用输入法设置宏的好处是不用局限于IDE,在任何地方都能用。还可以用这个方法设置很多常用代码块。

绿色部分,第7~18行:

Python有一种独一无二的的注释方式:使用文档字符串(Docstring),文档字符串是包、模块、类或函数里的第一个语句,这些字符串可以通过对象的__doc__成员被自动提取,并且被pydoc所用。

每个文件的开头,最好有一段其文档介绍。定义函数等时也是同理:

def strwidth(s):
    """string width
    中英字符串实际宽度
    
    >>> strwidth('ab')
    2
    >>> strwidth('a⑪中⑩')
    7

    ⑩等字符的宽度还是跟字体有关的,不过在大部分地方好像都是域宽2,目前算法问题不大
    """
    try:
        res = len(s.encode('gbk'))
    except UnicodeEncodeError:
        count = len(s)
        for x in s:
            if ord(x) > 127:
                count += 1
        res = count
    return res

3.4 文档测试

上述strwidth用到了“>>>”,它既是一份简洁清晰易懂的示例文档,也是一份“单元测试”,这是Python特有的“文档测试”功能。(廖雪峰文档测试基础)

在PyCharm可以非常方便地运行一个文件中的所有文档测试:

Markdown

其中第③步具体设置方法:
在这里插入图片描述

Tips:

  • 在文档测试中的代码,IDE也是能识别,进行智能编辑、代码补全提示的。
  • 有时候不用显式的配置doctest,PyCharm会智能识别文件执行文档测试,甚至光标停留在函数、类里面,可以单独测试一个对象的测试样例。
  • 有些代码可能只适合演示怎么调用,但并不适合进行文档测试,因为运行需要占用太多时间,或者并没有返回值,或者每次的运行结果可能是会不断变化的,此时可以用双大于符>>来表示,例如:
    def chrome(file, filename=None, ndim=None, **kwargs):
        r"""使用谷歌浏览器查看内容,详细用法见底层函数viewfiles
        
        >> chrome(r'C:\Users\kzche\Desktop\b.xml')  # 使用chrome查看文件内容
        >> chrome('aabb')  # 使用chrome查看一个字符串值
        >> chrome([123, 456])  # 使用chrome查看一个变量值
    
        这个函数可以浏览文本、list、dict、DataFrame表格数据、图片、html等各种文件的超级工具
        """
    

3.5 代码的查找与重命名

Ctrl+鼠标左键(点击对象),可以跳转到对象的定义处;
在对象右键,也有"Refactor"可以对对象进行批量重命名。
但有时候IDE的功能无法满足我们的需求,又或Refactor有时候会无效。

关于查找,我们可以借助全文搜索软件:FileLocator全文检索软件

在项目重构中,时常需要大量的文本替换工作。可以自己写一个脚本工具,遍历文件进行批量替换,但直接替换存在很大的风险隐患,此时可以结合Beyond Compare等软件进行替换效果预览,具体操作方法后续会补充介绍文章。

3.6 小段代码测试与分享

  1. 在项目中需要测试一小段语法或代码功能时,可以直接在PyCharm左下角打开一个Python控制台:
    在这里插入图片描述
  2. 需要将自己的代码展示给他人看时(向他人请教自己的代码问题时),避免冗长,换行,无缩进,无高亮等问题给他人阅读代码时带来的不便。
    可以用:https://paste.ubuntu.com/ 。 不过这是公开网站,不要放涉及技术泄密的代码。
    [外链图片转存失败(img-AY9eTwYJ-1563518195076)(http://i1.fuimg.com/582188/dec7c24264a51f79.png)]
  3. 还可以使用在线编程网站,进行代码测试,开发小程序、代码分享。

    Markdown

4 笔记整理

  1. 问问题的时候,要整理MWE(作者Liam Huang):
    • MWE是Minimal Working Example 的缩写,意思是「最⼩⼯作⽰例」。顾名思义,最⼩⼯作⽰例的特点有三:
      简短不包含与问题⽆关的代码⽚段;
      工作能够独⽴运⾏于他⼈的计算机上,⽽不需要再添加额外的代码;
      示例在他⼈计算机上的运⾏结果,能完整地再现你所遇到的问题。
    • 不仅是问问题,我们在整理笔记,知识点的时候,道理是相通的,
      例如下列两段代码,即简介地演示了遇到的问题,在注释里写出程序运行会得到的结果,也演示了解决方案的代码:

      Markdown
  2. 可以参考Python 标准库官方文档
    的目录结构进行分类整理,例如下图是我依据官方文档,对文字处理等方面的笔记结构,新增一些相关的第三方库chardet、ahocorasick、Levenshtein。

    Markdown
  3. 尽可能用表格、图片、思维导图的形式代替纯文本描述。使用纯文本时,也可以配合列表、缩进、颜色等格式丰富表达内容。
  4. 参考文献:所有不是自己写的内容,借鉴参考了的资料,都要附上介绍或链接,这不仅是尊重别人的劳动成果,也方便日后遇到细节问题,查阅原文复核。
  5. 在线Jupyter,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。对我们工程开发来说可能实用价值不大,不过这也是很流行的一个工具,可以了解下。例如在数据分析工作中,可以边写代码,边写解释,边作图,项目完成后既是一份代码,也是一份文档笔记。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值