zoukankan      html  css  js  c++  java
  • python基础

    Python基础

    一  python下载、安装、位置查询及配置环境变量

    1. 下载

    在Python的官网 www.python.org 中找到最新版本的Python安装包,下executable installer版本

    2. 安装

     将python加入到windows的环境变量中

    3. 安装位置查询

    只要用下面三行命令,就可以轻松得到Python安装路径了。

    进入Python

    import sys
    path = sys.executable
    print(path)

    就会看到自己的Python安装目录啦!

    4. 设置环境变量

    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

    如:原来的值;C:python27,切记前面有分号

    参考:

    新手如何在windows下安装Python

    https://baijiahao.baidu.com/s?id=1606573927720991570&wfr=spider&for=pc

    二  语言特性

    python是一门动态解释性强类型定义语言

    1. 编译和解释语言:

    简单讲,编译(complie)型语言为一次性编译完,而解释型语言为解释一步执行一步。

    1.1 编译型
    优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
    缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

    1.2 解释型
    优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

    缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

    主流语言的分类:

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

    两者区别在于是否事前规定数据类型。

    2.1 动态类型语言

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

    2.2 静态类型语言

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

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

    3.1 强类型定义语言

    变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,一句话:不允许不同类型相加。例如:整形+字符串会报类型错误。

    3.2 弱类型定义语言

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

    4.python优缺点

    先看优点

    1. Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
    2. 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
    3. 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
    4. 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
    5. 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
    6. 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

    再看缺点:

    1. 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
    2. 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
    3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

     

    参考:

    编译型和解释型语言的区别:

    https://www.jianshu.com/p/c1ce70ccdb74

    强、弱类型语言的区别:

    https://www.cnblogs.com/yanggb/p/10732113.html

    三  python解释器

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

    由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。

    CPython

    当我们从Python官方网站下载并安装好Python后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

    CPython是使用最广的Python解释器。

    IPython

    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

    PyPy

    PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

    Jython

    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

    IronPython

    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

    四  变量注释及转义符

    python是动态语言,无需提前声明变量类型,直接赋值即可。python区分大小写。

    1. 变量命名习惯:

    驼峰命名:除了第一个字母外其他单词的首字母大写,首字母不大写是区分类的命名。

    下划线命名:单词用下划线分隔开,常用此方法

    常数量:一般字母都是大写,不存在绝对的常量

    例如: PI = 3.141592653
      BIRTH_OF_SYLAR = 1990

    2. 变量命名规则:

    • 变量名只能是字母、数字或下划线的任意组合;不能是纯数字
    • 变量名的第一个字符不能是数字;
    • 以下关键字不能声明为变量名;
      ['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']

    3. 注释

    注释符:#被注释内容

    多行注释:''' 被注释内容'''(三引号),此外,三引号还能多行打印,展示打印。

    快捷键:Ctrl+/

    4. 转义符

    换行符     使光标下移一格;    制表符   ;     转义符    ; 回车    使光标移动行首 

    通常用的Enter是两个加起来的,即

    print("	Python")#	表示空四个字符,也称缩进,相当于按一下Tab键
    print("Python
    JAVA")#
    表示换行,相当于按一下回车
    print("languages:
    	Python
    	JAVA")#
    	表示换行加每行空四格
    print('eeeeeeeee
    ffffff')

    结果为:

        Python
    Python
    JAVA
    languages:
        Python
        JAVA
    ffffff #没有打印eeeeeeee

     各个系统间的区别:

    • Unix系统里,每行结尾只有“<换行>”,即“ ”;
    • Windows系统里面,每行结尾是“<换行><回车>”,即“ ”;
    • Mac系统里,每行结尾是“<回车>”。

    r 'strXXXXXXXXXX'    如果在前面加r字符,则表示让这个字符串里面的内容失去转义的意义

    s="	t"   #如果这样输出的话,则	会变成制表符号,将有一个table键作用产生
    ns=r"	t"
    print(s)
    print(ns)   #如果在前面加r字符,则表示让这个字符串里面的内容失去转义的意义

        t
    	t

    各种转义符:

    转义字符描述
    (在行尾时) 续行符
    \ 反斜杠符号
    单引号
    双引号
    a 响铃
     退格(Backspace)
    e 转义
    00
    换行
    v 纵向制表符
    横向制表符
    回车
    f 换页
    oyy 八进制数yy代表的字符,例如:o12代表换行
    xyy 十进制数yy代表的字符,例如:x0a代表换行
    other 其它的字符以普通格式输出

    参考:

    关于/r与/n以及 /r/n 的区别总结

    https://blog.csdn.net/m0_37665137/article/details/79579746

    五  流程控制语句

    多层循环嵌套最多不要大于三层

    1.  for...else...   loop

    for i in range(1, 10, 2):
        if i == 5:
            pass
            # break
    else:
        print(i)

    总结:

    else在 while和for 正常循环完成之后执行,和直接写在 while和for 之后没有区别,但是如果用break结束循环之后else就不会执行了。

    抽象记忆:上下两层的衣柜,循环部分和else部分,正常上层走完走下层,出现break直接跳出衣柜。

    in有两种2法:
    1. for. 是把后边每个元素获取到赋值给前面的变量.
    2. 不在for. 判断xxx是否出现在str、list

    2.  while...else...   loop

    i = 0
    while i < 5:
        if i == 3:
            # break
            pass
        i +=1
    else:
        print('ok')

    注意:

    for和while循环里的变量不属于局部变量

    a = 0
    for i in range(4):
        b = 2
        a +=1
    print(a)
    print(b)

    3.  if ...else...

    if True or False:
        pass
    elif:
        pass
    else:
        pass

    4.  break and continue 及return

    break 结束本层循环。

    continue 结束本次循环,进行本层下一次循环。

    return 在函数内部只要执行完return语句,直接退出函数。跳出所有层循环。

    参考:

    退出多层嵌套的方法:break,continue,return

    https://www.jb51.net/article/151478.htm

    六 字符编码

    1. 发展历程

    1、编码界最初只有ASCII码,只用了1byte(字节)中的7bit(位),0~127;

    2、欧洲人发现128个不够了,就把1byte中没用的最高位给用上了,出现了Latin系列(ISO-8859系列)编码,也称为扩展ASCII码;

    3、中国采用两个字节表示一个汉字,前面的字节从0xA1用到0xF7(161-247),后面字节从0xA1到0xFE(161-254),产生了GB2312编码,理论上可以表示7900多个常用汉字;

    4、汉字实在太多了,还有繁体、各种字符呀,于是加以扩展,有了GBK;规定只要第一个字节是大于127就固定表示这是一个汉字的开始,128*256=32768;

    5、GBK还不够,少数民族的字还木有呀,于是GBK又扩展为GB18030,只是不常用;

    6、Unicode诞生,可以容纳全世界的任何文字。两个字节表示一个字,256*256=65536;

    7、为了Unicode能实际应用(存储、传输),制定了Unicode的编码方式即UTF,有UTF-8、UTF-16、UTF-32,其中UTF-8应用广泛;

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,所以是兼容ASCII编码的。

    2.  unicode、utf-8、GBK的关系

    数据在内存(显示)中的存储方式:unicode;

    数据在硬盘上的存储方式:通过某种编码方式编码的bytes字节串,可以是utf-8,也可以是GBK;

    无论是utf8还是gbk都只是一种编码规则,一种把unicode数据编码成字节数据的规则,在方面,utf-8与GBK相类似。

    win的操作系统安装时是默认的gbk编码,而linux操作系统默认的是utf8编码。

    Unicode与utf8的关系:Unicode是内存编码表示方案(是规范),而UTF是如何保存和传输Unicode的方案(是实现)。

    显示的汉字与unicode是一一对应的,unicode对应多种存储方式(GBK,utf-8)。

     py3也有两种数据类型:str和bytes;  str类型存unicode数据,bytse类型存bytes数据。

    import sys, json
    print(sys.getdefaultencoding())
    a = '中国'
    print(a.encode('GBK'))
    print(a.encode('GB2312'))
    print(json.dumps(a))
    print(type(json.dumps(a)))
    print(a.encode())

    结果如下:

    utf-8
    b'xd6xd0xb9xfa'
    b'xd6xd0xb9xfa'
    "u4e2du56fd"
    <class 'str'>
    b'xe4xb8xadxe5x9bxbd'

    参考:

    字符集和字符编码详细解释:

    https://www.zhihu.com/question/20152853

    字符编码的通俗解释:

    https://wenku.baidu.com/view/09dceea5da38376bae1fae20.html

    七  三元运算

    result = var1 if true else var2

    true : result = var1

    flase :  reselt = var2

    八  进制

     

    .

     

  • 相关阅读:
    elasticsearch 插件 大全
    ElasticSearch 服务搭建
    限制玻尔兹曼机(Restricted Boltzmann Machine)RBM
    卷积神经网络
    [转]MATLAB cell数据类型
    [转]matlab语言中的assert断言函数
    [转]matlab中squeeze函数的用法,numel的用法
    Sparse autoencoder implementation 稀疏自编码器实现
    MATLAB中的randi函数
    可视化自编码器训练结果&稀疏自编码器符号一览表
  • 原文地址:https://www.cnblogs.com/mushuiyishan/p/9236261.html
Copyright © 2011-2022 走看看