引言
- 一个
Python程序由多个模块构成,一般一个模块对应一个文件,每个模块由多条语句构成。 连续换行使用
\注意:以下输出结果为“ab cd”,之间
5个空格print("ab \ cd")Python以Unix时间戳表示时间,以1970年为起始,获取时间需引入time模块import time print(time.time()) # 结果为1773146721.7327766,整数部分为秒
一切皆对象
- 对象由
标识(ID)、类型(Type)和值(Value)构成- 其中,标识为地址,用于变量引用对象
- 变量携带
标识(ID)储存于栈(Stack)中,对象储存于堆(Heap)中- 在
Python中,不需要显性声明变量的类型(Type),解释器能够根据引用的对象自动确定其类型- 创建变量的过程称为
声明,变量通过=符号引用对象的过程称为赋值- 当变量被
del语句删除后,相应的、未被引用的对象会被垃圾回收器删除
变量命名规则和规范
变量命名规范
- 仅可使用字母、数字和
_,且不能以数字开头 - 不能使用
关键词 - 尽量不使用以
__开头和结尾的特殊标识符,如__init__
变量命名规范
- 模块、函数:全
小写英文,用_连接单词,如my_module和my_method - 类名:
驼峰原则,不用_连接单词,如MyClass - 常量:全
大写英文,用_连接单词,如MY_CONST
注意:Python的常量为伪常量,可被修改
变量的赋值
a, b = 100 # 链式赋值
a, b = 1, 2 # 系列解包赋值
a, b = b, a # 利用系列解包赋值,交换变量
‘’‘
过程为先获取等号右边的变量所引用对象的地址,再依次赋值给等号左边的变量
’‘’变量的基本类型
整型
- 进制:二进制为
0b,八进制为0o,十六进制为0x 转换:使用
int()进行强制转换,注意浮点字符串型不能转换>>> int("1.23") Traceback (most recent call last): File "<python-input-0>", line 1, in <module> int("1.23") ~~~^^^^^^^^ ValueError: invalid literal for int() with base 10: '1.23' >>>强制转换会直接丢弃小数部分,不四舍五入,如需则使用
round()函数
- 进制:二进制为
浮点型
- 表示:可以用小数表示
1.23,也可以科学计数法表示123e-2 转换:
- 自然转换:
1+0.23=1.23 - 强制转换:
float()
- 自然转换:
- 表示:可以用小数表示
布尔型:
- 只有
True和False两种类型 - 本质为
1和0,可作为整型参与算数运算
- 只有
字符串型:
- 只有
字符串型(如"abc"),而没有字符型 - 常用的
转义字符包括换行符(\n)和制表符(\t) - 字符串型本身不可改变,看似改变的任何操作实质均为生成新的对象
编码:
- 在
Python中,字符串使用Unicode编码 - 可以使用
ord()和chr()函数进行整型和字符串型的映射转换
- 在
创建:
单引号和双引号均可,可使用不同类型引号嵌套,这种情况下不使用引号的转义字符
str = "I'm hungry! Python解释器识别到引号后会寻找下一个同类引号作为结束标志"多行字符串保留格式
str = """ ab cd1 23 """
操作:
- 输入字符串:
input("prompt") 输出字符串:
print(str, end="")print()自动将非字符串型强制转换字符串型end参数可以指定结尾打印字符,默认为\n,不换行可以留空
- 复制字符串:
"str"*3 - 获取字符串长度:
len(str) - 提取字符串字符:
"string"[2]等价于"string[-4]" - 替换字符串字符:
"strlng".replace("l", "i") 分割字符串:
- 返回字符串型:
str[起始:终止:步长],逆序为str[::-1] - 返回列表:
"str@ing@123".split("@")
- 返回字符串型:
拼接字符串:
"str"+"ing"等价于"str""ing""分隔符".join(string_list)join()效率高于+,区别在于前者只创建一次对象,后者逐步创建不同对象
- 输入字符串:
- 只有
变量的运算及其优先级
变量的位运算
- 按位与
&,按位或|,按位非~,按位异或^(按位相同为0) - 位左移
<<,位右移>>(高位补0,低位丢弃)
补充:常用a<<2和a>>2获得a乘以/除以2的值
变量的四则运算
- 加
+,减-,乘x - 整数除法
//和浮点数除法/
补充:取余%,还可使用divmod(a, b)同时获得a除以b的商和余
变量的赋值运算
=,+=,-=,*=,//=,/=%=,**=a,b = 100, 200 a += (b+10)*2 print(a) # 结果为520,等号右边看成一个整体
变量的运算符优先级
从高到低的顺序排列
- 指数运算符:
** - 位运算符和四则运算符
比较运算符:
<=,<,>,>=等于运算符:
==,!=- 赋值运算符
身份运算符:
is,is not成员运算符:
in,not in- 逻辑运算符:
not,or,and
补充:
is运算符比较地址,==运算符比较值,在判断变量是否为None时优先使用is运算符- 使用
and运算符,一旦遇到False,随后的表达式都不参与运算
字符串专题拓展
拓展1:进阶知识
常量字符串在堆中只保存一份- 比较字符串的
地址(ID)用身份运算符is,比较字符串的值(Value)用等于运算符== - 可以使用成员运算符
in或not in确定子字符串是否在某字符串中
拓展2:常用方法
查找
对于字符串str = "abc123"
| 方法名称 | 方法说明 | 返回结果 |
|---|---|---|
| len(str) | 返回str的长度 | 6 |
| str.startswith("a") | 是否以字符串"a"开头 | True |
| str.endswith("a") | 是否以字符串"a"结尾 | False |
| str.find("b") | 第一次出现字符串"b"的位置 | 1 |
| str.rfind('b') | 最后一次出现字符串"b"的位置 | 1 |
| str.count('c') | 字符串"c"累计出现的次数 | 1 |
| str.isalnum() | str是否全是字母或数字 | True |
去除首位
对于字符串str = "**abc*123**"
| 方法名称 | 方法说明 | 返回结果(新字符串) |
|---|---|---|
" s t r ".strip() | 去除首尾所有的空格 | "s t r" |
| str.strip("*") | 去除首尾所有的* | "abc*123" |
| str.lstrip("*") | 去除开头所有的* | "abc*123**" |
| str.rstrip("*") | 去除结尾所有的* | "**abc*123" |
大小写转换
对于字符串str = "im chimeRa"
| 方法名称 | 方法说明 | 返回结果(新字符串) |
|---|---|---|
| str.capitalize() | 开头首字母大写 | Im chimeRa |
| str.title() | 所有首字母大写 | Im ChimeRa |
| str.upper() | 小写转大写 | IM CHIMERA |
| str.lower() | 大写转小写 | im chimera |
| str.swapcase() | 所有大小写颠倒 | IM CHIMErA |
格式排版
对于字符串str = "abc"
| 方法名称 | 方法说明 | 返回结果(新字符串) |
|---|---|---|
| str.center(7) | 居中对齐 | abc |
| str.center(7, "@") | 用@居中对齐 | @@abc@@ |
| str.ljust(7, "@") | 用@左对齐 | @@@@abc |
| str.rjust(7, "@") | 用@右对齐 | abc@@@@ |
特征判断
| 方法名称 | 方法说明 |
|---|---|
| str.isalnum() | 是否仅为字母或数字 |
| str.isalpha() | 是否仅为字母 |
| str.isdigit() | 是否仅为数字 |
| isspace() | 是否为空白字符 |
| isupper() | 是否为大写字母 |
| islower() | 是否为小写字母 |
注意:
>>> '123.45'.isdigit() False
拓展3:格式化字符串
基础语法:由{}和:组成
# 按顺序格式化
str1 = "我在学{0}语言,我学了{1}天,{0}使我快乐!"
print(str1.format("Python", 10))
# 按参数名格式化
str2 = "我在学{language}语言,我学了{days}天,{language}使我快乐?"
print(str2.format(days=10000, language="Java"))填充对齐:
:后接填充的字符,仅限1个,默认为空格- 居中对齐是
^、左对齐是<、右对齐是>,后面接宽度
>>> print("{:o>5}".format("abc"))
ooabc数字格式化:浮点数带f,整数带d
str = "第一个数是{0:>5d},第二个数是{1:1.2f}"
str.format(123, 10.245)
print(str) # 别被坑了
print(str.format(321, 20.789))
‘’‘
结果为:
第一个数是{0:>5d},第二个数是{1:1.2f}
第一个数是 321,第二个数是20.79
’‘’拓展4:可变字符串
若要进行字符串的原位修改,即在堆中仅改变值而不改变字符串的地址,需使用io.StringIO对象。
import io
str = "abcccc"
print(str) # abcccc
editable_str = io.StringIO(str)
print(editable_str) # <_io.StringIO object at 0x000001F7BC95F2E0>
editable_str.getvalue() # 'abcccc'
editable_str.seek(3)
editable_str.write("dd")
print(editable_str) # <_io.StringIO object at 0x000001F7BC95F2E0>
editable_str.getvalue() # 'abcddc'
1 条评论
可以评论了✌