python基础
一.python语法——注释
1.什么是注释
注释就是对某串代码的解释说明
2.注释的方式
1)方式:单行注释
# 注释内容
2)方式:多行注释
'''
注释内容
'''
3)方式:多行注释
"""
注释内容
"""
4)方式:快捷键
ctrl+?
二.PEP8规范
pycharm中出现非红色的波浪线,表明现在这串代码写的可能不规范
,但是不影响代码执行
。
该规范定义了标准的代码编写格式,可以不遵守但会显得不专业
ctrl+alt+L 系统自动更正
🔸1.单行注释如果在代码后,#号左边与代码需空两格,注释内容与#号空一格
🔸2.单行注释自己在一行,注释内容与#号空一格
🔸3.列表中逗号与后面的数据值需空一格
🔸4.赋值符号左右都需要空一格
三.变量与常量
1.变量与常量是什么?
变量就是记录事物变化(可能会常改变
)的状态
常量就是记录事物不变(可能不常改变
)的状态
2.变量与常量的功能
目的是为了让程序具备人记录事物状态
的能力
3.基本使用
变量名 / 常量名 | 赋值符号 | 数据值 |
---|---|---|
name / NAME | = | '张三' |
4.底层原理
name='张三'
#看到赋值符号先看符号右侧再看符号左侧
1)在内存空间中申请一块内存空间存储数据值
2)给该空间的数据值绑定一个名字
3)通过该名字就可以访问存储的数据值
注意:
1)一个数据值可以同时被多个名字绑定
a=10
b=10
print(a,b)
#结果:10 10
2)一个名字同一时间只能绑定一个数据值
a=10
a=20
print(a)
#结果:20 (因为10没有绑定名字,所以就是垃圾数据)
3)当赋值符号右侧也是名字时需把右侧名字的值赋给左侧的名字
a=10
b=a
print(b)
#结果:10
a=10
b=a
a=a+b
print(a)
#结果:20
5.命名规范与命名风格
【命名规范】:
1.名字中只能出现字母、数字、下划线
2.数字不能开头
3.名字不能和Python关键字冲突
4.做到见名知意
#尽量不要用中文或拼音!显的很不专业!
【命名风格】:
1.下划线 #多个单词间下划线隔开 python常用
name_list=['jason','torry']
2.驼峰体 #单词间首字母大写 javaScript常用
1)小驼峰
userNameInfo='jason'
2)大驼峰
UserNameInfo='jason'
#p1: 选择一种命名风格,就不要随便切换,否则一个项目中多种风格看起来很乱
#p2:python中没有真正意义的常量,一般把纯大写的当作常量:HOST='192.168.0.1'
四.基本数据类型
生活中数据的表现形式有多种多样,如年龄是数字,名字是文字等. 程序中也是如此
type(变量名或数据值)
可查看数据类型
name='张三'
print(type('name'))
#结果:<class 'str'>
num=123
print(type(123))
#结果:<class 'int'>
🔸整型int
就是整数
age=18
number=123
year=2022
🔸浮点型float
就是小数
height=1.80
weight=60.3
salary=2000.84
🔸字符串型str
就是文本
引号引起来的一般都是字符串
name='torry'
addr='''上海'''
hobby="run"
info="""阿巴阿巴"""
问:如何区分三引号是注释还是字符串?
答:三引号左边
有赋值符号
和变量名
则为字符串否则就是注释
🔸列表list
就是中括号括起来,里面可以存储多个数据值的类型
l1=[11,22,33]
print(l1)
#结果:[11,22,33]
1.索引取值
列表索引取值是从0开始,0代表左边第一个
name_list=['torry','jason','kevin']
print(name_list[0])
#结果:torry
l1=[11,22,[33,44]]
print(l1[2][0])
#结果:33
🔸字典dict
就是花括号括起来,里面可以存储多个数据值的类型 类似于姓名=torry,只不过=变成了:
字典数据的组织形式是K:V键值对
K是对V的描述信息,V是真正的数据值
d1={'name':'jason','age':18}
print(d1)
#结果:{'name':'jason','age':18}
1.按K取值
由于字典是无序的,不能用索引.所以只可以按K键取值
d1={'name':'jason','age':18}
print(d1['name'])
#结果:jason
🔸布尔值bool
True
和False
对错、真假、是否可行
1.主要应用:
一般用于流程控制中的逻辑判断,判断该事物对错,是否可行。
is_delete = False
is_alive = True
#存储布尔值的变量名一般用is开头
2.布尔值类型转换:
#程序中所有数据自带布尔值
布尔值为 False 的数据有:0 None 空字符串 空列表 空字典 空元组 空集合
布尔值为 True 的数据有:除了以上的都是
🔸元组tuple
小括号括起来,内部可以存储多个数据值,数据值与数据值之间逗号隔开,数据值可以是任意数据类型
t=(1,2,3)
print(type(t))
#结果:<class 'tuple'>
————————————————————————————————————————————
'注意:如果元组内只有一个数据值,需在数据值后加逗号 否则类型不是元组'
t1=(1,)
#所以为了保险起见,今后不管什么类型、几个数据值,最后的值都跟一个逗号
1.元组与列表的区别:
主要区别在于元组内的数据值不能直接修改,而列表可以。所以元组又称为不可变的列表
列表:可以将某个索引绑定的数据重新绑定为其他数据值
元组:如果将某个索引绑定的数据值重新绑定为其他数据值会报错
#其实元组所谓的不可变指的是索引跟数据值的绑定关系不能断,如果索引绑定的是一个列表则可以变!
l1 = [11, 22, 33]
t1 = (11, 22, 33)
t2 = (11,22,[33,44])#t2索引2绑定的是一个列表
l1[2] = 99
t1[2] = 99
t2[2][1] = 99
print(l1) #[11,22,99]
print(t1) #报错
print(t2) #(11,22,[33,99])
🔸集合set
大括号括起来,内部存放多个数据值,数据值与数据值之间逗号隔开,不是K:V键值对
s1={1,2,3}
集合只能用于去重
和关系运算
集合内数据只能是不可变类型
1.如何定义空字典和空集合?
d1 = {} #空字典
s1 = set() #空集合
五.与用户交互
1.输入信息: input
name=input('输入姓名:')
'''
1.先执行input获取用户输入的信息
2.把输入的信息赋值给左边的变量名name
3.以后在程序中就可以通过变量名name反复调用用户输入的数据
'''
#注意:input获取到的用户输入都会转成字符串类型
2.输出信息: print
print(name,'jason',123)
(1)括号内可以放变量名、数据值 且支持多个数据,用逗号隔开
(2)print自带换行符
换行符:\n 、 \r\n '注:斜杠和字母组合在一起可能会有特殊含义'
print('11\r\n22')#结果为两行分别是 11 22
'两个print中间打印一个空的print也是换行'
(3)print切换结束符 end='' #相当于在一行显示,引号中也可以跟字符
print(11,end='')
print(22)
#结果为:1122
3.不同版本解释器输入输出的使用会有不同
python2.X中:
input两种方法:
(1) input方法需用户提前指定数据类型,写什么类型就是什么类型
(2) raw_input方法与python3.x中的input一致,统一处理成字符串
print两种方法:
(1) print 数据值
(2) print(数据值)
六.格式化输出
1.什么是格式化输出
提前写好一段字符串,把里面的某些内容替换掉之后再输出就是格式化输出。
2.如何格式化输出
1.%s:#可以接收任意类型的数据值
2.%d:#只能接收数字类型
3.%08d:#产生固定8位数的数据,不足的用0填充(常用于单号)
print('%08d'%123) #结果为00000123
【eg】:
print('亲爱的%s,您本月累计消费%d元,余额%d元' %('张三',10,50))
#结果为:亲爱的张三,您本月累计消费10元,余额50元
【错误示范】:
name = input('name>>:')
age = input('age>>:')
print('姓名:%s,年龄:%d'%(name,age))
#结果会报错
'因为input获取到的数据自动转为字符串,而格式化%d仅能接收数字,所以报错'
3.注意事项
有几个占位符就需要几个数据值,不能多也不能少
七.基本运算符
1.算数运算符
描述 | 运算符 |
---|---|
加 | + |
减 | - |
乘 | * |
除 | / |
整除(只要除完后的整数位) | // |
取模(只要除完后的小数位) | % |
幂指数(次方) | ** |
IT准则:能少敲一个字母绝不多敲!
简写 | 等价于 |
---|---|
x += 1 | x = x + 1 |
x -= 1 | x = x - 1 |
x *= 1 | x = x * 1 |
x /= 1 | x = x / 1 |
x // = 1 | x = x // 1 |
x %= 1 | x = x % 1 |
x **= 1 | x = x ** 1 |
2.比较运算符
比较运算符 | 名称 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
PS:需注意 =
是赋值符号! ==
是运算符等于!
3.赋值运算符
赋值运算符存在的意义就是为了让代码看起来更加精简
1.链式赋值
如果想把一个数据值同时赋值给多个变量名:
x = y = z = 10
print(x, y, z)
#结果位:10 10 10
2.交叉赋值
如果想把x和y的数据值交换:
x = 10
y = 20
x, y = y, x
print(x, y)
#结果为:20 10
3.解压赋值
如果想把列表中的数据值分别赋值给不同的变量名
l1 = [11, 22, 33, 44]
a, b, c, d = l1
print(a, b, c, d)
#结果为:11 22 33 44
'正常情况下要保证左边的变量名与右边数据值个数一致'
'当数据值较多时可以采用*号打破上述规则'
l1 = [1, 2, 3, 4, 5, 6, 7, 8]
a, *b, c = l1
print(a)#结果为:1
print(b)#结果为:[2,3,4,5,6,7]
print(c)#结果为:8
#PS:字符串、列表、字典、元组、集合都支持解压赋值
八.逻辑运算符
主要是配合条件使用
and 与 链接的多个条件'必须都成立',结果才成立
or 或 链接的多个条件'有一个成立',结果就成立
not 非 将条件'取反',对的变成错的
问:如何得出具体的结果值?
and 左边成立结果取决于右边条件 左边不成立结果取决于左边条件
or 左边成立结果取决于左边条件 左边不成立结果取决于右边条件
#条件是数据值结果就是数据值,条件是表达式结果就是布尔值
'0 None 空字符串 空列表 空字典 空元组 空集合按数据值看'
注:and 、or 、not三者混用时存在优先级之分,应该用括号区分开提升代码可读性
九.成员运算符
判断某个个体在不在群体内
1.列表做成员运算时,最小单位是数据值,不可拆分或合并
l1 = ['torry', 'jack', 'jason']
print('jason' in l1) # True
print('kevin' not in l1) # True
print('j' in l1) # False
2.字典做成员运算时,只有K键参与运算,V值不暴露外界
d1 = {'name':'jason'}
print('name' in d1) # True
print('jason' in d1) # False
3.字符串做成员运算时,最小单位是单个字符或多个字符
s1 = 'hello'
print('h' in s1) # True
十.身份运算符
id()
查看某个数据的内存地址
l1 = 11
print(id(l1)) # 140734392829920
is 判断的是内存地址是否相等
== 判断的是数据值是否相等
l1 = [11, 22, 33]
l2 = [11, 22, 33]
print(id(l1)) # 2685130465344 (查看l1内存地址)
print(id(l2)) # 2685130464320 (查看l2内存地址)
print(l1 == l2) # True (判断数据值是否相等)
print(l1 is l2) # False (判断内存地址是否相等)
'''
1.数据值相同 内存地址可能不同
2.内存地址相同 数据值一定相同
'''
python内存优化(小整数池)
python针对数据量较小且经常使用的数据会做内存优化:两个相同的数字共享一个内存地址。
仅是为了避免创建相同的数据值而重复申请内存空间所带来的效率问题。
小整数池范围:【-5~256】
不同版本解释器与pycharm可能会有不同的优化 仅作了解即可