第一章、Python基础
第二章、数据结构与算法
第三章、Linux与shell
第四章、MySql
第五章、Numpy&Pandas
一、Python基础(上)
1.注释与变量命名
python
#单行注释
'''
多行注释哦
'''
"""
多行注释
"""
python
# 变量名对应变量地址
a=10
b="zhangsan"
print(a)
print(b)
# var1=var2=var3=10
var1,var2,var3=1,2,3
# 标识符: 字母、数字、下划线 ,且不能以数字开头
# 区分大小写
import keyword
print(keyword.kwlist)
# 大驼峰
# 小驼峰
# 蛇形命名
# 在程序中定义后不再修改的量为常量
# 常量命名使用大写
num1=10
num2=20
num1,num2=num2,num1
2.进制表示与进制转换
python
# 不同进制表示整数
# 二进制 0b或0B开头
# 八进制 0o开头
# 十进制 正常数字表示
# 十六进制 0x或0X开头,此处的A-F不区分大小写
#十进制
dec_num=10
#二进制
bin_num=0b1010
#八进制
oct_num=0o12
#十六进制
hex_num=0xa
print(dec_num,bin_num,oct_num,hex_num) #10 10 10 10
python
#2.转换规则
#十进制1314
# 1*10^3+3*10^2+1*10^1+4*10^0
#二进制转为十进制(其他进制同理)
# 从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
#二进制1011
# 1*2^0+1*2^1+0*2^2+1*2^3=11
#十进制转为二进制(其他进制同理)
#将该数不断除以2,直到商为0位置,然后将得到的余数倒过来,就是对应的二进制
#十进制56
#简易方法:
#56=1*2^5+1*2^4+1*2^3 方差几位表示后面补多少个0
# 100000+10000+1000=111000
#十六进制转为十进制
#从最低位开始,将每个位上数提取出来,乘以16的(位数-1)次方,然后求和
#十进制0x34A
# 10*16^0+4*16^1+3*16^2=842
#十进制转为十六进制
#将该数不断除以16,直到商为0位置,然后将得到的余数倒过来,就是对应的十六进制
#十进制356
#简易方法:
# 356=1*16^2+6*16^1+4*16^0
# 100+60+4=164
python
#二进制转换为十六进制
#低位开始,将二进制每四位一组,转换为对应的十六进制。
#因为2的四次方等于16,所以将二进制从右向左每四位分成一组,如果二进制数的位数不是4的倍数,则在最左边补0,使其变为4的倍数
#二进制1001011
# 0100 1011
# 2^2=4 1*2^3+1*2^1+1*2^0=11
# 4 b
#0x4b
#十六进制转为二进制,将十六进制每1位。转为对应的4位的二进制数即可
#十六进制 0x23B
# 2 3 B
# 1*2^1 1*2^1+1*2^0 1*2^3+1*2^1+1*2^0
# 0010 0011 1011
#八进制转为二进制,1位八进制转换为3位二进制数
二进制转为16进制规则底层原理:

3.原码、反码、补码
计算机底层存储数据时是使用的二进制数,但是计算机存储一个数字时候并不是直接存储改数字对应的二进制数字,而是存储该数字对应的二进制数字的补码。
机器数:存储在机器中的二进制数就是机器数
真值:给机器数加符号位的真正表示的值称为机器数的真值 。1表示负,0表示正
原码:和机器数的真值表示形式一致。
正数的原码即为对应的二进制数
负数的原码为它的绝对值对应的二进制数,且最左边变为1
0的原码为0
python
#十进制数,使用8位二进制数原码表示
#十进制+1
# 0000 0001
#十进制-1
# 1000 0001
**反码:**注意反码通常用来由原码求补码或者由补码求原码的过渡码
正数的反码和原码相同
负数的反码,在其原码的基础上,符号位不变,其余为取反
0的反码为0
python
#十进制数,使用8位二进制数反码表示
#十进制+1
# 0000 0001
#十进制-1
# 1111 1110
补码:
正数的补码和原码、反码相同
负数的补码:反码基础上加1
0的补码为0
python
#十进制数,使用8位二进制数补码表示
#十进制+1
# 0000 0001
#十进制-1
# 1111 1111
python
# 计算10-12
# 10: 1000+10=1010 原码:0000 1010 补码:0000 1010
# -12: 1000+100=1100 原码:1000 1100 补码:1111 0100
# 相加 补码:1111 1110 反码: 1111 1101 原码: 1000 0010 转为十进制:-2
1.请说明Python语言的运行方式(编译型还是解释型),并解释原因
先编译再解释,但和java的先编译再解释不同。Java是在程序解释之前,先对其进行预编译(对Java源文件经过javac命令,编译生成字节码文件,落盘,)再解释执行。Python是逐行对代码进行解释执行时候,会进行编译操作,生成字节码文件,默认不落盘,在内存中。
2.计算机为什么要使用补码,为何2-2使用原码不准,使用补码准?
计算机内部在处理减法运算时候会将其转换为加法运算
最高位表示符号位,由于符号位的存在,如果使用原码表示,会导致计算结果不正确。补码的设计巧妙地让符号位也参与运算,并且可以得到正确的计算结果。
python
# 使用原码计算2-2即2+(-2)
# 2 二进制 原码:00 0010
# -2 二进制 原码: 1000 0010
# 相加 原码相加:1000 0100 -4
# 使补码计算2-2即2+(-2)
# 2 二进制 原码: 0000 0010 反码:0000 0010 补码:0000 0010
# -2 二进制 原码: 1000 0010 反码:1111 1101 补码:1111 1110
# 相加 补码相加: 00000000 0




4.数据类型
#1.数值类型
# 整数int、浮点数float、 复数 complex 、布尔 bool
# 2.字符串 str
# 3.容器类型
# list 列表
# tuple 元组
# set 集合
# dict 字典
# 4.特殊类型 None
# 上述 类型中
# 不可变的类型:数值、字符串、元组
# 可变的类型:列表、集合、字典
# 整数类型
# 1.可以使用下划线将其中的数字分组、使其更清晰易读,存储这种数时,python会忽略其中的下划线,但这种方法适用
# 整数和浮点数,但只有python3.6及以上版本支持
num1=1_000_000
num2=False
print(num1) #1000000
# 2. type()用来查看比变量类型,isinstance() 来判断变量类型
# type()与isinstance()的区别在于type()不会认为子类是一种父类型,isinstance()会认为子类是一种父类类型
print(type(num1)) #<class 'int'>
print(type(num2)) #<class 'bool'>
print(isinstance(num1,int)) #True
print(isinstance(num2,bool)) #True
print(type(num1)==type(num2)) #False
print(isinstance(num2,type(num1))) #True 因为bool是int的子类
# 3.小整数池
# Python将[-5.256]的整数维护在小整数对象池中,这些整数提前创建好且不会被垃圾回收,避免了为
# 整数频繁申请和销毁内存空间,不管程序的什么位置,使用的位于这个范围内的整数都是同一对象。
# id()用来获取变量值在内存中的地址
num3=300
num4=200
num5=300
num6=30
print(id(num3)) #2985472714064 #每次再次运行这里地址和初次不同
print(id(num4)) #140719780266648 #每次再次运行这里地址和初次相同
print(id(num5)) #2985472714064 #每次再次运行这里地址和初次不同
print(id(num6)) #140719780261208 #每次再次运行这里地址和初次相同
# 4.大整数池
# 一开始大整数池为空,每创建一个大整数就会向池中存储一个
# 不同python实现,小整数池的范围和实现细节可能因Python的不同实现(如CPython、JPython、IronPython等)而有所不同,上述提到的
# [-5,256]范围是CPython的默认实现
# 有时连续赋值的相同大整数也可能指向同一对象,这是因为Python环境的优化机制,但是这个优化不是绝对的,也取决于解释器以及
# 交互式以及脚本环境
#浮点类型
num1=0.1
num2=0.2
num3=num1+num2
#在任何的编程语言中,浮点数类型都存在丢失精度的情况
print(num3) #0.30000000000000004
print(type(num3)) #<class 'float'>
#为了解决浮点数丢失精度问题,可以使用python其他模块提供的功能
from decimal import Decimal
num3=Decimal("0.1")
num4=Decimal("0.2")
num5=num3+num4
print(num5) #0.3
num7=3.14e7
print(num7) #31400000.0
#布尔类型
# 只有True和False
# Python3中,bool是int的子类,True和False可以和数字相加
num1=True
num2=False
print(num1) #True
print(num2) #False
print(type(num1)) #<class 'bool'>
print(type(num2)) #<class 'bool'>
print(num1+10) #11
# ==判断等号两边值是否相等
print(num1==1) #True
print(num2==0) #True
#is 判断左右两边 是否指向同一个地址(对象)
print(num1 is 1) #False Python3.8以上会报警告 SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
print(num2 is 0) #False Python3.8以上会报警告 SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
# Python中,表示假的值不只有False,还有None、 0 、0.0、 False 、所有的空容器(空列表、空字典、空集合、空字符串)
#字符串类型
# 在Python中,用引号括起来的都是字符串,其中的引号可以是单引号也可以是双引号。
# 可使用反斜杠\转移特殊字符
str1="This is a string"
str2='This is a string'
str3="Hello\"W\"orld"
print(str3) #Hello"W"orld
# \在行尾可作为续行符
print("Hello\
World") #Hello world
# \\反斜杠
print("Hello\\World") #Hello\World
# \'单引号
print("Hello\'World") #Hello'World
# \" 双引号
print("Hello\"World") #Hello"World
# \b退格
print("Hello\bWorld") #HellWorld
# \n换行
print("Hello\nWorld")
#Hello
#World
#\t横向制表符
print("Hello\tWorld") #Hello World
#\r回车、回到行首
print("Hello\rWorld") #World
# 1.intern机制
# 每个字符串,不夹杂空格或者特殊符号,默认开启intern机制,共享内存,靠引用计数决定是否销毁,相同的
# 字符串默认只保留一份,当创建一个字符串,他会先检查内存里面有没有这个字符串,如果有就不在创建新的
str4="Hello"
str5="Hello"
str6='Hello'
print(id(str4)) #2126725801056
print(id(str5)) #2126725801056
print(id(str6)) #2126725801056
# 2.字符串缓冲池
# 单个字母,长度为1的ASCII字符串会被interned,包括空字符
str7=''
str8=''
print(id(str7)) #140719780281504
print(id(str8)) #140719780281504
5.类型转换
#类型转换
#1.自动类型转换
num1=10
num2=15.5
num3=num1+num2
print(type(num3)) #<class 'float'>
num4=5
num5=1
num6=num4/num5
print(num6) #5.0
print(type(num6)) #<class 'float'>
# num7=10
# num8="20"
# print(num7+num8) #报错
#2.强制类型转换
# 通过函数进行类型转换
# int(x[,base]) 将x转换为一个整数,x若为字符串可用base指定进制
print(int("10")) #10
print(type(int("10"))) #<class 'int'>
print(int("10",2)) #2 表示目前10是二进制形式,将其转换为10进制
print(int("12",16)) #18
# float(x) 将x转换位一个浮点数
print(float("10")) #10.0
print(type(float("10"))) #<class 'float'>
# complex(real,imag) 创建一个实部为real,虚部为imag的复数
print(complex(2,3)) #(2+3j)
print(type(complex(2,3))) #<class 'complex'>
# str(x) 将x转换位一个字符串
# repr(x) 将x转换位一个字符串,可以转字符串中的特殊字符
print(str(10)) #10
print(repr(10)) #10
print(str("hello")) #hello
print(repr("hello")) #'hello'
#eval(x) 执行x字符串表达式,并返回表达式的值
print(eval("2+3")) #5
#ord(x) 将一个字符x转换为它的ASCII值
print(ord("a")) #97
#chr(x) 将一个整数x转换为它的Unicode字符
print(chr(65)) #A
6.编码与解码
# 字符的编码与解码
# 编码:将字符转换为字节形式
# 解码:将字节转换为字符形式
# 解码和编码指定的编码类型要一致
str1="你好"
print(str1) #你好
print(type(str1)) #<class 'str'>
# 将字符串类型转换为字节型数据的过程称为编码encode,需要指定编码类型
byte1=str1.encode(encoding='utf-8')
print(byte1) #b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(type(byte1)) #<class 'bytes'>
#将字节型数据转换为字符型数据的过程称为解码的decode
str2=byte1.decode(encoding='utf-8')
print(str2) #你好
print(type(str2)) #<class 'str'>
7.输入与输出
#输入与输出
#输入
# 如果接收用户在键盘上输入一些字符,Python提供了一个input()函数,可以让用户输入字符串,并存放到一个字符串变量里
# 字符串变量=input("提示信息")
name=input("请输入") #输入张三后会回车
print(name) #张三
#输出
# 1.普通输出
# 使用print()可将内容打印
print("Hello")
# 多个内容直接可以使用逗号隔开
print("Hello","World")
print("Hello"+"World") #如果使用字符串和数值拼接会报错
# 可以使用end=来控制print()以什么结尾
print("Hello World",end="\n")
print("111")
# Hello World
# 111
#2.可视化输出
# 2.1字符串中使用%占位
# %d 十进制整数 %f浮点数,%nf可指定显示小数点后几位
# %s 字符串 %o八进制 %x十六进制 %e科学计数法
int1=10
float1=3.14159
str1="int1=%d,float1=%f" % (int1,float1)
print(str1) #int1=10,float1=3.141590
# 2.2字符串.format()
num1=10
num2=3.14
num3=False
# 2.2.1不设置指定位置,按默认顺序
print("num1={},num2={},num3={}".format(num1,num2,num3)) #num1=10,num2=3.14,num3=False
# 2.2.2设置指定位置,不能和方法一混合使用
print("num1={0},num2={2},num3={1}".format(num1,num2,num3)) #num1=10,num2=False,num3=3.14
print("num1={0},num2={2},num3={1}".format(num1,num3,num2)) #num1=10,num2=3.14,num3=False
# 2.2.3设置参数
print("num1={n1},num2={n2},num3={n3}".format(n1=num1,n2=num2,n3=num3)) #num1=10,num2=3.14,num3=False
# 2.3数字格式化
float2=3125.9
str2="{:*^20,.2f}".format(float2)
print(str2) #******3,125.90******
str3="{:*<20,.2f}".format(float2)
print(str3) #3,125.90************
str4="{:*>20,.2f}".format(float2)
print(str4) #************3,125.90
# 2.4使用大括号转义大括号
print("{0}对应的位置是{0}".format("Hello")) #Hello对应的位置是Hello
print("{0}对应的位置是{{0}}".format("Hello")) #Hello对应的位置是{0}
# 2.5f-字符串
# 字符串前写入一个f,字符串中的{}内写入变量名
#{}内变量名后可以加上=。打印时会在变量值前加上:变量名=
str6=f"num1={num1},num2={num2},num3={num3}"
str7=f"{num1=},={num2=},{num3=}" #要求名字必须相同
print(str6) #num1=10,num2=3.14,num3=False
print(str7) #num1=10,num2=3.14,num3=False