变量
变量就是可以重复使用且内容可变的一个量(一个数据的代号)
变量命名的规则
- 变量命名可以包含数字,大小写字母,下划线或者更多(比如汉字),但是不推荐除了前三种内容之外的字符
- 数字不可以作为开头
- 在python中,以下划线开头的内容一般具有特殊意义,不建议使用
- 大小写敏感
- 推荐写法:
- 使用固定含义的英文单词或缩写,srv=server skt = socket,一般以posix命名规则为主
- 大驼峰命名法
- 每个单词第一个字母均大写
- 在Python中给类命名使用此法
- MyFirstLove,IntOne
- 小驼峰命名法
- 类似大驼峰,但第一个字母小写
- 在Python中一般给普通变量或函数命名
- myFirstLove,intOne
- posix命名法
- 单词之间用下划线连接
- 单词全部小写
- my_first_love,int_one
- 保留字和关键字
- 关键字:已经被系统占用的
- 保留字:目前不被系统占用,但以后有可能会用到
- 变量命名必须避开,不要跟关键字和保留字重复
- 系统关键字:‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’
# 查看关键字
# 引用关键字模块
import keyword
# 打印出系统全部关键字
print(keyword.kwlist)
变量声明与赋值
- 格式
var_name = var_value
var1 = var2 = var3 = var_value
var1, var2, var3 = v1, v2, v3
# 定义变量age,把18放入变量age中
age = 18
print(age)
# 给age1, age2, age3放入同样一个内容或值
age1 = age2 = age3 = 18
print(age1, age2, age3)
# 一行内给多个变量赋值
age4, age5, age6 = 12, 21, 45
print(age4, age5, age6)
"""
运行结果:
18
18 18 18
12 21 45
"""
两个变量互换
- 格式:
var1, var2 = var2, var1
# 变量互换案例
a = 1
b = 2
print(a, b)
print(id(a), id(b))
a, b = b, a
print(a, b)
print(id(a), id(b))
"""
运行结果:
1 2
140726778588928 140726778588960
2 1
140726778588960 140726778588928
"""
- 如果一个值赋值给一个新的变量,则实际上是内存重新分配空间和内容给新的变量(新变量指向一段新的内存)
- 如果一个旧的变量赋值给一个新的变量,则实际上是将旧变量的地址和值赋给新的变量(新变量指向旧变量的地址空间)
- 如果一个已经给其他变量赋过值的值(内存中已存在)给新的变量赋值,则实际上是将此值所在的地址和内容赋给新的变量(新变量指向此值所在的地址空间)
# 变量赋值案例
a = 1
b = a
c = 1
d = 2
print(id(a))
print(a)
print(id(b))
print(b)
print(id(c))
print(c)
print(id(d))
print(d)
print('int类型占用字节数为:' + str(id(d)-id(a)))
"""
运行结果:
140726778588928
1
140726778588928
1
140726778588928
1
140726778588960
2
int类型占用字节数为:32
"""
变量类型
严格意义上讲,python只有一个类型——对象
- 标准数据类型有六种
- 数字类型:number(int、float、bool、complex)
- 字符串类型:str
- 列表:list
- 元组:tuple
- 集合:set
- 字典:dict
数字类型(Number)
Python中的数字没有大小限制
整数(int)
- 没有小数部分
- 包含正数,负数和0
- 二进制
- 由0和1组成
- 以0b开头
- 八进制
- 由0-7组成
- 以0o开头
- 十六进制
- 由0-9,A-F组成
- 以0x开头
# 整数
# 二进制定义
a1 = 0b110
print(a1)
print(type(a1))
# 八进制定义
a2 = 0o71
print(a2)
print(type(a2))
# 十六进制定义
a3 = 0xffff
print(a3)
print(type(a3))
"""
运行结果:
6
<class 'int'>
57
<class 'int'>
65535
<class 'int'>
"""
浮点数(float)
- 有小数部分
- 包含正数,负数和0
- 科学计数法
- 在e/E后面用整数表示10的指数
# 浮点数
a = 3.
b = .4
c = 0.0
print(a, b, c)
print(type(a), type(b), type(c))
# 科学计数法
d = 1.84e2
print(d)
print(type(d))
"""
运行结果:
3.0 0.4 0.0
<class 'float'> <class 'float'> <class 'float'>
184.0
<class 'float'>
"""
复数(complex)
一个由实部和虚部组成的数字
- 复数的虚部用“j/J”表示
a = 5+4j
print(a)
布尔值(bool)
表示真假的值
- 只有两个值:True/False
- 在Python中,布尔值可以当成数字使用
- 布尔值当成数字使用:True=1,False=0
- 数字当成布尔值使用:0=False,其余当作True
# 布尔值当作数字使用
age1 = 18 + True
print(age1)
age2 = 18 + False
print(age2)
# 判断语句
a = -1
if a:
print('负数是True')
else:
print('负数是False')
"""
运行结果:
19
18
负数是True
"""
字符串
表达文字信息的内容
- 形式上是引号引起来的一段内容
- 引号包括单引号,双引号和三引号
- 单引号和双引号含义一样
- 三引号用来表示多行信息
- 单双引号可以交叉使用
# 字符串案例
# 单双引号含义一致
love1 = 'I love Python'
print(love1)
love2 = "I love Python"
print(love2)
# 三引号可以表示多行
love3 = '''
I
love
Python
'''
print(love3)
# 三引号可以表示多行
love4 = """
I
love
Python
"""
print(love4)
"""
运行结果:
I love Python
I love Python
I
love
Python
I
love
Python
"""
转义字符
用一种方法表示出一系列不方便写出的内容,比如回车键、换行符等
- 借助反斜杠字符转义,一旦字符串中出现反斜杠,则反斜杠后面一个或者几个字符将会进行转义
- 不同操作系统对换行操作有不同的表示
- Windows:
\n
- Linux:
\r\n
- Windows:
- 常用的转义字符:
转义字符 | 描述 |
---|---|
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\b | 退格 |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy代表的字符 |
\xyy | 十六进制数,yy代表的字符 |
\other | 其他的字符以普通格式输出 |
# 转义字符案例1
s = 'Let\'s Go'
print(s)
"""
运行结果:
Let's Go
"""
# 转义字符案例2
s = 'c:\\User\\MadmanLyy'
print(s)
"""
运行结果:
c:\User\MadmanLyy
"""
# 转义字符案例3
s = 'I\nam\nMadman'
print(s)
"""
运行结果:
I
am
Madman
"""
None类型
表示没有
- 用来占位置
- 用来解除变量绑定
- 如果函数没有返回值,可以返回None
字符串(str)
格式化
把字符串按照一定格式进行打印或填充
格式化的分类
传统格式化
- 使用"%"进行格式化
- "%"也叫占位符
- %d:此处应该放入一个整数
- %s:此处应该放入一个字符串
- 占位符可以单独使用
- 如果字符串中有占位符,则有几个占位符必须用几个实际内容代替,或者一个也不要
符号 | 说明 |
---|---|
%s | 字符串 |
%c | 整数转换为单个字符 |
%d | 十进制整数 |
%u | 无符号整数 |
%o | 八进制 |
%x | 十六进制,字母为小写 |
%X | 十六进制,字母为大写 |
%e | 浮点数,e为小写 |
%E | 浮点数,E为大写 |
%f/%F | 十进制浮点数 |
%g/%G | 十进制浮点数或指数浮点数自动转换 |
- 格式字符前出现整数表示此占位符所占位置的宽度
- 格式字符前出现“-”表示左对齐
- 格式字符前出现“+”表示右对齐
- 格式字符前出现“0”表示位数不足用“0”补齐
- width表示宽度
- pricision表示精度
# 占位符案例1
s = "I love %s"
print(s)
print(s%'Python')
"""
运行结果:
I love %s
I love Python
"""
# 占位符案例2
print('I love %s'%'Coding')
print('I have %s'%100)
print('我今年%d岁了'%18)
print('我今年%d岁了'%'18')
"""
运行结果:
I love Coding
I have 100
我今年18岁了
TypeError: %d format: a number is required, not str
"""
# 占位符案例3
s1 = 'I am %fKg weight, %fm height.'
print(s1)
print(s1%(48.5, 1.61))
s2 = 'I am %.2fKg weight, %.2fm height.'
print(s2)
print(s2%(48.5, 1.61))
"""
运行结果:
I am %fKg weight, %fm height.
I am 48.500000Kg weight, 1.610000m height.
I am %.2fKg weight, %.2fm height.
I am 48.50Kg weight, 1.61m height.
"""
format()格式化
- 使用函数形式进行格式化,代替百分号的占位符形式
- 可指定位置也可不指定
- 推荐指定位置
- 格式字符
- ^, <, >分别是居中、左对齐、右对齐,后面带宽度
- ":"号后面带填充的字符,只能是一个字符,不指定则默认用空格填充
- “+“号表示在正数前显示”+”,在负数前显示"-"," "表示在正数前加空格
- b、d、o、x分别表示二进制、十进制、八进制、十六进制
- 可用大括号"{}"来转义大括号
# format()格式化案例1
s1 = '{} {}!'
print(s1.format('Hello', 'World'))
s2 = '{} {}!'.format('Hello', 'World')
print(s2)
s3 = '{1} {1}!'.format('Hello', 'World')
print(s3)
s4 = 'I am {0},{0} is me!'.format('Madman')
print(s4)
s5 = 'I am {},{} is me!'.format('Madman')
print(s5)
"""
运行结果:
Hello World!
Hello World!
World World!
I am Madman,Madman is me!
IndexError: tuple index out of range
"""
# format()格式化案例2
s = 'We are {team_name}, our URL is {url}, {person_name} so good!'.format(team_name='Pythoner', url='No', person_name='Madman')
print(s)
"""
运行结果:
We are Pythoner, our URL is No, Madman so good!
"""
# format()格式化案例3
s = 'We are {team_name}, our URL is {url}, {person_name} so good'
s_dict = {'team_name': 'Pythoner', 'url': 'No', 'person_name': 'Madman'}
# 解包操作
s = s.format(**s_dict)
print(s)
"""
运行结果:
We are Pythoner, our URL is No, Madman so good
"""
# format()格式化案例4
s = 'I am {:.2f}m height, {:.2f}Kg weight.'
print(s)
print(s.format(1.61, 58.77))
"""
运行结果:
I am {:.2f}m height, {:.2f}Kg weight.
I am 1.61m height, 58.77Kg weight.
"""
字符串内置函数
查找类函数
find()/rfind()
find():从左边开始查找字符串是否包含一个子串,如果是则返回子串第一次出现的位置
rfind():从右边开始查找字符串是否包含一个子串,如果是则返回子串第一次出现的位置
- 格式:
str1.find(str2)
- str2为子串
- 参数
- 子串
- 开始查找的位置
- 结束查找的位置
- 返回值:int类型,-1表示没找到,其余数字表示子串第一次出现的位置
# find()案例
s1 = 'Madman is a good man'
s2 = 'good'
rst1 = s1.find(s2)
print(type(rst1))
print(rst1)
s3 = 'bad'
rst2 = s1.find(s3)
print(type(rst2))
print(rst2)
s4 = 'a'
rst3 = s1.find(s4, 3, 7)
print(type(rst3))
print(rst3)
"""
运行结果:
<class 'int'>
12
<class 'int'>
-1
<class 'int'>
4
"""
index()/rindex()
index():从左边开始查找字符串是否包含一个子串,如果是则返回子串第一次出现的位置
rindex():从右边开始查找字符串是否包含一个子串,如果是则返回子串第一次出现的位置
- 格式:
str1.index(str2)
- str2为子串
- 参数
- 子串
- 开始查找的位置
- 结束查找的位置
- 返回值:int类型,找到则返回子串第一次出现的位置,没有找到则报错
# index()案例
s1 = 'Madman is a good man'
s2 = 'good'
rst1 = s1.index(s2)
print(type(rst1))
print(rst1)
s3 = 'bad'
rst2 = s1.index(s3)
print(type(rst2))
print(rst2)
"""
运行结果:
<class 'int'>
12
ValueError: substring not found
"""
判断类函数
此类函数的特定是一般都用is开头
isalpha()
判断是否字母
- 汉字被认为是alpha,所以此函数无法区分英文字母和汉字
- 格式:
str.isalpha()
- 返回值:布尔值
# isalpha()案例
s1 = 'I am madman'
s2 = '我是疯子'
s3 = 'Madman'
print(type(s1.isalpha()))
print(s1.isalpha())
print(type(s2.isalpha()))
print(s2.isalpha())
print(type(s3.isalpha()))
print(s3.isalpha())
"""
运行结果:
<class 'bool'>
False
<class 'bool'>
True
<class 'bool'>
True
"""
isdigit()、isnumeric()、isdecimal()区别
- 此类函数不建议使用
- isdigit()
- True:Unicode数字、Byte数字(单字节)、全角数字(双字节)、罗马数字
- False:汉字数字
- Error:无
- isdecimal()
- True:Unicode数字、全角数字(双字节)
- False:罗马数字、汉字数字
- Error:Byte数字(单字节)
- isnumeric()
- True:Unicode数字、全角数字(双字节)、罗马数字、汉字数字
- False:无
- Error:Byte数字(单字节)
# isdigit()、isnumeric()、isdecimal()案例
num = '一二三四'
print(num.isdigit())
print(num.isdecimal())
print(num.isnumeric)
"""
运行结果:
False
False
True
"""
islower()/isupper()
islower():判断整个字符串是不是小写
isupper():判断整个字符串是不是大写
- 格式:
str.islower()
- 返回值:布尔值
- 注意
- 汉字字符串无大小写概念,所以会显示False
- 空格等符号会被忽略
str1 = 'madman'
str2 = 'Madman'
str3 = 'mad man'
str4 = '疯子'
print(type(str1.islower()))
print(str1.islower())
print(type(str2.islower()))
print(str2.islower())
print(type(str3.islower()))
print(str3.islower())
print(type(str4.islower()))
print(str4.islower())
"""
运行结果:
<class 'bool'>
True
<class 'bool'>
False
<class 'bool'>
True
<class 'bool'>
False
"""
内容判断类函数
startswith()/endswith()
startswith():检查否个字符串是否以某个子串开头
endswith():检查否个字符串是否以某个子串结尾
- 格式:str1.startswith(str2)
- str2是子串
- 参数
- 被检查的字符串,必须要有
- 开始检查范围
- 结束检查范围
# startswith()/endswith()案例
str1 = 'Madman'
str2 = 'is'
s = 'Madman is a good man'
print(type(s.startswith(str1)))
print(s.startswith(str1))
print(type(s.startswith(str2)))
print(s.startswith(str2))
"""
运行结果:
<class 'bool'>
True
<class 'bool'>
False
"""
操作类函数
strip()/lstrip()/rstrip()
strip():删除字符串两边指定的字符,如果指定字符连续,会删除多个字符,默认是空格
lstrip():删除字符串左边指定的字符,如果指定字符连续,会删除多个字符,默认是空格
rstrip():删除字符串右边指定的字符,如果指定字符连续,会删除多个字符,默认是空格
- 格式:
str.strip()
# strip()案例
str1 = ' Madman '
print('--' + str1.strip() + '--')
"""
运行结果:
--Madman--
"""
join()
指定分隔符拼接成字符串
- 格式:
分隔符.join(可迭代内容)
# join()案例
s = '-'
ss = ['Madman', 'is', 'a', 'good', 'man']
print(s.join(ss))
"""
运行结果:
Madman-is-a-good-man
"""