• Python基础一


    学习基础详查:

    https://www.cnblogs.com/alex3714/articles/5885096.html

    https://www.cnblogs.com/linhaifeng/articles/6384466.html

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

    2.Python能做什么

    1. 网络应用:包括web网站 、服务器后台服务等,在这方面Python有优秀的web框架如DjangoTornadoFlask等,网络服务框架有著名的Twisted,异步通信有牛X的eventlet.
    2. 科学运算:随着NumPy、SciPy、matplotlib、ETS等众多程序库的开发,Python越来越适合于做科学计算。与科学计算领域最流行的商业软件MATLAB相比,Python是一门真正的通用程序设计语言,比MATLAB所采用的脚本语言的应用范围更广泛,有更多程序库的支持,适用于Windows和Linux等多种平台,完全免费并且开放源码。虽然MATLAB中的某些高级功能目前还无法替代,但是对于基础性、前瞻性的科研工作和应用系统的开发,完全可以用Python来完成。
    3. GUI程序:python提供了多个图形开发界面的库,包括PyQt,WxPython,自带的有Tkinter,这些库允许Python程序员很方便的创建完整的、功能健全的GUI用户界面。
    4. 系统管理工具:Python可以是做运维人员最喜欢用的语言了,可以用它来轻松的开发自动化管理工具、监控程序等,事实上现在很多开源软件也都是用Python开发的,如用于IT配置管理的SaltStackAnsible, 做虚拟化的OpenStack,做备份用的Bacula等。
    5. 其它程序:你知道吗?Python 用来写爬虫也是很拿手的,还有做游戏,还可以用来做嵌入式开发、做驱动程序等,总之,Python能做的事情还是非常多的。

    3.Python的优缺点

    先看优点

    1. 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的存在,所以禁止多线程的并行执行。

    Python安装 

    Python解释器

    CPython

    这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

    IPython

    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。

    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的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

    Python的变量及数据类型

    Python的基本数据类型有5种: 整型(int), 浮点型(float), 字符型(string), 布尔型(bool),空值(None).

    空值

    空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。 

    变量和常量

    变量命名规则

    先介绍标识符的概念。和其他高级语言一样,用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符(identifier)。简单地说,标识符就是一个名字。变量名是标识符的一种,变量的名字必须遵循标识符的命名规则。

    Python语言和java,c++等很多语言一样,规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。 

    注意:在Python中,大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。一般地,变量名用小写字母表示,与人们日常习惯一致,以增加可读性。应注意变量名不能与Python的关键字、系统函数名和类名相同。 

    变量名命名习惯

    变量名的定义在能表达清楚它的作用的前提下最越简洁越好,能用一个单词表述清楚的尽量就不要用两个。变量起名时一般有这么几种写法,你觉得哪种最简洁,你就选哪种吧。

    CheckCurrentConnCount

    check_current_conn_count

    checkCurrentConnCount

    定义变量

    了解了变量的概念和用途后,我们一起来定义几个简单的变量看一下

    name = ‘gangzi’  #name 是字符串,字符串要加上引号噢

    age = 29  #age 是整数,整数不要加引号,加了引号后就变成字符串了

    has_girlfriend = False  #是布尔值,一般用这个做逻辑判断,如if has_girlfriend:print ‘good for you !’

    age = age + 1 #这个结果应该是30,运算流程是先将=号后面的age +1结果算出,然后再把这个结果重赋值给age, 由于age之前的值是29,重新赋值后,age值变为30.

    最后,理解变量在计算机内存中的表示也非常重要。当我们写:

    _name = 'gangzi'

    时,Python解释器干了两件事情:

    1. 在内存中创建一个”gangzi”的字符串;
    2. 在内存中创建了一个名为_name的变量,并把它指向”gangzi”的内存地址。 

    常量

    所谓常量就是不能变的变量。在Python中,通常用全部大写的变量名表示常量:

    PI = 3.14159265359

    但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。

    数据运算符

    python语言支持以下几种运算

    算术运算

    比较运算

    Assignment Operators

    二进制运算

    关系运算

    验证运算

    Python的字符串

    因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的。Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换:

    >>> ord('A') 65 >>> chr(65) 'A' 

    Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示。

    u''u'u4e2d'是一样的,u后面是十六进制的Unicode码。因此,u'A'u'u0041'也是一样的。

    两种字符串如何相互转换?字符串'xxx'虽然是ASCII编码,但也可以看成是UTF-8编码,而u'xxx'则只能是Unicode编码。

    u'xxx'转换为UTF-8编码的'xxx'encode('utf-8')方法:

    >>> u'ABC'.encode('utf-8') 'ABC' >>> u'中文'.encode('utf-8') 'xe4xb8xadxe6x96x87' 

    英文字符转换后表示的UTF-8的值和Unicode值相等(但占用的存储空间不同),而中文字符转换后1个Unicode字符将变为3个UTF-8字符,你看到的xe4就是其中一个字节,因为它的值是228,没有对应的字母可以显示,所以以十六进制显示字节的数值。len()函数可以返回字符串的长度:

    >>> len(u'ABC') 3 >>> len('ABC') 3 >>> len(u'中文') 2 >>> len('xe4xb8xadxe6x96x87') 6 

    反过来,把UTF-8编码表示的字符串'xxx'转换为Unicode字符串u'xxx'decode('utf-8')方法:

    >>> 'abc'.decode('utf-8') u'abc' >>> 'xe4xb8xadxe6x96x87'.decode('utf-8') u'u4e2du6587' >>> print ('xe4xb8xadxe6x96x87'.decode('utf-8')) 中文 

    由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

    #!/usr/bin/env python 
    # -*- coding: utf-8 -*-

    第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

    第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

    格式化

    最后一个常见的问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。

    在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:

    >>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.' 

    你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

    常见的占位符有:%d 整数 %f 浮点数 %s 字符串 %x 十六进制整数

    其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

    >>> '%2d-%02d' % (3, 1) ' 3-01' >>> '%.2f' % 3.1415926 '3.14' 

    如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:

    >>> 'Age: %s. Gender: %s' % (25, True) 'Age: 25. Gender: True' 

    对于Unicode字符串,用法完全一样,但最好确保替换的字符串也是Unicode字符串:

    >>> u'Hi, %s' % u'Michael' u'Hi, Michael' 

    有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%

    >>> 'growth rate: %d %%' % 7 'growth rate: 7 %' 

    小结

    由于历史遗留问题,Python 2.x版本虽然支持Unicode,但在语法上需要'xxx'u'xxx'两种字符串表示方式。

    Python当然也支持其他编码方式,比如把Unicode编码成GB2312:

    >>> u'中文'.encode('gb2312') 'xd6xd0xcexc4' 

    但这种方式纯属自找麻烦,如果没有特殊业务要求,请牢记仅使用Unicode和UTF-8这两种编码方式。

    在Python 3.x版本中,把'xxx'u'xxx'统一成Unicode编码,即写不写前缀u都是一样的,而以字节形式表示的字符串则必须加上b前缀:b'xxx'

    格式化字符串的时候,可以用Python的交互式命令行测试,方便快捷。


       

    引用1:  http://www.cnblogs.com/dzhanjie/archive/2011/07/07/2100340.html

    引用2:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738264643de15c5c4abad47dd9510e3b86286acb8000

    引用3:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819196283586a37629844456ca7e5a7faa9b94ee8000

    引用4:https://www.cnblogs.com/alex3714/articles/5885096.html

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/gangzi4321/p/10862428.html
Copyright © 2020-2023  润新知