python基础

一、python语法之注释

1.什么是注释

注释其实就是对一段代码的解释说明(注释是代码之母)

2.注释的方式

	方式1:解释说明文字前加警号   
        # 注释(单行注释)  
 	方式2:" 英文输入法下连续按三下
         '''
         多行注释
         '''
 	方式3:" 英文输入法下+shift 连续按三下
         """
         多行注释
         """
     方式4:pycharm中有快捷键 ctrl + ?

变量与常量

1.什么是变量

​ 记录变化(可能会经常改变)的事物状态

​ eg:年龄 电话

2.什么是常量

​ 记录固定(可能不经常改变)的事物状态

​ eg:圆周率

3.变量的基本使用

name    =    'jason'
变量名 赋值符号  数据值

1.一旦看到赋值符号 那么一定先看符号的右侧
2.在内存空间申请一块内存空间存储数据值
3.给数据值绑定一个变量名 
4.以后就可以通过这个变量名找到他所绑定的数据值


注意:
 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
    

4.变量的命名规范

1.中文可以当作变量名 但是不建议使用 太low了 并且容易报错
2.汉语拼音可以当作变量名 不建议使用 太low了
3.变量名只能出现字母、数字、下划线
4.数字不能作为变量名的开头
5.变量名尽量做到见名知意
6.变量名不能与关键字冲突

5.变量名的命名风格

1.下划线式		python推荐使用
	变量名中单词很多 彼此使用下划线隔开
 	name_age_hobby = 'jason'
2.驼峰式		js推荐使用
	大驼峰	
    NameAgeHobby = 'jason'
   	小驼峰
    nameAgeHobby = 'jason'
    
ps:在同一个编程语言中尽量固定使用一种 不要随意切换

6.常量的基本使用

1.在python没有真正意义上的常量(定义了就不能改) 定义了可以随时修改
2.在python中如果想表示出常量 那么可以使用全大写的变量名
	HOST = '127.0.0.1'
ps:出了全大写之外 其他与变量用法一致

二、数据类型

1.什么是数据类型
	在日常生活中数据的表现形式多种多样 在程序中也是如此
2.为何学习数据类型
	针对不同的数据采用最佳的数据类型来标识出该数据的价值
3.本次学习数据类型仅仅是了解
	只要看到每个数据类型能够叫出它们的名字以及代码如何编写即可
4.学前必会
	如何查看数据值的数据类型
    	type(数据值)\type(变量名)

数据类型之整型 int

大白话的意思其实就是整数
应用场景:年龄 班级人数 年份
代码实现:
    age = 18
 	 stu_num = 56
  	 year = 2022

数据类型之浮点型 float

大白话的意思其实就是小数
应用场景:身高 体重 薪资
代码实现:
    height = 1.83
 	 weight = 75.5
  	 salary = 3.1

数据类型之字符串 str

大白话的意思其实就是文本类型的数据>>>:引号引起来的部分都是字符串
应用场景:姓名 地址 爱好
代码实现:
    name = 'jason'
 	 addr = '芜湖'
  	 hobby = '学习'
1.定义字符串有四种方式
	name = 'jason'
 	name1 = "jason"
 	name2 = '''jason'''
 	name3 = """jason"""
2.为什么定义字符串需要有多种方式
	我们在字符串中编写文本也可能会使用到引号 为了避免冲突 有了多种方式
	info = "Jason老师说:'年轻不是用来挥霍的资本'"
3.如何区分三引号是字符串还是注释
	关注左侧是否含有赋值符号和变量名 如果有则为字符串 没有则为注释

数据类型之列表 list

大白话的意思其实就是可以存储多个数据值的类型 并且可以非常方便的取
应用场景:存储多个数据值 并且将来可能需要单独取其中一些
代码实现:
    name_list = ['jason', 'tony', 'kevin', 'oscar', 'jerry']
1.列表的文字描述
	中括号括起来 内部可以存放多个数据值 数据值与数据值之间逗号隔开 数据值可以是任意数据类型
    l1 = [11, 11.11, 'jason',[11, 22]]
2.索引取值
	起始数字是从0开始 
    l1[索引值]

数据类型值字典 dict

能够非常精确的存储和表达数据值的含义
代码实现:
    info_dict = {
        'username': 'jason', 
        'age': 18, 
        'hobby': 'read', 
	}
1.字典文字描述
	大括号括起来 内部可以存放多个数据 数据的组织形式是K:V键值对
	键值对与键值对之间逗号隔开
    	K是对V的描述性性质的信息(解释说明) 一般都是字符串类型
    	V是真正的数据值 可以是任意数据类型
2.按K取值
	字典只能按K取值 因为字典是无序的 没有索引的概念
 	 info_dict['username']

数据类型值集合 set

1.集合只能用于去重和关系运算
	后面再讲 暂且忽略
2.集合内数据只能是不可变类型
	后面再讲 暂且忽略
3.大括号括起来 内部存放多个数据值 数据值与数据值之间逗号隔开 数据值不是k:v键值对
4.代码实现
	s1 = {1, 2, 3, 4, 5, 6}
5.定义空集合与空字典	
	{}  	默认是字典
 	set()	定义空集合

数据类型值元组 tuple

1.也称为'不可变'的列表
	元组内索引绑定的内存地址不能修改
2.小括号括起来 内部存放多个数据值 数据值与数据值之间逗号隔开 数据值可以是任何数据类型
3.代码实现
	t1 = (11, 22, 'jason')
4.元组与列表的对比
	 # l1 = [11, 22, 33]
    # print(l1[0])  # 获取索引0对应的数据值
    # l1[0] = 666
    # print(l1)  # [666, 22, 33]

    # t1 = (11, 22, 33)
    # print(t1[0])
    # t1[0] = 999
    # print(t1)

    t1 = (11, 22, [111, 222])
    t1[2][1] = 666
    print(t1)
    """
    A.直接报错
    B.(11, 22, [111, 666])
    C.不知道 超出了我的认知
    """
5.元组内如果只有一个数据值
	 t1 = (1)
    t2 = (11.11)
    t3 = ('jason')
    print(type(t1), type(t2), type(t3))  # <class 'int'> <class 'float'> <class 'str'>
    t1 = (1,)
    t2 = (11.11,)
    t3 = ('jason',)
    print(type(t1), type(t2), type(t3))  # <class 'tuple'> <class 'tuple'> <class 'tuple'>
    """
    建议:以后在使用可以存放多个数据值的数据类型时 如果里面暂时只有一个数据值 那么也建议你加上逗号
    """

数据类型值布尔值 bool

1.用来判断事物的对错 是否可行 只要用于流程控制中
2.只有两种状态
	True	对的 真的 可行的
  	False	错的 假的 不可行的
3.python中所有数据都自带布尔值
	布尔值为False的数据有:0 None '' [] {}
	布尔值为True的数据有:除了上面的都是True
4.存储布尔值的变量名一般推荐使用is开头
	is_delete = False
 	is_alive = True
"""
很多程序中提供的注销账户的功能 其实底层并没有删除数据 而是修改了数据的状态
id		username	password    phone    is_delete
1		jason		123		   110     	 1
2		kevin		321		   120		  0
"""

三、与用户交互

1.获取用户输入

input
#获取用户输入
username = input('请输入您的姓名')
'''
1.先执行input获取用户输入
2.将用户输入的数据绑定给username
3.以后在程序中就可以使用username反复调用用户输入的数据
'''
强调:input获取到的数据会同意处理成字符串类型

2.输出内部信息

print
1.括号内既可以放数据值 也可以放变量名 并且支持多个 中间用逗号隔开
2.自带换行符>>>\r\n  \n (斜杠与字母组合会产生特殊的含义)
3.print也可以切换结束符
	print(数据,end='默认是\n')

四、格式化输出

提前定义好一些内容 将来需要使用的时候可以局部修改
	eg:奖状 合同
现实生活中大部分情况下是用下划线提示别人填写内容 ____你好
但在程序中需要在使用占位符:%s %d
	%s:可以接受任意类型的数据值
    %d:只能接收数字类型
    %08d:产生固定的8位数的数据 不够的用0填充

单个占位符

info = '%s你好'
print(info % 'jason') #jason你好
print(info %('jason'))
print('%s你好' % 'jason')
print('%s你好' %('jason'))

多个占位符

desc = '姓名%s 年龄%s 爱好%s'
print(desc %('jason',18,'read')) #姓名Jason 年龄18 爱好read
print( '姓名%s 年龄%s 爱好%s' % ('jason',18,'read'))

不同占位符的区别

demo1 = '%s您好 您本月的话费是%s 余额是%s' 
print(demo1 % ('jason', 100, 10000000000000))
 # %s常见数据类型都支持
    
demo2 = '%d您好 您本月的话费是%d 余额是%d' 
print(demo2 % ('tony', 1000000000, -100000))
 # %d只支持数字类型
    
注意:
name = input('请输入用户名')
age = input('请输入年龄')
print('姓名%s','年龄%d' % ('name','age'))
会报错!!!!
因为input获取到的数据会统一转成字符串 %d只能接收数字类型 
正确:
print('姓名%s','年龄%d' % ('jason',18))
#姓名 Jason 年龄18

f格式化输出

name = 'jason'
print(f'我是{name}')
{}里直接写变量名就可以

五、基本运算符

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
x **= 1 x = x ** 1

2.比较运算符

名称 比较运算符
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

==ps:= 是赋值符号 是运算符号里的等于

3.赋值运算符

​ 链式赋值

x=y=z=10
print(x,y,z)
#10 10 10 

​ 交叉赋值

如果想把x和y的数据值交换
x = 10
y = 20
x,y=y,x
print(x,y)
#20 10

​ 解压赋值

l1 = [1,2,3,4]
a,b,c,d = l1
print(a,b,c,d)
#1,2,3,4
正常情况下要保证左边的变量名与右边数据值的个数一致 

l1=['nn',1,2,3,4,5,6,]
a,*b,c= l1
print(a,b,c)
#nn [1, 2, 3, 4, 5] 6
当数据值较多的情况下可以采用*号打破上述规则

ps:字符串、列表、字典、集合、元组都支持解压赋值

六、逻辑运算符

主要是配合条件使用

and	与	链接多个条件必须所有条件都成立 结果才成立
or	或	链接多个条件其中有一个条件成立 结果就成立
not	非	讲条件取反操作 对的变成对的

如何得出具体的结果值
and 左边成立 结果取决于右边条件 左边不成立 结果取决于左边条件
or  左边成立 结果取决于左边条件 左边不成立 结果取决于右边条件
条件是数据值结果就是数据值 条件是表达式结果是布尔值

注意:and、or、not、三者混用的时候讯在优先级之分 应该用括号区分开提升代码的可读性

七、成员运算

判断xx在不在某一个群体内

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() 返回一串数字 该数字可以看成是内存地址

is   判断内存地址是否相同
==	 判断数据值是否相同

l1 = [11, 22, 33, 44, 55, 66, 77, 88]
l2 = [11, 22, 33, 44, 55, 66, 77, 88]
print(l1 == l2)  # True
print(id(l1)) #2646662104384
print(id(l2)) #2646662103424
print(l1 is l2)  # False

数据值相同 内存地址可能不同
内存地址相同 数据值肯定相同

小整数池

python针对数据量较小且经常使用的数据会做内存优化:两个相同的数字共享一个内存地址。

仅是为了避免创建相同的数据值而重复申请内存空间所带来的效率问题。

小整数池范围:【-5~256】

不同版本解释器与pycharm可能会有不同的优化 仅作了解即可