Python -- 基础
标签(空格分隔): Python
Python简介
- Python是一种面向对象、解释型计算机程序设计语言。
- Python开发环境和编辑工具
- Windows:编辑器是Python IDE;
- Linux:自带Python解释器,编辑器为vi.
- Python的输入输出
- 输入:变量,控制台;
- 输出:显示,文件,数据库,网络
- 输出语句:print
- 输入语句:raw_input/input
Python源码编辑编译执行
.py
文件:是Python的源码文件,可以用来编辑和执行;- 环境变量
.pyc
文件:是一种字节码文件,是由源码文件经过Python解释器编译后生产的文件,提高加载速度,但不能提高执行速度;python -m py_compile ****.py
.pyo
文件:是一种字节码文件,是由源码文件经过Python解释器优化编译生成的文件python -O -m py_compile ***.py
首先,Python源码被解释器编译生成字节码文件(不能被计算机直接识别),然后由Python虚拟机执行转化为二进制文件,可被计算机识别而执行。
Python变量及内存格式
- Python中的赋值,不是真正意义上修改内存的值,而是将变量名和子啊内存中存在的值做绑定(即引用);
- 优点:节省内存,多个变量可以指向同一个地址;
- 缺点:如果修改变量的变量值在内存中不存在,需要重新申请内存,绑定变量名和地址,降低效率。
- (Python对long型数值的大小没有限制,可以无限增大)
- type可以根据数值返回其数据类型
- 运算优先级:
complex(复数) > float > long > int
; - 所有的数字在计算机中都是以补码的形式存在的!!
- 补码转原码:正数:补码与原码相同;负数:符号位不变,其余位取反后加1.
- 位运算优先级:
- 取反 > 左移 > 右移 > 按位与 > 按位异或 > 按位或
Python随机数
import random
random.random() #随机生成一个0<= n < 1.0的浮点数;
random.uniform(a, b) #随机生成一个(a, b)范围内的浮点数
random.randint(a, b) #随机生成一个(a, b)范围内的整数
random.randrange([start], [stop], [step]) #从指定范围内,在指定基数递增的集合中,获取一个随机数
random.choice(sequence) #从序列中获取一个随机元素
random.shuffle([]) #用于将一个列表中的元素打乱
random.sample(sequence, k) #从指定序列中随机获取指定长度的片段
Python数据结构之序列
- 序列是一组有顺序的元素的集合,可以通过下表偏移量访问到它的一个或几个成员;
- list, tuple, str, Unicode字符串 -- 其中字符串和元祖是固定长度,不能修改,列表可以。
- list1 = [1,2,3,4,5]
- tuple1 = (1,2,3,4,5)
- str1 = "12345"
- 基本操作:
- len()
- max/min(seq)
- sum(seq) //只能用于全是整数的列表
- reversed(seq) //返回一个逆序访问的迭代器
- zip(seq1, seq2, seq3, ..) //接收任意多个序列作为参数,返回一个tuple列表
Python数据结构之字符串unicode
-
ASCII是8位的字符,最多表示256个字符;
-
中文编码规范是GB2312/GBK,它使用两种ASCII表示一个汉字字符;
-
如果中英文混搭,计算机可能理解错误,需要复杂的逻辑才能区别一个汉字的界线,能否为每个文字都分配一个单独的编码?
-
Unicode:是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换。每个Unicode字符占2个字节。
-
u'abc' --> U+0061 U+0062 U+0063
-
u'\u0061' --> u'a'
-
u"中国" --> (编码生成utf-8的格式)(xx\xx\xx\xx) --> (查找对应的字模)
-
Unicode编码格式:
-
ASCII, ISO-8859-1, UTF-8, UTF-16
-
UTF-8使用1~4个字节来表示其他语言的字符;
-
UTF-16使用2个字节来表示其他语言字符。
Python数据结构之列表
- 列表是序列式的数据类型,他可以通过索引或者切片操作来访问一个或者多个连续的元素;列表元素可以改变;
- 定义初始化:
mylist = [1,2,3,4,5]
mylist = list("12345")
mylist = list(('1', '2', '3'))
mylist = range(10)
- 列表访问:
mylist[1]
mylistp[1:4]
- 列表更新:
mylist[1] = 10
mylist = mylist * 2
//列表累加2次mylist = mylist + [4,5,6]
Python数据结构之元组
- 元组是不可变的序列,元组有不同的元素组成,每个元素可以存储不同类型的数据;
- 创建:
tuple1 = ("what", "is", "python")
tuple1 = tuple("abcde")
tuple1 = ()
tuple1 = tuple(list1)
//可接收一个列表作为参数建立一个元组tuple1 = ("abc",)
//要元组中包含一个值,必须有一个逗号,用于和普通分组操作区分(如果没有逗号,则Python将把它认为是一个字符串而不是元组!)tuple1 = 'a', 'b', 'c'
- 访问:
t1[0]
t1[0:3]
t1[0:3:2]
- 元组是不可变的,但是当元组和列表组合,元组不可变,但元组中包含可变对象仍然可以改变;
- 如;
tuple1 = ("Anddy", [45, 56, 45], [34, 56, 78, 345])
中后面的两个列表中的数据都可以改变。 - Python的深拷贝和浅拷贝:
Python数据结构之字典
- 字典是Python种唯一的映射类型。key是唯一的,key与value是一对多的关系;
- 赋值:
dict1 = {}
dict1 = {"id1" : "45353", "id2" : "45435"}
dict1 = dict([("id1", "45353"), ("id2", "45435")])
//元组列表/列表元组(每个元组或者列表只能有两个参数)dict1 = dict(x=1, y=2)
dict1 = dict(**dict1)
//means x = 1, y = 2dict1 = {}.fromkeys(('x', 'y'), -1)
//means {x:-1, y:-1} -- fromkeys表示创建一个默认字典,字典中元素具有相同的值dict1 = {}.fromkeys('foo', 'bar')
//means- 字典的键值:不允许一个键值对一个多个值,如果初始化或者更新的过程中出现多个键值,会存储最后一个对应值,其他的自动删除
Python逻辑与控制
迭代器
- 迭代器:是访访问集合内元素的一种方式,从集合的第一个元素开始访问,知道所有的元素访问完,不能回退,只能前进迭代;
- 定义:
it = iter(obj)
- 访问:
it.next()
//迭代器是一个有next()方法的对象,当循环访问迭代器的每个元素时就调用next()方法,当所有元素都访问完时,引发一个StopIteration异常,告诉调用者,迭代完成。 - 可以使用
for
循环遍历:for val in myiter: print(val)
- 判断一个对象是否可迭代:
from collections import Iterable
isinstance(obj, Iterable)
列表解析
- 列表解析:动态创建列表,在一个序列的值上应用一个任意表达式,将其结果收集到一个新的列表并返回;
- 基本语法:
[expr for iter_val in iterable]
- for example:
mylist = [x+1 for x in range(10)]
- 扩展语法:
[expr for iter_val in iterable if cond_expr]
- for example:
mylist = [x+1 for x in range(10) if x > 5]
- 生成一个矩阵:
- for example:
myMatrix = [(x,y,z) for x in range(3) for y in range(3) for z in range(3)]
- 例子:
- 得到字符串中单词及其长度:
s = "welcome to python world"; [[word, len(word)] for word in s.split()]
生成器表达式
- 是列表解析器的一个扩展,返回一个生成器,生成器每次计算出一个条目,把这个条目产生出来。生成器使用延迟算法,在内存上更为有效。
- 语法:
(expr for iter in iterable if cond_expr)
- 创建:
l1 = (val for val in range(10))
- 列表解析器与生成器表达式的区别:
- 列表解析器需要把所有条目生成出来;
- 生成器表达式不需要把条目创建出来,每次计算的时候会把条目创建出来。