2、变量、数据类型、运算符

变量

变量命名规范需要遵守标识符命名规范

python和java变量的差别

img

python和java变量存储结构的区别

数据类型

image-20211205113627352

1、数字

int(整数)

整形,正负都可以,可以处理任意大小的整数

对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成10_000_000_00010000000000是完全一样的

a = 10
b = -20
print(a)

float(浮点数)

浮点类型,也就是小数类型

a = 1.22
b = -2.33
print(a)

complex(复数)

复数(Complex),是 Python 的内置类型,直接书写即可。换句话说,Python 语言本身就支持复数,而不依赖于标准库或者第三方库

复数由实部(real)和虚部(imag)构成,在 Python 中,复数的虚部以j或者J作为后缀

c1 = 12 + 0.2j
print("c1Value: ", c1)

2、boolean(布尔)

布尔类型,和java一样,但是首字母需要大写,python3的bool是int类型

a = True
b = False
print(a)

3、String(字符串)

python的String类型,也就是用单引号或双引号框起来的字符串

a = "abcdefg"
b = '1234567'
c = """你好呀
我是字符串多行的写法
使用三个双引号表示"""
print(c)

#根据索引截取字符串,格式a[i:j]
#i、j默认为0,表示截取字符串第i位到第j位不包括第j位
print(a[:2]) #ab
print(a[-3:-1]) #ef
print(a[2:]) #cdefg

#重复输出字符串
print(a * 2) #abcdefgabcdefg

#判断字符串a中是否存在给定字符串de
print('de' in a) #True

#判断字符串a中是否不存在给定字符串de
print('de' not in a) #False

#原始字符串,即忽略所有转义字符,按照实际字面量输出,r/R
print(r'\n') #\n
#将对象转化为供解释器读取的形式,即字符串化
print(repr(str))

常用方法

capitalize() #将字符串的第一个字符转换为大写

center(width, fillchar) #返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。

count(str, beg= 0,end=len(string)) #返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

bytes.decode(encoding="utf-8", errors="strict") #Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。

encode(encoding='UTF-8',errors='strict') #以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'

endswith('obj',beg=0, end=len(string)) #检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.

expandtabs(tabsize=8) #把字符串 string 中的tab符号转为空格,tab 符号默认的空格数是 8 。

find(str, beg=0, end=len(string)) #检测str是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
	
index(str, beg=0, end=len(string)) #跟find()方法一样,只不过如果str不在字符串中会报一个异常。
	
isalnum() #如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False

isalpha() #如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False

isdigit() #如果字符串只包含数字则返回 True 否则返回 False

islower() #如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

isnumeric() #如果字符串中只包含数字字符,则返回 True,否则返回 False

isspace() #如果字符串中只包含空白,则返回 True,否则返回 False.
	
istitle() #如果字符串是标题化的(见 title())则返回 True,否则返回 False
	
isupper() #如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
	
join(seq) #以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

len(string) #返回字符串长度
	
ljust(width[, fillchar]) #返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。

lower() #转换字符串中所有大写字符为小写.

lstrip() #截掉字符串左边的空格或指定字符。

maketrans() #创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

max(str) #返回字符串 str 中最大的字母。

min(str) #返回字符串 str 中最小的字母。

replace(old, new [, max]) #将字符串中的 old替换成new后返回,如果 max 指定,则替换不超过 max 次。

rfind(str, beg=0,end=len(string)) #类似于 find()函数,不过是从右边开始查找.
	
rindex(str, beg=0, end=len(string)) #类似于 index(),不过是从右边开始.
	
rjust(width,[, fillchar]) #返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串

rstrip() #删除字符串末尾的空格或指定字符。
	
split(str="", num=string.count(str)) #以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
	
splitlines([keepends]) #按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

startswith(substr, beg=0,end=len(string)) #检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
	
strip([chars]) #在字符串上执行 lstrip()和 rstrip()
	
swapcase() #将字符串中大写转换为小写,小写转换为大写
	
title() #返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
	
translate(table, deletechars="") #根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
	
upper() #转换字符串中的小写字母为大写
	
zfill (width) #返回长度为 width 的字符串,原字符串右对齐,前面填充0
	
isdecimal() #检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

string模块

import string
# 一些均为string的属性
ascii_letters #获取所有ascii码中字母字符的字符串(包含大写和小写)
ascii_uppercase #获取所有ascii码中的大写英文字母
ascii_lowercase #获取所有ascii码中的小写英文字母
digits #获取所有的10进制数字字符
octdigits #获取所有的8进制数字字符
hexdigits #获取所有16进制的数字字符
printable #获取所有可以打印的字符
whitespace #获取所有空白字符
punctuation #获取所有的标点符号

4、List(列表)

列表,相当于java的ArrayList,可以嵌套,可以进行增删(可变),有序,自动扩容,使用[]表示

names = ['tom','lucy','lily','jatlin']

#查看列表的元素个数
print(len(names))
#访问指定索引的元素
print(names[0])
#获取最后一个元素
print(names[-1])
#添加元素到列表最后
names.append('james')
#插入元素到指定索引位置
names.insert(1,'mary')
#删除末尾的元素,并得到这个元素
print(names.pop())
#删除指定索引的元素,并得到这个元素
print(names.pop(1))
#替换指定索引的元素
names[1] = 'jack'
#切片第二个到第四个,不包括第四个
print(names[1:4])


print(names)

5、Tuple(元组)

元组,和列表非常相似,但是不可以进行增删改(不可变),有序,只可以进行查询,使用()表示

a = ('lucy', 'tom')
print(a)
#只有一个元素也会加逗号,消除歧义
b = (1,)
print(b)

6、Dictionary(字典)

字典,类似于java的HashMap,key-value形式,写法和json类似,无序(python3有序),可变,使用{}表示

一个字典中key是唯一的,如果出现多个key,那么会保存最后一次该key的value

students = {'tom':18,'lucy':22}

#新增元素
students['james'] = 25
#根据key获取value值,如果key不存在会报错
print(students['lucy'])
#判断key是否存在,返回boolean类型
isExist = 'lucy' in students
print(isExist)
#根据key获取value值,key不存在会返回None,或者自己指定的值
age = students.get('lily',99)
print(age)
#根据key删除元素,并获取该key对应的value
print(students.pop('tom'))

print(students)

遍历字典

a = {'name':'lucy','age':18,'grade':9}

# 通过遍历key
for key in a:
    print(key,a[key])

# 遍历values
for value in a.values():
    print(value)

# 遍历字典项,每一项是一个元组
for k,v in a.items():
    print(k,v)

7、Set(集合)

集合,无序(python3有序),基本功能是进行成员关系测试和删除重复元素

可以使用大括号{ } 或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典

#创建方式一:通过一个列表来创建集合
names1 = set(['tom','lucy'])
#创建方式二:直接创建
names2 = {'lucy','mary'}

#添加一个元素,如果添加已存在的元素,不会有效果
names1.add('james')
#删除一个元素
names1.remove('tom')
#set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
#交集
print(names1 & names2)
#并集
print(names1 | names2)

print(names1)

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值

python和java数据类型的对比

在这里插入图片描述

在这里插入图片描述

查看变量中数据的类型

!!!变量没有数据类型,数据类型取决与变量指向的数据的类型

a = {"lucy": 12, "tom": 18}
typeOfa = type(a)
print(typeOfA)
# <class 'dict'>

类型转换

int(a):将a转为int

float(a):将a转为float

str(a):将a转为String

bool(a):将a转为boolean,对于int,0为False,其他都是True,对于字符串,以及集合类型,只要有内容就是True,没有内容就是False

字符和Unicode编码

字符转编码:ord('')

编码转字符:chr()

print(ord('a')) # 97
print(chr(97)) #
print(ord('中')) # 20013 -转十六进制-> 4e2d
print(ord('文')) # 25991 -转十六进制-> 6587
print(str('\u4e2d\u6587')) # 中文

以Unicode表示的str通过encode()方法可以编码为指定的bytes

# 编码
print('中文'.encode('utf-8'))
# 解码
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf8'))
'''
b'\xe4\xb8\xad\xe6\x96\x87'
中文
'''

运算符

算数运算符

1B3A8DB7-A8B2-4486-8B7B-D8DA5874CCAD.png

赋值运算符

基本赋值运算符

=,将等号右边的值,赋值给左边的变量,和java一样,只是某些格式是java没有的

# 可以连续赋值
a = b = 12;
print(a)
# 多个变量同时分别赋值
a,b,c = 11,12,13
print(a)

复合赋值运算符

类似与java的+=*=

image-20211205174718032

比较运算符

和java一样,返回的都是boolean类型的数据

image-20211205174847265

逻辑运算符

相比于java,没有|&,在python中andor都是短路的

image-20211205175143105