简介:
官网:https://www.python.org/
python是一款易学的通用、动态且高阶的语言
python能够很好地与其它语言交互,也被成为胶水语言
python已经成为一门强大的数据分析语言
python主要的缺点是性能不高
python是一款解释型语言,与R、Ruby、Matlab相似,而与C、C++、Java这些编译型语言差别较大
python用户信奉“过早优化是万恶之源”(is the root of all evil)
反驳针对python性能的批评
开发时间(开发者编写程序的时间)比程序运行时间更宝贵
大部分性能相关的问题都能通过使用合适的数据结构和算法来解决
如果确实需要关注性能,可以用编译型语言编写性能瓶颈,然后在python中调用相关函数
正文:
1.运行python
2.注释
3.变量
4.特殊变量
5.操作符
6.字符串
7.模块
1、运行python
python本身是一种被称为解释器的特殊程序,这个程序将python源代码转换成计算机处理器可以理解的指令。
python解释器有多种启动方式
命令行(Mac/Linux/Windows):
最基本的方式是在终端的提示符(prompt)中输入python,通常会显示一些关于python自身的信息,接下来是以“>>>”起始的行,这是python提示符,在此可以输入python代码
输入相关代码,按回车键执行,最后回到“>>>”提示符中
若想获得帮助,可以随时使用help()函数,而用exit()函数可以回到命令行。这种方式与bash很像,因为python的交互方式与bash完全相同,都是“读取-运算-输入”循环(read-eval print loop),简称REPL
命令行-ipython:
ipython(interactive python)提供了更强大的REPL
pip install ipython
启动会默认跟随python主版本,如果版本不对,可以uninstall之后再重新安装
Mac 更改默认python版本
~ alias python
alias python='python3.7
提供了基本web浏览器的notebook,其使用方式和外观与Mathematica或Matlab的notebook非常相似。这些noteboot都是非常好的数据分析平台,且正在快速成为创建和分享信息的标准方式
缺点:
REPL在使用多行代码时比较难、繁琐且容易出错
很难讲代码保存到普通文件中
在线shell:
下载的个平台客户端:
https://www.python.org/downloads/
py文件:
大部分人一般在文本文件中编写python代码。如果对一.py结尾的文件运行解释器,python会执行其中所有的代码,就如同在REPL中逐行执行一样
2、注释
注释字符会让解释器忽略一部分字符,让开发者能够在相关代码附近撰写一些说明或解释
python使用“#”字符表示注释内容
解释器会忽略掉“#”之后位于同一行的所有内容
python没有多行注释
通常为了能够更好地显示中文注释,需要在第一行非注释之前加入如下:
#/bin/env python
#-*- coding:utf-8 -*-
3、变量
变量由两部分组成:名称和值
若想为一个名称给定一个值,需要用到单个等号(=),将变量的名称放在等号的左边,值放在右边
变量的名字可由大小写字母、数字(0-9)、下划线(_)组成,不能以数字开头
在python中,所有变量都有确定的类型,这意味着这些值具有明确定义的属性,用于指定其使用方式
各种类型有针对特定用途的专门属性:
整数(int)和浮点数(float)用于数学计算
字符串(str)用于文本处理
整数和字符串有时称为精确类型,因为所有精确类型的变量都能在底层精确表示,但浮点数是不精确类型
使用 type() 函数查看变量类型,将需要检查的变量放在括号中即可
In [27]: a=1
In [28]: b='1'
In [31]: type(a)
Out[31]: int
In [32]: type(b)
Out[32]: str
使用类型名称来转换变量类型
首先输入类型名称,在其后跟上括号,括号里面是需要转换的变量
17:22:01 ~ ipython
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 03:13:28)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: float(42)
Out[1]: 42.0
In [2]: int("28")
Out[2]: 28
In [3]:
错误说明:
In [3]: int("python")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-9ae652162590> in <module>
----> 1 int("python")
ValueError: invalid literal for int() with base 10: 'python'
In [4]:
产生了一个值错误(ValueError)
错误的位置(指出是在文件中还是在交互式解释器中)
发生错误位置的行号,以及偏移量
最重要的错误消息
这是python标准的处理模式,能激发开发者的探索和创造能力。如果某个操作无法进行下去,那么代码应尽早报错并返回有用的错误消息
python是动态类型的,这意味着以下几点:
类型是关联到变量的值上,而不是关联到变量的名称上
在使用某个变量之前,不需要知道该变量的类型
改变变量的值后,变量名称的类型就随之改变
eg:
In [4]: x=3
In [5]: type(x)
Out[5]: int
In [6]: x=3.0
In [7]: type(x)
Out[7]: float
In [8]: x='3'
In [9]: type(x)
Out[9]: str
In [10]:
每次在向 x 赋予新值时,都改变了其类型。新值替换了旧值,但变量名称没有改变。这与静态类型语言,如C、C++、Java等都有所区别,在哪些语言中:
类型关联到变量的名称上,而不是变量的值
在使用变量之前必须指定其类型(通过声明或推导)
无法改变变量类型,即使改变变量的值也不行
python中的许多语言特性是为了减少在使用低阶语言时会遇到的不便之处。python对低阶语言中一些严格的限制进行了抽象。而python的这种灵活性也伴随了一些折中(折衷)
4、特殊变量
python有一些重要的特殊变量,这些变量的值已经内置到语言中,如True、False、None、NotImplemented,这些变量在启动python解释器时就存在,且只初始化一次,因此都是单例模式
布尔值
布尔类型只含有 True 和 False 这两个变量,在python中类型为bool
布尔变量用来表示 python 表达式的真假值
开发者也可以直接作为标志使用,表示开启或关闭某个行为
其他数据类型也可以转换成布尔值
一般来说,如果值是 0 或容器为空,转换为False;如果值非0或者容器非空,则转换为True
eg:
In [12]: bool(0)
Out[12]: False
In [13]: bool(1)
Out[13]: True
In [14]: bool(0.1)
Out[14]: True
In [15]: bool(None)
Out[15]: False
In [16]: bool(NotImplemented)
Out[16]: True
In [17]: bool('python')
Out[17]: True
In [18]: bool('')
Out[18]: False
In [19]: bool('None')
Out[19]: True
In [20]: bool('NotImplemented')
Out[20]: True
None 不是 0
None在python中是一个特殊的变量,用来表示没有给定值,或没有定义行为。这与使用0、空字符串或其他任何控制都不同。
0 是一个合法的数字,而 None 不是
如果在一个程序中需要一个整数或浮点数,但传进去的是 None 则程序会终止。如果传入的是 0,程序会继续进行
None 就如同C/C++的 NULL、JavaScript的null一样
None 在python中还有特殊的地位,用来表示函数默认的返回值
NotImplemented 不是 None
与 None 不同,变量 NotImplemented 不仅用来表示某个行为尚未定义,同时也表示该行为在python中不可能完成、没有意义或不存在
In [21]: 'python' / 3.7
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-d8d0a20e8437> in <module>
----> 1 'python' / 3.7
TypeError: unsupported operand type(s) for /: 'str' and 'float'
5、操作符
操作符是一种python语法,用于表示一些常见的处理数据和变量的方法
python定义了一元(unary)、二元(binary)和三元(ternary)这三种操作符,分别对应以1个、2个、3个变量作为参数的操作符
python操作符(以变量x/y/x说明)
名称 |
使用方式 |
返回值 |
一元操作符 |
|
|
正号 |
+x |
用于数值类型,返回x |
负号 |
-x |
用于数值类型,返回-x |
否定 |
not x |
逻辑取反,True转换成False,反之亦然 |
位取反 |
~x |
将x的二进制形式按位取反 |
删除 |
del x |
删除变量x |
调用 |
x() |
返回调用x的结果 |
断言 |
assert x |
检查bool(x)的值是否为True |
二元操作符 |
|
|
赋值 |
x = y |
将名称 x 的值设为 y |
访问属性 |
x.y |
获取 x 中的值 y |
删除属性 |
del x.y |
从 x 中移除 y |
索引 |
x[y] |
获取 x 中位于 y 位置的值 |
删除索引 |
del x[y] |
删除 x 中位于 y 位置的值 |
逻辑与 |
x and y |
如果bool(x) 和 bool(y) 都为 True,则返回 True,反之返回 False |
逻辑或 |
x or y |
如果 bool(x) 为 True,则结果为x,反之为 y |
二元算术运算符 |
|
|
加法 |
x + y |
和 |
减法 |
x - y |
差 |
乘法 |
x * y |
积 |
除法 |
x / y |
商,在python2中只含有整数部分,在python3中还包括小数部分 |
地板除 |
x // y |
求除法中的商 |
取模 |
x % y |
求出发中的余数 |
取模 |
x ** y |
x 的 y 次方 |
按位与 |
x & y |
逐位比较 x 和 y 的二进制形式,两者都为 1,则该位为 1,否则该位为 0 |
按位或 |
x | y |
逐位比较 x 和 y 的二进制形式,只要其中有一个是1,则该位为1,否则该位为0 |
按位异或 |
x ^ t |
逐位比较 x 和 y 的二进制形式,其中有且只一个是 1,则该位为1,否则该位为0 |
向左位移 |
x << y |
将 x 的二进制形式向左移动 y 位,对于整数相当于 x 乘以 2y |
向右位移 |
x >> y |
将 x 的二进制形式向右移动 y 位,对于整数相当于 x 除以 2y |
原地操作 |
x op= y |
op 可以相当于上面所有的操作,op=相当于原地操作,意味着直接在 x 上进行操作,结果也直接应用到 x 上 |
二元比较运算符 |
|
|
等于 |
x == y |
True 或 False |
不等于 |
x != y |
True 或 False |
小于 |
x < y |
True 或 False |
小于等于 |
x <= y |
True 或 False |
大于 |
x > y |
True 或 False |
大于等于 |
x >= y |
True 或 False |
包含 |
x in y |
如果 x 是 y 中的一个元素则为 True,反之为 False |
不包含 |
x not in y |
如果 x 是 y 中的一个元素则为 False,反之为 True |
等价性测试 |
x is y |
如果 x 和 y 指向同一个底层值,则为 True,反之为 False |
非等价测试 |
x is not y |
如果 x 和 y 指向同一个底层值,则为 False,反之为 True |
三元运算符 |
|
|
三元赋值 |
x = y = z |
将 x 和 y 的值设为 z |
属性赋值 |
x.y = z |
将 x.y 的值设为 z |
索引属性 |
x[y] = z |
将 x 中 y 位置的值设为 z |
三元比较 |
x < y < z |
True 或 False,等价于(x < y) and (y < z),这里的 < 可以替换为 >、<=、>= |
三元或 |
x if y else z |
如果 bool(y) 为 True,则结果为 x,反之为 z,等价于 C/C++中的 y?x:z |
上表中列出的大多数操作符都可以互相组合,也就是说操作符之间可以互相连接、嵌套、用括号规定运算顺序,这与组合数学运算符完全相同
但有些特定类型的操作符(如赋值(=)和删除(del)操作符)不能组合,必须位于单独一行,因为这些操作符会直接修改变量本身,而不是修改变量的值
如果某个操作符是可组合的,则可以用其组成python表达式,表达式是一段代码,执行时并不需要独占一行
同一行代码可以有多个表达式
另一方面,如果某个操作符不可组合,且需要独占一行才能工作,则称为语句
从本质上说,所有的python代码都由一系列语句组成,而语句由表达式组成
未完待续