zoukankan      html  css  js  c++  java
  • 【python之旅】python简介和入门

    python简介:

    一、什么是python

          python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。

          python是一种面向对象,直译式的计算机程序语言,Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。

    二、python的应用

    • 云计算:  应用OpenStack
    • WEB开发: 众多大型网站均为Python开发,Youtube... 典型WEB框架有Django
    • 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
    • 系统运维: 运维人员必备语言
    • 金融:在金融工程领域,作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
    • 图形GUI: PyQT, WxPython,TkInte

    三、python是怎样的一门语言

        编程语言主要从以下角度分类:

          编译型和解释型

          静态语言和动态语言

          强类型定义语言和弱类型定义语言

    1、编译型和解释型

        编译型:

          负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。专业一点,就称为编译(Compile),而负责编译的程序自然就 称为编译器(Compiler)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了。

         但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织。这时编译各个文件时就会生成目标文件(Object   file)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的 一部分,所以我们还不能直接运行。待所有的源文件的编译都大功告成,我们就可以最后把这些半成品的目标文件“打包”成一个可执行文件了,这个工作由另一个 程序负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫链接程序 (Linker)。

        解释型:

           打个比方:如果你打算预读一本外文书,而你不知道这么外语,那么你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读。这个过程就编译,或者你也立刻让这名翻译辅助你阅读,让他一句一句的给你翻译,如果你想往回看某个章节他也的重新给你翻译。

          两种方式:前者就相当于编译型:一次把所有的代码转换成机器语言,然后写成可执行文件。而后者就相当于我们要的解释型:在程序运行的前一刻, 还只有源程序而没有可执行程序;而程每执行到资源程序的某一条执行,则会有一个称之为解释程序的外壳程序,将源代码转换成二进制代码以供执行.

    2、静态语言和动态语言:

         通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。

         动态类型语言

         动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在 第一次赋值给变量是,在内部将数据类型记录下来。Python和Ruby就是典型类型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动 态类型语言。

         静态类型语言:

          静态类型语言与动态类型语言刚好相反,他的数据类型是在编译期间检查的,也就是说在写程序的时候要声明所有变量的数据类型,C/C++是静态类型的典型代表,其他的静态类型语言还有C#、JAVA等

    3、强类型定义语言和弱类型语言

          强类型定义语言:

          强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么他就永远是这个数据类型了。举个例子:如果你定义了一个整形变量a,那么程序根本不可能讲a当作字符串类型处理。强类型定义语言是类型安全的语言。

          弱类型定义语言:

          数据类型可以被忽略的语言。他与强类型定义语言相反,一个变量可以赋予不同数据类型。

        强类型定义语言在速度上可能略逊色与弱类型定义语言,但是他是强类型定义语言带来的严谨性能够有效便面许多错误,另外,“这么语言是不是动态语言”与“这么语言是否类型安全”之间是完全没有联系的。

        例如:Python是动态语言,也是强类型定义语言(类型安全的语言);

                VBScript是动态语言是弱类型定义语言(类型不安全的语言)

                JAVA是静态语言,是强类型定义语言(类型安全的语言)

    四、Python的优缺点

        优点:

    • Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂.
    • 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期.
    • 高级语言

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

    • 可移植性

            由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)

    • 可扩展性

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

    • 可嵌入性

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

        缺点:

    • 速度慢

            Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些.

    • 代码不能加密

            因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。

    • 线程不能利用多CPU问题

            GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的 工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于 GIL的存在,所以禁止多线程的并行执行。

    五、python的安装

    1、下载安装包:
       https://www.python.org/downloads/
    2、安装:
      按提示安装python

    python入门:

     一、仪式感的第一句python

    1 # Author :GU
    2 print("hello world!")

     二、变量-字符编码

          Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.

        声明变量

    1 # Author :GU
    2 name = "guyun"

        变量定义的规则

    •     变量名只能是字母、数字或下划线
    •     变量名的第一个字符不能是数字
    •     以下关键字不能为变量名
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

        变量的调用

    1 # Author :GU
    2 name = "guyun"
    3 name2 = name
    4 print("My name is ", name,name2)

        字符编码

        python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

        ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

        显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

            Unicode(万国码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536.

            UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

        报错:ascii码无法表示中文

    1 #!/usr/bin/env python
    2   
    3 print "你好,世界"

        改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

    1 #!/usr/bin/env python
    2 # -*- coding: utf-8 -*-
    3   
    4 print "你好,世界"

        字符串格式化输出

     1 # Author :GU
     2 name = input("name:")
     3 age = int(input("age:"))
     4 job = input("job:")
     5 salary = input("salary:")
     6 info ='''
     7 ---------info of %s----------------
     8 Name:%s
     9 Age:%d
    10 Job:%s
    11 Salary:%s
    12 ''' % (name,name,age,job,salary)
    13 print(info)

        字符串是 %s;整数 %d;浮点数%f

     1  info2 ='''
     2  ---------info of {_name}----------------
     3  Name:{_name}
     4  Age:{_age}
     5  Job:{_job}
     6  Salary:{_salary}
     7  ''' .format(_name=name,
     8               _age=age,
     9               _job=job,
    10              _salary=salary)

    三、用户输入

    1 #!/usr/bin/env python
    2 # -*- coding: utf-8 -*-
    3 name = input("请输入用户名:")
    4 # 打印输入的内容print name

         输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法

    1 #!/usr/bin/env python
    2 # -*- coding: utf-8 -*-
    3 import getpass
    4 # 将用户输入的内容赋值给 name 变量
    5 pwd = getpass.getpass("请输入密码:")
    6 # 打印输入的内容
    7 print (pwd)

    三、表达式while 循环

          有一个猜数字游戏引发的程序-3种方法

     1 # Author :GU
     2 age_of_guyun = 22
     3 count = 0
     4 #
     5 # while count < 3:
     6 #
     7 #     gusee_age = int(input("gusee age:"))
     8 #     if gusee_age == age_of_guyun:
     9 #         print("yes")
    10 #         break
    11 #     elif gusee_age > age_of_guyun:
    12 #         print("You guess the number is big.")
    13 #     else:
    14 #         print("You guess the number is small.")
    15 #     count +=1
    16 # else:
    17 #     print("you have tried too many times .. fuck off")
    18 
    19 # for i in  range(3):
    20 #
    21 #     gusee_age = int(input("gusee age:"))
    22 #     if gusee_age == age_of_guyun:
    23 #         print("yes")
    24 #         break
    25 #     elif gusee_age > age_of_guyun:
    26 #         print("You guess the number is big.")
    27 #     else:
    28 #         print("You guess the number is small.")
    29 # else:
    30 #     print("you have tried too many times .. fuck off")
    
     1 while count < 3:
     2 
     3     gusee_age = int(input("gusee age:"))
     4     if gusee_age == age_of_guyun:
     5         print("yes")
     6         break
     7     elif gusee_age > age_of_guyun:
     8         print("You guess the number is big.")
     9     else:
    10         print("You guess the number is small.")
    11     count +=1
    12     if count == 3:
    13         countime_confirm = input("doyou want to keep guessing..?")
    14         if countime_confirm != 'y':
    15             count = 0
    16             continue      ##跳出当前循环
    17         else:
    18             print("bye")
    19             break
    注:continue 是跳出当前循环,break是跳出整个循环!

    四、if...else和if....elif...elif..........else

         猜数字if的表达方法

     1 #!/usr/bin/evn python
     2 testnum = 6
     3 ses = -1
     4 for i in range(3):
     5     ses = int(input("请输入一个数字:"))
     6     if ses > testnum:
     7         print("你打印的小一点")
     8     elif ses < testnum:
     9         print("你打印的大一点")
    10     else:
    11         print("bingo")
    12         break
    13 
    14 else:
    15     print("你输入的次数太多了")

  • 相关阅读:
    小结:ES7——async和await初识
    如何抽离、引用公共部分页面
    数据处理:高德、百度经纬度坐标的相互转化
    mock数据的基础使用
    express随笔
    ES6学习基础
    初学node.js
    ajax基础
    ajax的几个面试题
    (转)认识原型对象和原型链
  • 原文地址:https://www.cnblogs.com/youweilinux/p/5702397.html
Copyright © 2011-2022 走看看