python基础
Posted wangzihong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础相关的知识,希望对你有一定的参考价值。
(1)python 简介
89年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido).
python具有非常多并且强大的第三方库,使得程序开发起来得心应手.
Python程序员的信仰:人生苦短,我用python!
开发方向: 机器学习人工智能 ,自动化运维&测试 ,数据分析&爬虫 ,python全栈开发
(2)python 版本
python 2.x 版本,官方在 2020 年停止支持,原码不规范,重复较多
python 3.x 版本,功能更加强大且修复了很多bug,原码清晰,简单
?
(3)编译型与解释型语言区别:
编译型:一次性,把所有代码编译成机器能识别的二进制码,在运行
代表语言:c,c++
优点: 执行速度块
缺点: 开发速度慢,调试周期长
解释型:代码从上到下一行一行解释并运行
代表语言:python,php
优点: 开发效率快,调试周期短
缺点: 执行速度相对慢
*linux 操作系统默认支持python语言,可直接使用
(4)python的解释器:
(1)Cpython(官方推荐)
把python转化成c语言能识别的二进制码
(2)Jpython
把python转化成java语言能识别的二进制码
(3)其他语言解释器
把python转化成其他语言能识别的二进制码
(4)PyPy
将所有代码一次性编译成二进制码,加快执行效率(模仿编译型语言的一款python解释器)
?
注释: 就是对代码的解释 方便大家阅读python代码
(1)注释的分类
(2)注释的注意点
(3)注释的排错性
(1)注释的分类 : 1.单行注释 2.多行注释
?
# 1.单行注释 以#号开头 ,右边的所有东西都被当做说明文字 ,程序不进行编译运行。
print(‘hello world’)
# 2.多行注释 三个单引号 或 三个双引号
‘‘‘
这是第一行
这是第二行
‘‘‘
(2)注释的注意点
如果外面使用三个单引号,里面使用三个双引号,反之亦然。
(3)注释的排错性
先注释一部分代码,然后执行另外一部分,看看是否报错,逐层缩小报错范围,找到最终错误点。
变量: 可以改变的量,实际具体指的是内存中的一块存储空间
(1)变量的概念
(2)变量的声明
(3)变量的命名
(4)变量的交换
?
* 常量就是不可改变的量,python当中没有明确定义常量的关键字,
所以约定俗成把变量名大写就是常量,表示不可改变
(1)变量的概念: 可以改变的量就是变量。具体指代的是内存的一块空间
(2)变量的声明:
#1. a = 1 , b = 2
#2. a,b = 1,2
#3. a = b = 3
(3)变量的命名:
#字母数字下划线 ,首字符不能为数字
#严格区分大小写 ,且不能使用关键字
#变量命名有意义 ,且不能使用中文哦
(4)变量的交换:
#a,b = b,a
python六大标准数据类型:
数据类型分类:
(1)Number 数字类型 (int float bool complex)
# type 获取变量的类型 # id 变量所指向的值的内存地址 # int intvar = 1 print(intvar,type(intvar),id(intvar)) intvar = 0b1010 print(intvar,type(intvar),id(intvar)) # float floatvar = 3.14e2 # 小数点向右移两位 print(floatvar,type(floatvar),id(floatvar)) # bool 布尔型(True 和 False) boolvar = True print(boolvar,type(boolvar),id(boolvar)) # complex 复数:实数 + 虚数 3+4J 如果有一个数的平方是-1,那么这个数就是j # 表达式一 complexvar = 3 + 2j print(complexvar,type(complexvar),id(complexvar)) # 表达式二 complexvar = complex(3,2) print(complexvar,type(complexvar),id(complexvar))
(2)str 字符串类型
# 字符串:用引号引起来的就是字符串 """ \ 转义字符,有意义的字符变得无意义,无意义的变得有意义 \n 换行 \r\n 换行 \r ==> 把\r后面的字符串直接拉到当前行的行首 \t ==> 缩进,制表符 """ # 单引号 strvar = ‘Hello world‘ print(strvar,type(strvar)) # 双引号 strvar = "Hello world" print(strvar,type(strvar)) # 三引号 支持跨行操作 strvar = """ Hello world """ print(strvar,type(strvar)) # 元字符串 r + "字符串" 让转义字符失效 strvar = r"c:\file" print(strvar,type(strvar)) # 字符串的格式化 """ %d --> 整型占位符 %f --> 浮点型占位符 %s --> 字符串占位符 语法:"字符串%s"%(值1,值2,...) """ strvar = "流畅的%s,价格%d"%(‘python‘,99) print(strvar,type(strvar))
(3)list 列表类型
# 容器类型数据 """ list 列表,可获取,可修改,有序 """ # 定义一个空列表 listvar = [] print(listvar,type(listvar)) # 获取列表元素 通过索引取数 # 正索引: 0 1 2 4 5 # 逆索引: -5 -4 -3 -2 -1 listvar = [11,22,33,44,55] print(listvar[-1]) # 拿到列表最后一个元素 """ len 获取容器类型数据的长度,元素个数 """ print(len(listvar)) # 修改列表元素 listvar[0] = 66 print(listvar)
(4)tuple 元组类型
""" tuple 元组 可获取,不可修改,有序 """ # 定义一个空元组 tuplevar = () print(tuplevar,type(tuplevar)) # 判断是否元组,在于逗号 tuplevar = (1) tuplevar = (1,) print(tuplevar,type(tuplevar)) tuplevar = (1,2,3,4,5) print(tuplevar[1]) # 获取元组中的值 """ 元组中的值不可修改 """
(5)set 集合类型
""" set 集合(集合是用来做交叉并补操作的) 自动去重,无序 不能获取值,不能修改值 """ # 定义一个空集合 使用大括号为空时默认为字典类型 setvar = 1,2,3,4,5 print(setvar,type(setvar)) setvar = set() print(setvar,type(setvar))
(6)dict 字典类型
""" dict 字典 python 3.6版本之前无序 python 3.6版本之后有序(本质上无序) 以健值对存储的数据 语法:健1:值1,健2:值2 字典和集合中的值有要求,需要可哈希数据 可哈希数据:(不可便数据)Number(int,float,bool,complex) 可哈希数据可以作为字典的健和集合的值 不可哈希数据:(可变数据)list dict set """ # 定义一个空字典 dictvar = print(dictvar,type(dictvar)) dictvar = ‘a‘:1,‘b‘:2 # 通过健获取字典中的值 print(dictvar[‘a‘]) # 修改字典中的值 dictvar[‘a‘] = 3 print(dictvar)
Number数字类型分类:
int : 整数类型 ( 正整数 0 负整数 )
float: 浮点数类型 ( 1普通小数 2科学计数法表示的小数 例:a = 3e-5 #3e-05 )
bool: 布尔值类型 ( 真True 和 假False )
complex: 复数类型 ( 声明复数的2种方法 ) (复数用作于科学计算中,表示高精度的数据,科学家会使用)
容器类型分类:五个
str "nihao"
list [1,2,3]
tuple (6,7,8)
set ‘a‘,1,2
dict ‘a‘:1,‘b‘:2
自动类型转换
当2个不同类型的数据进行运算的时候,默认向更高精度转换
数据类型精度从低到高: bool int float complex
强制类型转换
# -->Number部分
int : 整型 浮点型 布尔类型 纯数字字符串
float: 整型 浮点型 布尔类型 纯数字字符串
complex: 整型 浮点型 布尔类型 纯数字字符串 (复数)
bool: ( 容器类型数据 / Number类型数据 都可以 )
# -->容器类型部分
str: ( 容器类型数据 / Number类型数据 都可以 )
list: 字符串 列表 元组 集合 字典
tuple: 字符串 列表 元组 集合 字典
set: 字符串 列表 元组 集合 字典 (注意:相同的值,只会保留一份)
dict: 使用 二级列表,二级元组,二级集合(里面的容器数据只能是元组)
字典和集合的注意点
哈希算法
#定义:
把不可变的任意长度值计算成固定长度的唯一值,这个值可正可负,可大可小,但长度固定
该算法叫哈希算法(散列算法),这个固定长度值叫哈希值(散列值)
?
#特点:
1.计算出来的值长度固定且该值唯一
2.该字符串是密文,且加密过程不可逆
#用哈希计算得到一个字符串的用意?
例如:比对两个文件的内容是否一致?
例如:比对输入的密码和数据库存储的密码是否一致
#字典的键和集合中的值都是唯一值,不可重复:
为了保证数据的唯一性,
用哈希算法加密字典的键得到一个字符串。
用哈希算法加密集合的值得到一个字符串。
如果重复,他们都是后面的替换前面的。自动去重
?
#版本:
3.6版本之前都是 字典和集合都是无序的
3.6版本之后,把字典的字面顺序记录下来,当从内存拿数据的时候,
根据字面顺序重新排序,所以看起来像有序,但本质上无序
?
可哈希数据:
可哈希的数据 (不可变的数据):Number(int float bool complex) str tuple
不可哈希的数据 (可变的数据): list set dict
python运算符
(1)算数运算符: + - * / // % **
(2)比较运算符: > < >= <= == !=
(3)赋值运算符: = += -= *= /= //= %= **=
(4)成员运算符: in 和 not in (针对于容器型数据)
(5)身份运算符: is 和 is not (检测两个数据在内存当中是否是同一个值)
(6)逻辑运算符: and or not
(7)位运算符: & | ~ ^ << >>
python运算符 | 注意点 |
---|---|
算数运算符 | % 取余 , //地板除 , ** 幂运算 |
比较运算符 | == 比较两个值是否相等 != 比较两个值是否不同 |
赋值运算符 | a += 1 => a = a+1 |
成员运算符 | in 或 not in 判断某个值是否包含在(或不在)一个容器类型数据当中 |
身份运算符 | is 和 is not 用来判断内存地址是否相同 |
逻辑运算符 | 优先级 () > not > and > or |
位运算符 | 优先级 (<<或 >> ) > & > ^ > | 5 << 1 结果:10 , 5 >> 1 结果:2 |
数据在内存中的缓存机制
在同一文件(模块)里,变量存储的缓存机制 (仅对python3.6版本负责)
# -->Number 部分
1.对于整型而言,-5~正无穷范围内的相同值 id一致
2.对于浮点数而言,非负数范围内的相同值 id一致
3.布尔值而言,值相同情况下,id一致
4.复数在 实数+虚数 这样的结构中永不相同(只有虚数的情况例外)
# -->容器类型部分
5.字符串 和 空元组 相同的情况下,地址相同
6.列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]
不同文件(模块)里,部分数据驻留小数据池中 (仅对python3.6版本负责 了解)
小数据池只针对:int,str,bool,空元祖(),None关键字 这些数据类型有效
#(1)对于int而言
python在内存中创建了-5 ~ 256 范围的整数,提前驻留在了内存的一块区域.
如果是不同文件(模块)的两个变量,声明同一个值,在-5~256这个范围里,
那么id一致.让两个变量的值都同时指向一个值的地址,节省空间。
#(2)对于str来说:
1.字符串的长度为0或者1,默认驻留小数据池
2.字符串的长度>1,且只含有大小写字母,数字,下划线时,默认驻留小数据池
3.用*号得到的字符串,分两种情况。
1)乘数等于1时: 无论什么字符串 * 1 , 都默认驻留小数据池
2)乘数大于1时: 乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20
#(3)指定驻留
# 从 sys模块 引入 intern 函数 让a,b两个变量指向同一个值
from sys import intern
a = intern(‘大帅锅&*^^1234‘*10)
b = intern(‘大帅锅&*^^1234‘*10)
print(a is b)
#可以指定任意字符串加入到小数据池中,无论声明多少个变量,只要此值相同,都指向同一个地址空间
缓存机制的意义
无论是变量缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率
以上是关于python基础的主要内容,如果未能解决你的问题,请参考以下文章