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的格式)(xxxxxxxx) --> (查找对应的字模)

  • 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 = 2
  • dict1 = {}.fromkeys(('x', 'y'), -1) //means {x:-1, y:-1} -- fromkeys表示创建一个默认字典,字典中元素具有相同的值
  • dict1 = {}.fromkeys('foo', 'bar') //means {foo:null, bar:null}
  • 字典的键值:不允许一个键值对一个多个值,如果初始化或者更新的过程中出现多个键值,会存储最后一个对应值,其他的自动删除

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))
  • 列表解析器与生成器表达式的区别:
  • 列表解析器需要把所有条目生成出来;
  • 生成器表达式不需要把条目创建出来,每次计算的时候会把条目创建出来。
原文地址:https://www.cnblogs.com/little-YTMM/p/6155759.html