zoukankan      html  css  js  c++  java
  • 与python的第一次相遇

    欢迎关注WX公众号:【程序员管小亮】

    python学习之路 - 从入门到精通到大师

    1、Python简介

    1.1 历史

    1989,为了度过圣诞假期,Guido开始编写Python语言编译器(是不是太戏剧了,,,成功源自偶然是嘛)。Python这个名字来自Guido的喜爱的电视连续剧《蒙蒂蟒蛇的飞行马戏团》。他希望新的语言Python能够满足他在C和Shell之间创建全功能、易学、可扩展的语言的愿景。

    现在,全世界差不多有600多种编程语言,但流行的编程语言也就那么20来种。如果你听说过TIOBE排行榜,你就能知道编程语言的大致流行程度。这是最近10年最常用的10种编程语言的变化图:
    在这里插入图片描述
    总的来说,这几种编程语言各有千秋。C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而Python是用来 编写应用程序的高级编程语言

    当你用一种语言开始作真正的软件开发时,你除了编写代码外,还需要很多基本的已经写好的现成的东西,来帮助你加快开发进度。比如说,要编写一个电子邮件客户端,如果先从最底层开始编写网络协议相关的代码,那估计一年半载也开发不出来。高级编程语言通常都会提供一个比较完善的基础代码库,让你能直接调用,比如,针对电子邮件协议的SMTP库,针对桌面环境的GUI库,在这些已有的代码库的基础上开发,一个电子邮件客户端几天就能开发出来。

    Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。

    除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。

    1.2 优缺点

    优点

    • 简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

    • 易学:Python极其容易上手,因为Python有极其简单的说明文档 [7] 。

    • 速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 [4]

    • 免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

    • 高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

    • 可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。

    • 解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。

      运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。

      在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。

    • 面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

    • 可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。

    • 可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

    • 丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

    • 规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。

    缺点

    • 单行语句和命令行输出问题:很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。
    • 独特的语法:这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。
    • 运行速度慢:这里是指与C和C++相比。

    1.3 Python的应用领域

    • 云计算:云计算最热的语言,典型的应用OpenStack

    • WEB开发:许多优秀的WEB框架,许多大型网站是Python开发、YouTube、Dropbox、Douban……典型的Web框架包括Django

    • 科学计算和人工智能:典型的图书馆NumPy、SciPy、Matplotlib、Enided图书馆、熊猫

    • 系统操作和维护:操作和维护人员的基本语言

    • 金融:定量交易、金融分析,在金融工程领域,Python不仅使用最多,而且使用最多,其重要性逐年增加。

    • 图形GUI:PyQT,WXPython,TkInter

    1.4 Python在公司的运用

    • 谷歌:谷歌应用程序引擎,代码。谷歌。com、Google.、Google爬虫、Google广告和其他项目正在广泛使用Python。

    • CIA:美国中情局网站是用Python开发的

    • NASA:美国航天局广泛使用Python进行数据分析和计算

    • YouTube:世界上最大的视频网站YouTube是用Python开发的。

    • Dropbox:美国最大的在线云存储网站,全部用Python实现,每天处理10亿的文件上传和下载。

    • Instagram:美国最大的照片共享社交网站,每天有3000多万张照片被共享,所有这些都是用Python开发的

    • 脸谱网:大量的基本库是通过Python实现的

    • Red.:世界上最流行的Linux发行版中的Yum包管理工具是用Python开发的

    • Douban:几乎所有公司的业务都是通过Python开发的。

    • 知识:中国最大的Q&A社区,通过Python开发(国外Quora)

    除此之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝、土豆、新浪、果壳等公司正在使用Python来完成各种任务。

    2、从终端运行Python程序

    2.1 确认Python的版本

    博客介绍的很详细——如何查看已安装的Python和TensorFlow的版本(最全最详细的说明)

    2.2 编写Python源代码

    首先,还是和其他语言一样,和师姐打个招呼吧,可以用文本编辑工具(推荐使用Sublime、Atom、TextMate、VSCode等高级文本编辑工具)编写Python源代码并将其命名为hello.py保存起来,代码内容如下所示。

    print('hello, world!')
    

    2.3 运行程序

    切换到源代码所在的目录并执行下面的命令,看看屏幕上是否输出了"hello, world!"。

    python hello.py
    

    3、代码中的注释

    注释是编程语言的一个重要组成部分,用于在源代码中解释代码的作用从而增强程序的可读性和可维护性,当然也可以将源代码中不需要参与运行的代码段通过注释来去掉,这一点在调试程序的时候经常用到。注释在随源代码进入预处理器或编译时会被移除,不会在目标代码中保留也不会影响程序的执行结果。

    1. 单行注释 - 以#和空格开头的部分
    2. 多行注释 - 三个引号开头,三个引号结尾
    """
    第一个Python程序 - hello, world!
    向伟大的Dennis M. Ritchie先生致敬
    """
    
    print('hello, world!')
    # print("你好,世界!")
    print('你好', '世界')
    print('hello', 'world', sep=', ', end='!')
    print('goodbye, world', end='!
    ')
    
    >>> hello, world!
    	你好 世界
    	hello, world!goodbye, world!
    

    4、其他工具介绍

    4.1 IDLE - 自带的集成开发工具

    IDLE是安装Python环境时自带的集成开发工具,如下图所示。但是由于IDLE的用户体验并不是那么好所以很少在实际开发中被采用。
    在这里插入图片描述

    4.2 IPython - 更好的交互式编程工具

    IPython是一种基于Python的交互式解释器。相较于原生的Python Shell,IPython提供了更为强大的编辑和交互功能。可以通过Python的包管理工具pip安装IPython和Jupyter,具体的操作如下所示。

    pip install ipython jupyter
    

    或者

    python -m pip install ipython jupyter
    

    安装成功后,可以通过下面的ipython命令启动IPython,如下图所示。
    在这里插入图片描述
    当然我们也可以通过Jupyter运行名为notebook的项目在浏览器窗口中进行交互式操作。

    jupyter notebook
    

    在这里插入图片描述
    在这里插入图片描述

    4.3 Sublime - 文本编辑神器

    在这里插入图片描述

    • 首先可以通过官方网站下载安装程序安装Sublime 3或Sublime 2。

    • 安装包管理工具。通过快捷键Ctrl+`或者在View菜单中选择Show Console打开控制台,输入下面的代码。

      • Sublime 3
      import  urllib.request,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
      
      • Sublime 2
      import  urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp)ifnotos.path.exists(ipp)elseNone;urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read());print('Please restart Sublime Text to finish installation')
      
    • 安装插件。通过Preference菜单的Package Control或快捷键Ctrl+Shift+P打开命令面板,在面板中输入Install Package就可以找到安装插件的工具,然后再查找需要的插件。我们推荐大家安装以下几个插件:

      • SublimeCodeIntel - 代码自动补全工具插件。
      • Emmet - 前端开发代码模板插件。
      • Git - 版本控制工具插件。
      • Python PEP8 Autoformat - PEP8规范自动格式化插件。
      • ConvertToUTF8 - 将本地编码转换为UTF-8。

    4.4 PyCharm - Python开发神器

    PyCharm的安装、配置和使用我们在后面会进行介绍。
    在这里插入图片描述

    5、练习

    1. 在Python交互环境中下面的代码查看结果并将内容翻译成中文。

      import this
      
      # 优美胜于丑陋(Python 以编写优美的代码为目标)
      Beautiful is better than ugly.
      # 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
      Explicit is better than implicit.
      # 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
      Simple is better than complex.
      # 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
      Complex is better than complicated.
      # 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
      Flat is better than nested.
      # 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
      Sparse is better than dense.
      # 可读性很重要(优美的代码是可读的)
      Readability counts.
      # 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
      Special cases aren't special enough to break the rules.
      # 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
      Although practicality beats purity.
      Errors should never pass silently.
      Unless explicitly silenced.
      # 当存在多种可能,不要尝试去猜测
      In the face of ambiguity, refuse the temptation to guess.
      # 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
      There should be one-- and preferably only one --obvious way to do it.
      # 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
      Although that way may not be obvious at first unless you're Dutch.
      # 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
      Now is better than never.
      Although never is often better than *right* now.
      # 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
      If the implementation is hard to explain, it's a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      # 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
      Namespaces are one honking great idea -- let's do more of those!
      
    2. 学习使用turtle在屏幕上绘制图形。

      import turtle
      
      turtle.pensize(4)
      turtle.pencolor('red')
      turtle.forward(100)
      turtle.right(90)
      turtle.forward(100)
      turtle.right(90)
      turtle.forward(100)
      turtle.right(90)
      turtle.forward(100)
      # 运行后屏幕自动消失,调用这句后屏幕会保持,直到主动关闭当前窗口
      turtle.mainloop()
      

    在这里插入图片描述

    1. 学习使用turtle在屏幕上绘制小猪佩奇
    from turtle import *
    
    # 鼻子
    def nose(x, y):
        penup()  # 提起笔
        goto(x, y)  # 定位
        pendown()  # 落笔,开始画
        setheading(-30)  # 将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)
        begin_fill()  # 准备开始填充图形
        a = 0.4
        for i in range(120):
            if 0 <= i < 30 or 60 <= i < 90:
                a = a + 0.08
                left(3)  # 向左转3度
                forward(a)  # 向前走a的步长
            else:
                a = a - 0.08
                left(3)
                forward(a)
        end_fill()  # 填充完成
    
        penup()
        setheading(90)
        forward(25)
        setheading(0)
        forward(10)
        pendown()
        pencolor(255, 155, 192)  # 画笔颜色
        setheading(10)
        begin_fill()
        circle(5)
        color(160, 82, 45)  # 返回或设置pencolor和fillcolor
        end_fill()
    
        penup()
        setheading(0)
        forward(20)
        pendown()
        pencolor(255, 155, 192)
        setheading(10)
        begin_fill()
        circle(5)
        color(160, 82, 45)
        end_fill()
    
    # 头
    def head(x, y):
        color((255, 155, 192), "pink")
        penup()
        goto(x, y)
        setheading(0)
        pendown()
        begin_fill()
        setheading(180)
        circle(300, -30)
        circle(100, -60)
        circle(80, -100)
        circle(150, -20)
        circle(60, -95)
        setheading(161)
        circle(-300, 15)
        penup()
        goto(-100, 100)
        pendown()
        setheading(-30)
        a = 0.4
        for i in range(60):
            if 0 <= i < 30 or 60 <= i < 90:
                a = a + 0.08
                lt(3)  # 向左转3度
                fd(a)  # 向前走a的步长
            else:
                a = a - 0.08
                lt(3)
                fd(a)
        end_fill()
    
    # 耳朵
    def ears(x, y):
        color((255, 155, 192), "pink")
        penup()
        goto(x, y)
        pendown()
        begin_fill()
        setheading(100)
        circle(-50, 50)
        circle(-10, 120)
        circle(-50, 54)
        end_fill()
    
        penup()
        setheading(90)
        forward(-12)
        setheading(0)
        forward(30)
        pendown()
        begin_fill()
        setheading(100)
        circle(-50, 50)
        circle(-10, 120)
        circle(-50, 56)
        end_fill()
    
    # 眼睛
    def eyes(x, y):
        color((255, 155, 192), "white")
        penup()
        setheading(90)
        forward(-20)
        setheading(0)
        forward(-95)
        pendown()
        begin_fill()
        circle(15)
        end_fill()
    
        color("black")
        penup()
        setheading(90)
        forward(12)
        setheading(0)
        forward(-3)
        pendown()
        begin_fill()
        circle(3)
        end_fill()
    
        color((255, 155, 192), "white")
        penup()
        seth(90)
        forward(-25)
        seth(0)
        forward(40)
        pendown()
        begin_fill()
        circle(15)
        end_fill()
    
        color("black")
        penup()
        setheading(90)
        forward(12)
        setheading(0)
        forward(-3)
        pendown()
        begin_fill()
        circle(3)
        end_fill()
    
    # 腮
    def cheek(x, y):
        color((255, 155, 192))
        penup()
        goto(x, y)
        pendown()
        setheading(0)
        begin_fill()
        circle(30)
        end_fill()
    
    # 嘴
    def mouth(x, y):
        color(239, 69, 19)
        penup()
        goto(x, y)
        pendown()
        setheading(-80)
        circle(30, 40)
        circle(40, 80)
    
    # 身体
    def body(x, y):
        color("red", (255, 99, 71))
        penup()
        goto(x, y)
        pendown()
        begin_fill()
        setheading(-130)
        circle(100, 10)
        circle(300, 30)
        setheading(0)
        forward(230)
        setheading(90)
        circle(300, 30)
        circle(100, 3)
        color((255, 155, 192), (255, 100, 100))
        setheading(-135)
        circle(-80, 63)
        circle(-150, 24)
        end_fill()
    
    # 手
    def hands(x, y):
        color((255, 155, 192))
        penup()
        goto(x, y)
        pendown()
        setheading(-160)
        circle(300, 15)
        penup()
        setheading(90)
        forward(15)
        setheading(0)
        forward(0)
        pendown()
        setheading(-10)
        circle(-20, 90)
    
        penup()
        setheading(90)
        forward(30)
        setheading(0)
        forward(237)
        pendown()
        setheading(-20)
        circle(-300, 15)
        penup()
        setheading(90)
        forward(20)
        setheading(0)
        forward(0)
        pendown()
        setheading(-170)
        circle(20, 90)
    
    # 脚
    def foot(x, y):
        pensize(10)
        color((240, 128, 128))
        penup()
        goto(x, y)
        pendown()
        setheading(-90)
        forward(40)
        setheading(-180)
        color("black")
        pensize(15)
        fd(20)
    
        pensize(10)
        color((240, 128, 128))
        penup()
        setheading(90)
        forward(40)
        setheading(0)
        forward(90)
        pendown()
        setheading(-90)
        forward(40)
        setheading(-180)
        color("black")
        pensize(15)
        fd(20)
    
    # 尾巴
    def tail(x, y):
        pensize(4)
        color((255, 155, 192))
        penup()
        goto(x, y)
        pendown()
        seth(0)
        circle(70, 20)
        circle(10, 330)
        circle(70, 30)
    
    # 参数设置
    def setting():
        pensize(4)
        # 使乌龟无形(隐藏)
        hideturtle()
        # 将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内
        colormode(255)
        color((255, 155, 192), "pink")
        setup(840, 500)
        speed(10)
    
    def main():
        setting()            # 画布、画笔设置
        nose(-100, 100)      # 鼻子
        head(-69, 167)       # 头
        ears(0, 160)         # 耳朵
        eyes(0, 140)         # 眼睛
        cheek(80, 10)        # 腮
        mouth(-20, 30)       # 嘴
        body(-32, -8)        # 身体
        hands(-56, -45)      # 手
        foot(2, -177)        # 脚
        tail(148, -155)      # 尾巴
        done()
    
    if __name__ == '__main__':
        main()
    

    在这里插入图片描述

    python课程推荐。
    在这里插入图片描述

    6、参考文章

  • 相关阅读:
    阶段一Python核心编程:流程控制之条件语句004
    阶段一Python核心编程:输入、转换数据类型、运算符003
    Linux在线测网速
    SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)
    SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱
    oracle归档的开启与关闭
    tmux的使用
    linux下获取占用CPU资源最多的10个进程
    oracle11g安装
    redis学习2
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302795.html
Copyright © 2011-2022 走看看